全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3463
推到 Plurk!
推到 Facebook!

流水號

答題得分者是:dinokuo
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-24 16:30:46 IP:210.202.xxx.xxx 未訂閱
謝謝大家解決我的問題(區碼) 不好意思 還有一個問題想請教您 有關流水號 如何根據區碼自動帶出四碼號碼 如 400==>0001 400==>0002 400==>0003 若改為 401==>0001 401==>0002 不知您是否看的懂 謝謝您 Larry
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-24 17:40:09 IP:61.219.xxx.xxx 未訂閱
如 400==>0001 400==>0002 400==>0003 若改為 401==>0001 401==>0002 --------------------------- 請問上面那兩行的意思是什麼呢 另外是什麼根據區碼帶出流水號
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-24 17:51:50 IP:61.220.xxx.xxx 未訂閱
你可以另外用Query2做 在 onNewRecord 事件寫
procedure TForm1.Query2NewRecord(DataSet: TDataSet);
  var
    ss : string;
begin
  Query2.Close ;
  Query2.SQL.Clear;                 
  Query2.SQL.Text := ' SELECT * FROM TableName WHERE SINO = :SINO ORDER BY SINO';
  Query2.ParamByName('SINO').AsString := DBEdit1.Text ;
  Query2.Open ;     //上面這段程式碼是說 依據你dbedit1.text的值做搜尋 然後依照
 //流水號做排序      if Query2.IsEmpty then //如果Query2是空的 代表沒資料
  begin
   if QryChequed.State <> dsinsert then QryChequed.Insert;//進入新增狀態        Query2.FieldByName('SINO').AsString := '000' IntToStr(1) ;//第一筆流水號為'0001';
  end
  else //如果有
  begin
    Query2.Last ;//到最後一筆
    ss := Query2.FieldByName('SINO').AsString ; // 把目前最大流水號的值給ss
    ss := inttostr(strtoint(ss) 1);//轉換型態把ss 1;
    Query2.Append; //進入新增狀態
    case Length(ss) of //判斷ss的長度 前面補0
      1: Query2.FieldByName('SINO').AsString := '000' ss;
      2: Query2.FieldByName('SINO').AsString := '00' ss;
      3: Query2.FieldByName('SINO').AsString := '0' ss;
      4: Query2.FieldByName('SINO').AsString := ss;
    end;
  end;
  //可以把要新增的欄位值寫在這      Query2.ApplyUpdates; //或Query2.post 都可以
