初学者,库存盘点的一个问题!(50分)

  • 主题发起人 主题发起人 windlee
  • 开始时间 开始时间
W

windlee

Unregistered / Unconfirmed
GUEST, unregistred user!
我是用delphi7+access2000写的一个库存系统,在月结盘点时,出问题,用sum统计出来的当月入库数和当月出库数,想保存到pandian这个表里,但是运行了之后,当月没入库或没出库的物品都不是等于0,而且是数字是乱填入的。

代码如下,初学者写得很乱,不好意思:
var
c1,c2,str1,str2:string;
begin
if (trim(combobox1.text)<>'') or (trim(combobox2.Text)<>'') then
begin
str1:=combobox1.Text+'-'+combobox2.Text+'-01';
str2:=combobox1.Text+'-'+inttostr(strtoint(combobox2.Text)+1)+'-01';

with adoquery3 do
begin
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.add('select code,sum(count) as c1 from income where day>:pd and day<:nd group by code');
adoquery3.parameters.parambyname('pd').value:=strtodate(str1);
adoquery3.parameters.parambyname('nd').value:=strtodate(str2);
adoquery3.Open;
adoquery3.First;
if adoquery3.fieldbyname('c1').AsString='' then
c1:='0'
else c1:=adoquery3.fieldbyname('c1').AsString;

with adoquery4 do
begin
adoquery4.close;
adoquery4.sql.clear;
adoquery4.SQL.add('select code,sum(count) as c2 from outcome where day>:pd and day<:nd group by code');
adoquery4.parameters.parambyname('pd').value:=strtodate(str1);
adoquery4.parameters.parambyname('nd').value:=strtodate(str2);
adoquery4.Open;
adoquery4.First;
if adoquery4.fieldbyname('c2').asstring='' then
c2:='0'
else c2:=adoquery4.Fieldbyname('c2').AsString;

adoquery1.close;
adoquery2.Close;
adoquery1.SQL.Clear;
adoquery2.SQL.clear;
ADOQuery1.SQL.Text:='select * from pandian';
adoquery2.sql.Text:='select * from store';
adoquery1.Open;
adoquery2.Open;
adoquery2.First;

while not adoquery2.Eof do
begin
adoquery1.Edit;
adoquery1.Append;
adoquery1.FieldByName('code').AsString:=adoquery2.fieldbyname('code').AsString;
adoquery1.FieldByName('name').AsString:=adoquery2.fieldbyname('name').AsString;
adoquery1.FieldByName('type').AsString:=adoquery2.fieldbyname('type').AsString;
adoquery1.FieldByName('qms').ascurrency:=adoquery2.fieldbyname('count').ascurrency;
adoquery1.FieldByName('qcs').ascurrency:=adoquery1.fieldbyname('qms').ascurrency;
adoquery1.FieldByName('day').AsDateTime:=date();
adoquery1.FieldByName('rks').ascurrency:=adoquery3.FieldByName('c1').ascurrency;
adoquery1.FieldByName('cks').ascurrency:=adoquery4.FieldByName('c2').ascurrency;
adoquery1.Post;
adoquery3.Next;
adoquery4.Next;
adoquery2.Next;
adoquery1.Next;
end;
messagebox(handle,'月结完成!','提示',mb_iconinformation);
end;
end;
end;
end;
end.
 
adoquery3.Close;
adoquery3.SQL.Clear;
adoquery3.SQL.add('select code,sum(count) as c1 from income where day>:pd and day<:nd group by code');
这边写得真的好乱
var s:string;
begin
s:=''select code,sum(count) as c1 from income where day>:pd and day<:nd group by code';
adoquery3.close;
adoquery3.sql.clear;
adoquery3.sql.add(s);
adoquery3.prepared;
adoquery3.open;
end;
这样看起来比较清楚
 
俺也是初学,没看出什么问题啊^_^||
 
我的问题是,sum(count) as c1 from income和sum(count) as c2 from outcome,我将c1与c2保存到pandian表里的rks和cks。但是没有入库或出库的物品,rks和cks也有数字。
 
没人回答吗?
 
我的理解是你的Store里面保存的是一份最完整的物品列表

但你这肯定是乱七八糟了,你看看你最后写入的语句,你如何确定几个数据集是一样的顺序?!
比如:有可能进货里面第七个是“键盘”
出货第七个是“鼠标”
Store表中第七个是“键盘”
你想想最终数据会是什么样子?

具体代码就不写了,给个思路吧。
进货: select code,sum(count) as c1 from income where XXXXXX
出货: select code,sum(count) as c2 from outcome where XXXXX
列表: select * from store
写入: while not adoquery2.Eof do
begin
code := adoquery2.FieldByName('code').AsString;
adoquery1.FieldByName('code').AsString:= Code;
adoquery1.FieldByName('name').AsString:=adoquery2.fieldbyname('name').AsString;
adoquery1.FieldByName('type').AsString:=adoquery2.fieldbyname('type').AsString;
adoquery1.FieldByName('qms').ascurrency:=adoquery2.fieldbyname('count').ascurrency;
adoquery1.FieldByName('qcs').ascurrency:=adoquery1.fieldbyname('qms').ascurrency;
adoquery1.FieldByName('day').AsDateTime:=date();
if AdoQuery3.Locate('Code', code, []) then
adoquery1.FieldByName('rks').ascurrency:=adoquery3.FieldByName('c1').ascurrency;
if AdoQuery4.Locate('Code', code, []) then
adoquery1.FieldByName('cks').ascurrency:=adoquery4.FieldByName('c2').ascurrency;

end;
 
3Q,娃娃,问题解决了。
 
后退
顶部