流水號 |
答題得分者是:dinokuo
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
你可以另外用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 發送簡訊給我 |
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 發送簡訊給我 |
|
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 另在區號部分 如果所有欄位搭配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 發送簡訊給我 |
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 發送簡訊給我 |
看目前的程式碼 是沒有問題
不過 你可以改成下面的程式碼再run一次
應該會成功
如果還有問題
麻煩你把錯誤訊息post上來 我會更清楚
引言: T.J.B您好 有關流水號部分還是有問題 附上程式碼 麻煩幫我看看回首來時路 也無風雨也無晴~~@.@ 發表人 - T.J.B 於 2002/10/25 17:18:32procedure 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;
------
天行健 君子當自強不息~~@.@ |
larryleu
初階會員 發表:39 回覆:67 積分:38 註冊:2002-06-19 發送簡訊給我 |
流水號還是無法秀出來 也無法寫進資料庫 需要把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 發送簡訊給我 |
打太快了沒注意到
add是不用:= 符號 另外要說明一點的是
原則上流水號的產生用這段程式碼絕對沒有錯
但是跟你欄位型態及這個介面的操作流程也有關係
還有你要產生的流水號欄位是否在Customer 裡面 如果沒有
那Sql就要重新Select 了
還有你的query的屬性有沒有設定 你試著用一個新button 當作新增鈕
把程式碼放到裡面去Try
記的要把onNewRecord事件裡的程式碼清除
才不會去執行onNewRecord事件裡的程式碼 如果還是不會過
把錯誤訊息post上來
就知道什麼問題了
< >< > 回首來時路
也無風雨也無晴~~@.@
------
天行健 君子當自強不息~~@.@ |
dinokuo
初階會員 發表:3 回覆:29 積分:31 註冊:2002-09-11 發送簡訊給我 |
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |