關於訂單單號問題 |
答題得分者是:eric039
|
tomc
一般會員 ![]() ![]() 發表:41 回覆:35 積分:15 註冊:2003-07-27 發送簡訊給我 |
麻煩幫我看看以下程式錯在哪裡,或有沒有更好的辦法?我想通過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 發送簡訊給我 |
.... 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 發送簡訊給我 |
我是不知道為什麼?? 不過既然你都用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 發送簡訊給我 |
|
eric039
中階會員 ![]() ![]() ![]() 發表:57 回覆:126 積分:51 註冊:2002-11-30 發送簡訊給我 |
我大部分都是用這樣的方式做的,給您參考參考:
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |