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

關於訂單單號問題

答題得分者是:eric039
tomc
一般會員


發表:41
回覆:35
積分:15
註冊:2003-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-03 10:08:37 IP:61.144.xxx.xxx 未訂閱
麻煩幫我看看以下程式錯在哪裡,或有沒有更好的辦法?我想通過XSNO欄位值(如:WS030903002)設定訂單單號,格式為"WS"+年月日+流水號 procedure TForm4.autoid; var idd:string; //idd為XSNO欄位的後三位(流水號),如"003" iid:integer;//iid為流水號的整數類型,如:3 d:string; begin   d:='select * from 銷售表 where 日期 = #' + formatdatetime('yyyy/mm/dd',now) +'#';   adoquery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' + pa + ';Persist Security Info=False';   adoquery1.active:=true;  iid:=0;   adoquery1.SQL.Text :=d;   adoquery1.Open;     if adoquery1.Recordset.RecordCount=0 then   //adoquery1的記錄為空不知能不能用***.Recordcount=0呢?     idd:='001'  else     begin         adoquery1.Recordset.MoveLast;          idd:=copy(adoquery1.fieldbyname('xsno').Value,9,3);         //問題就在這裡,這裡似乎得到的不是記錄的最後一條的xsno的值;          iid:=strtoint(idd);          iid:=iid+1 ;          if iid<100 then idd:='0' inttostr(iid); if iid<10 then idd:='00' inttostr(iid); end; /////////////////////////////////// //以下無關緊要 adoquery1.SQL.Text :=d; adoquery1.Open; combobox1.Clear; while adoquery1.Recordset.EOF=false do begin if adoquery1.fieldbyname('xsno').value<>null then combobox1.Items.add (adoquery1.fieldbyname('XSNo').value); adoquery1.Recordset.MoveNext; end; combobox1.Items.add('WS' formatdatetime('yymmdd',date) idd); //訂單號格式:"WS030903001" combobox1.ItemIndex:=combobox1.Items.count-1; adoquery1.close; end; 交流.學習
------
交流.學習
tomc
一般會員


發表:41
回覆:35
積分:15
註冊:2003-07-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-03 10:36:06 IP:61.144.xxx.xxx 未訂閱
....     if adoquery1.Recordset.RecordCount=0 then   //adoquery1的記錄為空不知能不能用***.Recordcount=0呢?     idd:='001'  else     begin         adoquery1.Recordset.MoveLast;          {這裡改成:adoquery1.last;就可以了,但有點不明,Adoquery1.recordset.movelast和adoquery1.last有什麼不同呢?}          idd:=copy(adoquery1.fieldbyname('xsno').Value,9,3);         //問題就在這裡,這裡似乎得到的不是記錄的最後一條的xsno的值;          iid:=strtoint(idd);          iid:=iid+1 ;          if iid<100 then idd:='0' inttostr(iid); if iid<10 then idd:='00' inttostr(iid); end; ... 交流.學習
------
交流.學習
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-03 12:06:38 IP:218.163.xxx.xxx 未訂閱
我是不知道為什麼?? 不過既然你都用adoquery元件了,就不要用adoquery1.recordset.XXX 去存取..這不能保證無問題,請用adoquery1.XXX來存取,用delphi幫我們打包好的屬性,應該比較穩定, Use of Recordset to directly access the underlying ADO recordset object requires a good working knowledge of ADO objects in general and the ADO recordset object in particular. Using recordset is not recommended unless you are familiar with recordset object operations. Consult the Microsoft Data Store SDK help for specific information on using recordset objects. 永遠追不上技術更新的速度
------
星期一,二...無窮迴圈@@
shinhrn
中階會員


發表:54
回覆:165
積分:83
註冊:2002-06-05

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-05 11:06:27 IP:61.65.xxx.xxx 未訂閱
d:='select * from 銷售表 where 日期 = #' formatdatetime('yyyy/mm/dd',now) '#'; 改成 d:='select max(xsno) as xsno from 銷售表 where 日期 = #' formatdatetime('yyyy/mm/dd',now) '#'; 這樣就可以直接取得最大值了
eric039
中階會員


發表:57
回覆:126
積分:51
註冊:2002-11-30

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-07 12:25:14 IP:61.216.xxx.xxx 未訂閱
我大部分都是用這樣的方式做的,給您參考參考: var TempXsno: string; //暫時的 Xsno begin d:='select xsno from 銷售表 Where xsno = (Select max(xsno) from 銷售表 Where 日期 = #' formatdatetime('yyyy/mm/dd',now) '#')' adoQuery1.sql.text := d; adoQuery1.Open; 這樣如果資料表內有資料就只會取得最大的一筆資料。可以這樣判斷。 if adoQuery1.isempty then TempXsno := 'WS' yymmdd '001' else TempXsno := 'WS' yymmdd RightStr('000' IntToStr(StrToInt(Copy(adoQuery1.FieldByName('xsno').AsString,9,3)) 1),3); 這樣就可以抓到您要的值。 給您參考參考 Eric Lin
------
Eric Lin
系統時間:2024-06-27 0:30:38
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!