無法自動產生新的異動單號(環境是delphi+access),請高手指教! ( 积分: 50 )

  • 主题发起人 主题发起人 firebooks
  • 开始时间 开始时间
F

firebooks

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure Tyd.Label4Click(Sender: TObject);
var
s,s1,s2,s3,L:string;
m:integer;
begin
s:=FormatDateTime('yyyymmdd',now());
s1:='A'+copy(s,4,1);
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max([yd_no]) as 異動單號 from yd_list ');
ADOQuery2.Active:=True;
ADOQuery2.open;
end;
if ADOQuery2.FieldByName('異動單號').isnull then
begin
s2:=s1+'0001'; //無法新增此單號,如: A60001
Edit11.Text:=s2;
end
else
begin
L:=trim(ADOQuery2.FieldByName('異動單號').value);
m:=strtoint(trim(copy(L,3,5)));
if m<10 then
s3:=s1+'000'+inttostr(m+1)
else if m<100 then
s3:=s1+'00'+inttostr(m+1)
else if m<1000 then
s3:=s1+'0'+inttostr(m+1);

end;
Edit11.Text:=s3;

end;
以上代號可以自動產生異動單號,但是當yd_list表的yd_no好段為空時或跨年份時不能產生
新單號(如:A70001);
如:
2006年第一張單單號為:A60001;
2007年第一張單單號為:A70001;
鑒于以上原因,現修正後代碼如下(但是在點擊Label4時沒有任何反應,所以不知如何修正,請高手指教~~!):
procedure Tyd.Label4Click(Sender: TObject);
var
s,s1,s2,s3,L1,L2:string;
n,p,m:integer;
begin
s:=FormatDateTime('yyyymmdd',now());
s1:='A'+copy(s,4,1);
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max([yd_no]) as 異動單號 from yd_list ');
ADOQuery2.Active:=True;
ADOQuery2.open;
end;
L1:=trim(ADOQuery2.FieldByName('異動單號').value);
n:=strtoint(trim(copy(L1,2,1)));
p:=strtoint(copy(s,4,1));
if n<p then ////在這裡,這句語句是否有問題????[?]

begin
s2:=s1+'0001';
Edit11.Text:=s2;
end
else
begin
L2:=trim(ADOQuery2.FieldByName('異動單號').value);
m:=strtoint(trim(copy(L2,3,5)));
if m<10 then
s3:=s1+'000'+inttostr(m+1)
else if m<100 then
s3:=s1+'00'+inttostr(m+1)
else if m<1000 then
s3:=s1+'0'+inttostr(m+1);

end;
Edit11.Text:=s3;

end;
 
怎么搞得这么复杂,看不明白
 
鑒于以上原因,現修正後代碼如下(但是在點擊Label4時沒有任何反應,所以不知如何修正,請高手指教~~!):

procedure Tyd.Label4Click(Sender: TObject);
var
s,s1,s2,s3,L1,L2:string;
n,p,m:integer;
begin
s:=FormatDateTime('yyyymmdd',now());
s1:='A'+copy(s,4,1);
with ADOQuery2 do
begin
close;
sql.Clear;
sql.Add('select max([yd_no]) as 異動單號 from yd_list ');
ADOQuery2.Active:=True;
ADOQuery2.open;
end;
L1:=trim(ADOQuery2.FieldByName('異動單號').value);
n:=strtoint(trim(copy(L1,2,1)));
p:=strtoint(copy(s,4,1));
if n<p then ////在這裡,這句語句是否有問題????

begin
s2:=s1+'0001';
Edit11.Text:=s2;
end
else
begin
L2:=trim(ADOQuery2.FieldByName('異動單號').value);
m:=strtoint(trim(copy(L2,3,5)));
if m<10 then
s3:=s1+'000'+inttostr(m+1)
else if m<100 then
s3:=s1+'00'+inttostr(m+1)
else if m<1000 then
s3:=s1+'0'+inttostr(m+1);

end;
Edit11.Text:=s3;

end;
問題就在這段代碼,我也想少點,但不知怎麼處理,請高手指點一下!
 
后退
顶部