请问如何将发货单上的数据从库存数据中扣除?(100分)

  • 主题发起人 主题发起人 潇洒公子
  • 开始时间 开始时间

潇洒公子

Unregistered / Unconfirmed
GUEST, unregistred user!
发货单数据为:
品名 单价 数量 金额
钢笔 5.50 10 55.00
铅笔 1.20 20 24.00

库存数据为:
品名 单价 数量 金额
钢笔 5.50 80 440.00
铅笔 1.20 50 60.00
练习本 2.00 50 100.00

请问如何在发货后,把发出的货从库存数据中扣除?具体应怎样操作?多谢?
 
Oracle中:
update 库存表 set 数量=(select 库存表.数量-出货表.数量 from 出货表 where 品名=库存表.品名),金额=(select 库存表.金额-出货表.金额 from 出货表 where 品名=库存表.品名) where exists(select 1 from 出货表 where 品名=库存表.品名);
ACCESS中很简单:
update 库存表 a,出货表 b set a.数量=a.数量-b.数量,a.金额=a.金额-b.金额 where a.编号=b.编号 and a.品名=b.品名;
 
请问使用query控件应如何操作呢?
 
query.sql.clear;
query.sql.add('update....');
query.execute;

[^]
 
或者用低级的办法:
fhdTable 发货单
kcTable 库存

fhdTable.first;
while Not fhdTable.Eof do
begin
kcTalbe.locate('品名',fhdTable.Fieldbyname('品名').Asstring,[]);
kcTable.Edit;
kcTable.FieldValues['数量'] := kcTable.FieldValues['数量'] - fhbTable.FieldValues['数量'] ;
kcTable.FieldValues['金额'] := kcTable.FieldValues['金额'] - fhbTable.FieldValues['金额'] ;
kcTable.Post;
fhdTable.Next;
end;

但zhangkan的方法是最简捷有效的。
 
try
AdoConnection.BeginTrans;
......
AdoQuery1.Sql.Add('insert into 发货单表')
......
AdoQuery2.Sql.Add('update 库存表');
......
AdoConnection.Commit;
except
AdoConnection.RollBack;
end;
 
数据库的一致性与完整性最好在数据库级来保障,应该过触发器
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部