问题是这样的,有三个表,一个是进货表,一个是销售表,一个是库存表,库存表里面要求出进仓数,出仓数,和结仓数,进仓数就是进货的配件数,问题出在出仓数,在输入库存表后,查找出销售表中配件编号和库存表中配件编号相同的销售表的记录,这个是用adotable的locate语句求出,但是同一配件可以不同的时间销售出,这样出仓数就不能仅仅等于对应配件的销售数量,应该等于同一个配件不同时间销售处的数量的和。下面是代码
if adotable3.Locate('配件编号',ADOTable2.FieldByName('配件编号').Value,[lopartialkey])then begin
sum:=0 ;
if adotable3.RecordCount<>1 then begin
for i:=0 to ADOTable3.RecordCount-1 do
sum:=sum+ADOTable3.FieldByName('数量').Value;
end else begin
sum:=ADOTable3.FieldByName('数量').Value;
end;
ADOTable2.FieldByName('出仓数').Value:=sum;
上面ADOTABLE3 是销售表,ADOTABLE2是库存表;
如果这里面的adotable3.RecordCount数等于用LOCATE查询出的记录数的话,就能运行成功了,可是adotable3.RecordCount是整个表没有查询前记录的数目,这个用LOCATE查询出的记录数怎么求呢?
请各位高手帮帮忙!最好能给出代码,谢谢了。在线等。
if adotable3.Locate('配件编号',ADOTable2.FieldByName('配件编号').Value,[lopartialkey])then begin
sum:=0 ;
if adotable3.RecordCount<>1 then begin
for i:=0 to ADOTable3.RecordCount-1 do
sum:=sum+ADOTable3.FieldByName('数量').Value;
end else begin
sum:=ADOTable3.FieldByName('数量').Value;
end;
ADOTable2.FieldByName('出仓数').Value:=sum;
上面ADOTABLE3 是销售表,ADOTABLE2是库存表;
如果这里面的adotable3.RecordCount数等于用LOCATE查询出的记录数的话,就能运行成功了,可是adotable3.RecordCount是整个表没有查询前记录的数目,这个用LOCATE查询出的记录数怎么求呢?
请各位高手帮帮忙!最好能给出代码,谢谢了。在线等。
解决方案 »
- 猜猜jinjazz会提供哪个答案?
- 对SysTreeView32窗口类名中的某一行执行点击操作
- 急啊,在delphi中如何获取.dbf(VFP)表中的所有字段名?
- 这个while是Bug还是优化后的结果??
- 请帮忙参考一下书
- 请问怎样用adoquery执行存储过程
- 如何使两台互连的电脑能自由上网,不受另一方的限制
- 用indy8 的TidTCPServer做一个接收数据的服务端,我想把收到的数据在memo中同步显示出来,如何实现??
- delphi5与delphi6兼容性问题
- 如何调试ActiveXForm?
- 一个关于子窗体的问题
- 用ado连接局域网sql server2000时出错:sql server2000不存在或是拒绝访问
where m.配件编号=d.配件编号 group by m.配件编号
var i:integer;
begin
adotable1.Close;
adotable1.Open;
adotable3.Close;
adotable3.Open;
adotable2.Close;
adotable2.Open;
for i:=0 to ADOTable2.Recordset.RecordCount-1 do
ADOTable2.Delete;
adotable1.first;
while not adotable1.Eof do begin
ADOTable2.insert;
ADOTable2.FieldByName('批次号').Value:=ADOTable1.FieldByName('批次号').Value;
ADOTable2.FieldByName('配件编号').Value:=ADOTable1.FieldByName('配件编号').Value;
ADOTable2.FieldByName('配件名称').Value:=ADOTable1.FieldByName('配件名称').Value;
ADOTable2.FieldByName('配件型号').Value:=ADOTable1.FieldByName('配件型号').Value;
ADOTable2.FieldByName('单位').Value:=ADOTable1.FieldByName('单位').Value;
ADOTable2.FieldByName('进货公司').Value:=ADOTable1.FieldByName('进货公司').Value;
ADOTable2.FieldByName('车型').Value:=ADOTable1.FieldByName('车型').Value;
ADOTable2.FieldByName('品种类型').Value:=ADOTable1.FieldByName('品种类型').Value;
ADOTable2.FieldByName('进仓数').Value:=ADOTable1.FieldByName('数量').Value;
ADOTable2.FieldByName('零售价').Value:=ADOTable1.FieldByName('零售价格').Value;
ADOTable2.FieldByName('成本价').Value:=ADOTable1.FieldByName('批发价格').Value;
if adotable3.Locate('配件编号',ADOTable2.FieldByName('配件编号').Value,[lopartialkey])then begin
sum:=0 ;
if adotable3.RecordCount<>1 then begin
for i:=0 to adotable3.RecordCount-1 do
sum:=sum+ADOTable3.FieldByName('数量').Value;
end else begin
sum:=ADOTable3.FieldByName('数量').Value;
end;
ADOTable2.FieldByName('出仓数').Value:=sum;
ADOTable2.FieldByName('结仓数').Value:=ADOTable1.FieldByName('数量').Value-ADOTable3.FieldByName('数量').Value;
ADOTable2.FieldByName('销售日期').Value:=ADOTable3.FieldByName('销售时间').Value;
end;
ADOTable2.Post;
adotable1.Next;
end;
adotable2.close;
adotable2.open;
adotable2.First;
while not adotable2.Eof do begin
if ADOTable2.FieldByName('销售日期').asstring = '' then begin
adotable2.edit;
ADOTable2.FieldByName('结仓数').Value:=ADOTable2.FieldByName('进仓数').Value;
adotable2.post;
end;
//if adotable2.State=dsEdit then adotable2.Post;
adotable2.Next;
end;
messagedlg('库存表信息输入成功!',mtinformation,[mbok],0);
//ADOTable2.Refresh;
end;
试试下面的语句:
insert into mytable (配件编号,outnum,innum)
select i.配件编号,sum(i.outnum) as outnum ,sum(i.innum) as innum from
(select sum(销售表.数量) as outnum,m.配件编号 from 销售表 m,库存表 d
where m.配件编号=d.配件编号 group by m.配件编号
union
select sum(销售表.数量) as innum,m.配件编号 from 进货表 m,库存表 d
where m.配件编号=d.配件编号 group by m.配件编号) i group by i.配件编号