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

如何做到編號自動累加?

答題得分者是:Xenwensun
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-09-02 13:14:19 IP:61.218.xxx.xxx 未訂閱
如題,謝謝!!
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-09-02 13:26:28 IP:211.20.xxx.xxx 未訂閱
如果你是使用oracle則有一TYPE sequence可以使用,如是用MSSQL則可將欄位設定INT型式,並設定識別為"是",並設定識別值初始值及識別值增量詳細說明可參考MSSQL的線上說明 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-09-02 13:31:18 IP:202.178.xxx.xxx 未訂閱
你可以另外開啟一個一樣的table2,設定跟你原本的table1一樣 然後在onnewrecord的時候將你想要累加的欄位當索引排序 把資料移到最後一筆加1就是你要的答案了 下面的你做參考,從書上節下來的 procedure Tform1.Table1NewRecord(DataSet:TDataset); begin table2.last; table1.fieldbyname('CustNo').AsInteger := table2.fieldbyname('custNo').AsInteger 1; end; 這段是節錄delphi進銷存程式設計的126頁 我也是新手,所以只好照著書說的回答 試試看吧!
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-09-02 18:06:09 IP:61.218.xxx.xxx 未訂閱
謝謝指導,我已解決問題了!! 但是還有一個問題!!按照您的方式是整數加一,但是如果我的編號中有A~Z呢?該怎麼辦?
andersonhsieh
版主


發表:33
回覆:531
積分:439
註冊:2002-06-10

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-09-02 19:40:51 IP:211.23.xxx.xxx 未訂閱
你的編號規則是什麼 @@~~飛翔在天際的精靈~~@@
------
@@~~飛翔在天際的精靈~~@@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-09-02 21:48:20 IP:218.165.xxx.xxx 未訂閱
我的編號規則為 A000000001 ~ A999999999 B000000001 ~ A999999999 C000000001 ~ C999999999 ....... ....... Z000000001 ~ Z999999999    
引言: 你的編號規則是什麼 @@~~飛翔在天際的精靈~~@@
yenhorng
中階會員


發表:12
回覆:82
積分:94
註冊:2002-06-18

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-09-03 00:52:42 IP:210.65.xxx.xxx 未訂閱
[quote] 我的編號規則為 A000000001 ~ A999999999 B000000001 ~ A999999999 C000000001 ~ C999999999 ....... ....... Z000000001 ~ Z999999999 [quote] 1.將舊編號取出一個字元,存入變數cStr待用。(以此類推) 2.舊編號只留下數字部分。 3.新編號 :=cStr Copy('000000000' IntToStr(StrToInt(舊編號) 1),9)
Xenwensun
一般會員


發表:3
回覆:5
積分:11
註冊:2002-07-31

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-09-11 13:25:48 IP:61.140.xxx.xxx 未訂閱
tmp:='A'; A,1 B,2 c,9 etc.. procedure Tform1.Table1NewRecord(DataSet:TDataset); begin //tmp=A tabel2.locate('tmp',tmp,[]); table1.fieldbyname('CustNo').AsInteger := table2.fieldbyname('custNo').AsInteger 1; end; 試一下,僅供參考. ss
------
ss
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-09-18 17:50:14 IP:61.218.xxx.xxx 未訂閱
呼叫前輩大人、站長大大!!~~~ 我還是寫不出來 ~>_<~ 請幫幫我一下,感恩~~感恩~~ 我的編號原則是A00000001 ~ Z00000001,我該怎麼做??可以給點sample
T.J.B
版主


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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-09-19 10:10:33 IP:61.220.xxx.xxx 未訂閱
引言: 呼叫前輩大人、站長大大!!~~~ 我還是寫不出來 ~>_<~ 請幫幫我一下,感恩~~感恩~~ 我的編號原則是A00000001 ~ Z00000001,我該怎麼做??可以給點sample
我大致上已經寫好了 你可否重新發問並且把你要用到 的欄位名稱寫出來 我再把變數及欄位名稱改成你要的sample post上來給你參考 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-09-19 10:48:01 IP:61.218.xxx.xxx 未訂閱
我的Database欄位如下!!,我希望當我按Query.Insert時,自動在CLIENTID.DBEdit這欄為自動編號 CREATE TABLE `ma01` ( `CLIENTID` varchar(16) NOT NULL, //客戶編號 #我要的編號是 A2002000001, A=客戶屬性,2002是年,000001則是流水號 `CREATE_DATE` date default NULL, //建檔日期 `CLIENT_KIND` varchar(60) NOT NULL , //客戶屬性 `CH_NAME` varchar(60) default NULL, //公司名稱 `CH_ADDRESS` varchar(60) default NULL, //公司地址 `INVOICE_NAME` varchar(60) default NULL, //發票抬頭 `INVOICE_ADDRESS` varchar(120) default NULL, //發票地址 `TELE` varchar(20) default NULL, //聯絡電話 `FAX` varchar(20) default NULL, //傳真
T.J.B
版主


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

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-09-19 11:05:41 IP:61.220.xxx.xxx 未訂閱
引言: 我的Database欄位如下!!,我希望當我按Query.Insert時,自動在CLIENTID.DBEdit這欄為自動編號 CREATE TABLE `ma01` ( `CLIENTID` varchar(16) NOT NULL, //客戶編號 #我要的編號是 A2002000001, A=客戶屬性,2002是年,000001則是流水號 `CREATE_DATE` date default NULL, //建檔日期 `CLIENT_KIND` varchar(60) NOT NULL , //客戶屬性 `CH_NAME` varchar(60) default NULL, //公司名稱 `CH_ADDRESS` varchar(60) default NULL, //公司地址 `INVOICE_NAME` varchar(60) default NULL, //發票抬頭 `INVOICE_ADDRESS` varchar(120) default NULL, //發票地址 `TELE` varchar(20) default NULL, //聯絡電話 `FAX` varchar(20) default NULL, //傳真
請問一下客戶編號 開頭的第一個字母是不會變的 還是會變 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-09-19 12:16:11 IP:61.218.xxx.xxx 未訂閱
我的客戶編號開頭的A是不變的!! 如果客戶編號開頭的A 要做到連結另一個Table可以嗎? create table NUMBER( NAME varchar(20), NUMID varchar(6), ); --------------------------- |客戶屬性 |客戶編號 | --------------------------- |飯店業 |A | --------------------------- | 銀行業 | B | --------------------------- ~>_<~ 終於碰到好心人..幫小弟熱心解答.感恩..
T.J.B
版主


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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-09-19 12:37:01 IP:61.220.xxx.xxx 未訂閱
引言: 我的Database欄位如下!!,我希望當我按Query.Insert時,自動在CLIENTID.DBEdit這欄為自動編號 CREATE TABLE `ma01` ( `CLIENTID` varchar(16) NOT NULL, //客戶編號 #我要的編號是 A2002000001, A=客戶屬性,2002是年,000001則是流水號 `CREATE_DATE` date default NULL, //建檔日期 `CLIENT_KIND` varchar(60) NOT NULL , //客戶屬性 `CH_NAME` varchar(60) default NULL, //公司名稱 `CH_ADDRESS` varchar(60) default NULL, //公司地址 `INVOICE_NAME` varchar(60) default NULL, //發票抬頭 `INVOICE_ADDRESS` varchar(120) default NULL, //發票地址 `TELE` varchar(20) default NULL, //聯絡電話 `FAX` varchar(20) default NULL, //傳真
sample: unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DB, DBTables; type TForm1 = class(TForm) Button1: TButton; Query1: TQuery; Query2: TQuery; procedure Button1Click(Sender: TObject); procedure Query1NewRecord(DataSet: TDataSet); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin end; procedure TForm1.Query1NewRecord(DataSet: TDataSet); var client_no,c1,c2,client_id,j,year : String; i,leg,leg2 :integer; begin year := copy(DateToStr(now),1,4); //取時間為年的值 做客戶編號用 Query2.Close; //用一個新的Query專門做此搜尋的動作 Query2.SQL.Clear; Query2.SQL.Add('Select CLIENTID form ma01 order by CLIENTID desc' ); //將客戶編號由大到小做排序動作 方便等一下取最大值 Query2.Open; if Query2.IsEmpty then begin client_no := 'A' year '000001';//如果資料庫是空的 就給起始號 end else begin Query2.first; //否則 將指標移到第一筆 抓目前編號為最大值的客戶編號 client_no := Query2.FieldbyName('CLIENTID').AsString; end; //------- //---開始對client_no做字串拆解及累加的動作 c1 := copy(client_no,1,1);// 取出第一個字母放入此變數 c2 := copy(client_no,6,6);//取出其他的內容 c2 := IntToStr(StrToInt(c2) 1);//將字串轉成數字加一後再轉回字串 leg := Length(client_no)-Length(c2);//算出要補0的位數 for i := 2 to leg do begin j := j '0'; //將0補上 end; client_id := c1 year j c2; //例如 a 2002 00000 2 //再把字串相加 即可得到加一之後最新的客戶編號 Query2.FieldByName('CLIENTID').AsString := client_id; //往下可繼續做要新增紀錄的部分 end; end. 就醬子 < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-09-19 13:14:29 IP:61.218.xxx.xxx 未訂閱
感謝 T.J.B 兄的大恩大德...感恩!!感恩!!< >< >
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-09-19 17:48:27 IP:61.218.xxx.xxx 未訂閱
T.J.B兄 出現錯誤訊息!! Dataset not in edit or insert mode. ?????????
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-09-19 19:19:01 IP:211.22.xxx.xxx 未訂閱
引言: T.J.B兄 出現錯誤訊息!! Dataset not in edit or insert mode. ?????????
這行 Query2.FieldByName('CLIENTID').AsString := client_id; 出問題了。 -- Everything I say is a lie.
T.J.B
版主


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-09-19 23:54:30 IP:163.31.xxx.xxx 未訂閱
引言: T.J.B兄 出現錯誤訊息!! Dataset not in edit or insert mode. ?????????
呵呵~~~~~~~~ 你必須把Query2的RequestLive 屬性設為True 才可以ㄚ 另外再加這二行程式 (對不起 這行沒寫到) 呵呵呵~~~~~~~~ if Query2.State <>dsinsert then query1.Insert;<--加這一行 Query2.FieldByName('CLIENTID').AsString := client_id; //往下繼續做要新增紀錄的部分 Query2.Post; <--這行也要加在最後 這樣就okㄌ < >< > 回首來時路 也無風雨也無晴~~@.@
------
天行健
君子當自強不息~~@.@
Ethan
版主


發表:101
回覆:170
積分:78
註冊:2006-07-05

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-09-20 01:06:34 IP:218.165.xxx.xxx 未訂閱
感謝您的幫忙讓小弟我解決了問題,感恩~~
系統時間:2024-05-03 20:57:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!