end;
ps : 這裡的SINO 是指 你流水號的欄位名稱 把它換成你的流水號的欄位名稱 tablename 就是你用到的table名稱 不清楚再討論 < >< > 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/10/24 17:58:44
------
天行健
君子當自強不息~~@.@
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-24 21:26:52 IP:211.74.xxx.xxx 未訂閱
T.J.B 您好 照您的範例出現下列錯誤 if QryChequed.State <> dsinsert then QryChequed.Insert;//進入新增狀態 [Error] Unit1.pas(72): Undeclared identifier: 'QryChequed' [Error] Unit1.pas(72): 'THEN' expected but identifier 'State' found [Error] Unit1.pas(93): ';' expected but '.' found [Error] Unit1.pas(95): Declaration expected but end of file found [Fatal Error] Project1.dpr(5): Could not compile used unit 'Unit1.pas' 可請告知哪裡出錯 謝謝您
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-24 22:16:41 IP:163.31.xxx.xxx 未訂閱
1:把所有QryChequed 改成 Query2 2:if QryChequed.State <> dsinsert 加括號如下 if (QryChequed.State <> dsinsert) 這樣就可以了 回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/10/24 22:28:59
------
天行健
君子當自強不息~~@.@
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-10-25 11:28:16 IP:210.202.xxx.xxx 未訂閱
還是有問題 秀不出來號碼 另在區號部分 如果所有欄位搭配Enter來跳行 則鄉鎮市直接秀的功能就會失效 請問有什麼解決方法 謝謝您
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-10-25 12:52:55 IP:61.220.xxx.xxx 未訂閱
引言: 另在區號部分 如果所有欄位搭配Enter來跳行 則鄉鎮市直接秀的功能就會失效 請問有什麼解決方法 謝謝您
如果所有欄位搭配Enter來跳行 則鄉鎮市直接秀的功能就會失效 這是一定的 因為你只用區號欄位做搜尋 換成其他欄位搭配Enter 一定搜尋不到 解決方法就是 在每一個DBEdit 的 onKeypress 事件加入之前搜尋區號 的程式碼 但是 最重要的一點就是把這一行 if Query1.locate('區號',dbedit1.text,[]) then 其中的區號欄位名稱及dbedit1去把它改掉即可 例如 ; 你有 dbedit2 及對應的欄位名稱 'aa'就改為 if Query1.locate('aa',dbedit2.text,[]) then 你有 dbedit3 及對應的欄位名稱 'bb'就改為 if Query1.locate('bb',dbedit3.text,[]) then 以此類推 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-10-25 16:34:01 IP:210.202.xxx.xxx 未訂閱
T.J.B您好 有關流水號部分還是有問題 附上程式碼 麻煩幫我看看 procedure TForm1.Query1NewRecord(DataSet: TDataSet); var ss : string; begin Query1.Close ; Query1.SQL.Clear; Query1.SQL.Text:='SELECT * FROM Customer WHERE ID = :ID ORDER BY ID'; Query1.ParamByName('ID').AsString := DBEdit1.Text ; Query1.Open ; //上面這段程式碼是說 依據你dbedit1.text的值做搜尋 然後依照 //流水號做排序 if Query1.IsEmpty then //如果Query2是空的 代表沒資料 begin if Query1.State <> dsinsert then Query1.Insert;//進入新增狀態 Query1.FieldByName('ID').AsString := '000' IntToStr(1) ;//第一筆流水號為'0001'; end else //如果有 begin Query1.Last ;//到最後一筆 ss := Query1.FieldByName('ID').AsString ; // 把目前最大流水號的值給ss ss := inttostr(strtoint(ss) 1);//轉換型態把ss 1; Query1.Append; //進入新增狀態 case Length(ss) of //判斷ss的長度 前面補0 1: Query1.FieldByName('ID').AsString := '000' ss; 2: Query1.FieldByName('ID').AsString := '00' ss; 3: Query1.FieldByName('ID').AsString := '0' ss; 4: Query1.FieldByName('ID').AsString := ss; end; end; //可以把要新增的欄位值寫在這 Query1.ApplyUpdates; //或Query2.post 都可以end; end;
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-10-25 17:17:06 IP:61.220.xxx.xxx 未訂閱
看目前的程式碼 是沒有問題 不過 你可以改成下面的程式碼再run一次 應該會成功 如果還有問題  麻煩你把錯誤訊息post上來 我會更清楚
引言: T.J.B您好 有關流水號部分還是有問題 附上程式碼 麻煩幫我看看
procedure TForm1.Query1NewRecord(DataSet: TDataSet);
  var
    ss : string;
begin
  Query1.Close ;
  Query1.SQL.Clear;
  Query1.SQL.Add:=('SELECT * FROM Customer WHERE ID = :ID ORDER BY ID');
  Query1.ParamByName('ID').AsString := DBEdit1.Text ;
  Query1.Open ;
 //上面這段程式碼是說 依據你dbedit1.text的值做搜尋 然後依照
 //流水號做排序
  if Query1.IsEmpty then //如果Query1是空的 代表沒資料
  begin
  
   Query1.Insert;//進入新增狀態
    Query1.FieldByName('ID').AsString := '000' IntToStr(1) ;//第一筆流水號為'0001';
  end
  else //如果有
  begin
    Query1.Last ;//到最後一筆
    ss := Query1.FieldByName('ID').AsString ; // 把目前最大流水號的值給ss
    ss := inttostr(strtoint(ss) 1);//轉換型態把ss 1;
    
    Query1.insert; //進入新增狀態
    if length(ss) = 1 then//判斷ss的長度 前面補0
       Query1.FieldByName('ID').AsString := '000' ss
    else if length(ss) = 2 then 
       Query1.FieldByName('ID').AsString := '00' ss
    else if length(ss) = 3 then 
       Query1.FieldByName('ID').AsString := '0' ss
    else
       Query1.FieldByName('ID').AsString := ss;
  end;
   
end;
回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/10/25 17:18:32
------
天行健
君子當自強不息~~@.@
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-10-28 10:01:23 IP:210.202.xxx.xxx 未訂閱
流水號還是無法秀出來 也無法寫進資料庫 需要把DataBase給您嗎(Access) procedure TForm1.Query1NewRecord(DataSet: TDataSet); var ss : string; begin Query1.Close ; Query1.SQL.Clear; Query1.SQL.Add('SELECT * FROM Customer WHERE ID = :ID ORDER BY ID'); //Query1.SQL.Add:=('SELECT * FROM Customer WHERE ID = :ID ORDER BY ID');用ADD不是不能有':='嗎 Query1.ParamByName('ID').AsString := DBEdit1.Text ; Query1.Open ; //上面這段程式碼是說 依據你dbedit1.text的值做搜尋 然後依照 //流水號做排序 if Query1.IsEmpty then //如果Query1是空的 代表沒資料 begin Query1.Insert;//進入新增狀態 Query1.FieldByName('ID').AsString := '000' IntToStr(1) ;//第一筆流水號為''0001''; end else //如果有 begin Query1.Last ;//到最後一筆 ss := Query1.FieldByName('ID').AsString ; // 把目前最大流水號的值給ss ss := inttostr(strtoint(ss) 1);//轉換型態把ss 1; Query1.insert; //進入新增狀態 if length(ss) = 1 then//判斷ss的長度 前面補0 Query1.FieldByName('ID').AsString := '000' ss else if length(ss) = 2 then Query1.FieldByName('ID').AsString := '00' ss else if length(ss) = 3 then Query1.FieldByName('ID').AsString := '0' ss else Query1.FieldByName('ID').AsString := ss; end; end; end.
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-10-28 10:38:32 IP:61.220.xxx.xxx 未訂閱
打太快了沒注意到 add是不用:= 符號    另外要說明一點的是 原則上流水號的產生用這段程式碼絕對沒有錯 但是跟你欄位型態及這個介面的操作流程也有關係 還有你要產生的流水號欄位是否在Customer 裡面 如果沒有 那Sql就要重新Select 了 還有你的query的屬性有沒有設定    你試著用一個新button 當作新增鈕 把程式碼放到裡面去Try  記的要把onNewRecord事件裡的程式碼清除 才不會去執行onNewRecord事件裡的程式碼    如果還是不會過 把錯誤訊息post上來 就知道什麼問題了 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
dinokuo
初階會員


發表:3
回覆:29
積分:31
註冊:2002-09-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-10-29 08:13:28 IP:61.218.xxx.xxx 未訂閱
T.J.B 寫的真是非常仔細 好有耐心 提供另一種作法 通常我是開另一個Table來存放各個流水號 作法如下: //假設存放流水號的Table叫SEQTABLE //而區碼的流水號放NO1 這個欄位 var MySeq : integer; begin with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT NO1 FROM SEQTABLE'); Open; //取得序號 MySeq := Fields[0].AsInteger 1; end; //回寫序號 with Query1 do begin Close; SQL.Clear; SQL.Add('UPDATE SEQTABLE SET NO1 = :PSEQ'); ParamByName('PSEQ').AsInteger := MySeq; ExecSQL; end; end; 大致作法是這樣子 好處是 不會因為資料量增加而拖慢程式的執行速度 僅供參考
larryleu
初階會員


發表:39
回覆:67
積分:38
註冊:2002-06-19

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-10-29 09:27:59 IP:210.202.xxx.xxx 未訂閱
dinkuo 您好 謝謝您的幫助 想請問您 您的範例是否也是寫在Query1的NewRecord裡 另要秀在欄位裡應如何改 謝謝您
系統時間:2024-11-25 18:36:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!