請問大大...自動編號問題 |
尚未結案
|
ert-ert
一般會員 ![]() ![]() 發表:7 回覆:9 積分:3 註冊:2005-02-23 發送簡訊給我 |
|
ert-ert
一般會員 ![]() ![]() 發表:7 回覆:9 積分:3 註冊:2005-02-23 發送簡訊給我 |
|
cashxin2002
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 在Form中再加一個ADOQuery2元件﹐在對應資料表的ADOQuery1元件新增后(AfterInsert事件)﹐先用ADOQuery2元件來查詢當前的資料表中有無資料﹐若無資料就將000001值指定給DBEdit1﹐如果有值的話﹐就使用ADOQuery2查詢當前資料表中DBEdit1對應主鍵的最大值﹐將此值再加1﹐指定給DBEdit1即可﹒
另外需要注意的一個問題是DBEdit1對應的主鍵欄位是字串型態﹐在取得當前最大值并做+1的動作時需要將其轉為Integer形態﹐然后再在指定給新增筆資料時轉為原來的字串形態﹐範例如下﹕
將ADOQuery2正确連結到上游的ADOConnection元件﹐設定与ADOQuery1相同﹐在ADOQuery1的AfterInsert事件中﹕ Var MaxField : String; begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select * From 資料表'); ADOQuery2.Open; if Not ADOQuery2.IsEmpty then begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select Max(主鍵欄位名) From 資料表'); ADOQuery2.Open; MaxField := ADOQuery2.Fields.Fields[0].Value; DBEdit1.Text := Format('%6.6d', [StrToInt(MaxField)+1]); end else begin DBEdit1.Text := '000001'; end; end;=================================
------
忻晟 |
pillar62
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:9 回覆:324 積分:271 註冊:2002-04-15 發送簡訊給我 |
你好
cashxin2002大大的程式碼可以再減少一點喔!!這樣就不用跟資料庫要兩次資料
MaxField : String; begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('Select Max(主鍵欄位名) as maxno From 資料表'); ADOQuery2.Open; if ADOQuery2maxno.asstring <> '' then begin MaxField := ADOQuery2.Fields.Fields[0].Value; DBEdit1.Text := Format('%6.6d', [StrToInt(MaxField) 1]); end else begin DBEdit1.Text := '000001'; end; end;Pillar Wang
------
Pillar Wang |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |