请教各位大侠一个问题,急死人了

ruanuxan 2011-02-24 11:17:27
最近在做一个小程序,源程序如下:
// 取单据的明细项目
with qrysaveKC do
begin
Close;
sql.Clear;
SQL.Add('SELECT YLBM,YLGG,GRSL FROM yl_rKDJ WHERE DJBH=:DJBH');
ParamByName('djbh').AsString := qrydh.fieldbyname('djbh').AsString;
Open;
end;
//将单据中明细项目的出库数量从库存表中对应减去
qrysaveKC.First;
while not qrysaveKC.eof do
begin
with qrydjh do
begin
Close;
sql.Add('update YCL_dtkc set kcsl=kcsl-:grsl where YLBM=:bh and YLgg=:gg');
ParamByName('bh').AsString := qrysaveKC.fieldbyname('YLBM').AsString;
parambyname('gg').AsString := qrysaveKC.fieldbyname('YLgg').AsString;
parambyname('GRSL').asfloat := qrysaveKC.fieldbyname('GRSL').AsFloat;
ExecSQL;
end;
qrysaveKC.Next;
end;

现在的问题是如果单据有多条记录的话,总是最后一条记录将对应的库存表中减去两次
比如当前库存中记录为:
名称 规格 数量
A 1 0
B 1 0
当前单据记录为:
名称 规格 数量
A 1 10
B 1 10
执行该源码后库存表记录应该为:
名称 规格 数量
A 1 -10
B 1 -10
但是关键问题是执行该代码后库存表记录成了:
A 1 -10
B 1 -20
我跟踪程序每条明细确实只减了一次,真的郁闷,求各位大侠帮忙!不胜感激!


...全文
45 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ruanuxan 2011-02-24
  • 打赏
  • 举报
回复
非常感谢,是我自己不细心,确实是少了SQL.CLEAR这句,大脑缺氧了。。呵呵,感谢CSDN上的兄弟,在我遇到问题的时候,总是热心帮助。
kye_jufei 2011-02-24
  • 打赏
  • 举报
回复
while not qrysaveKC.eof do
begin
with qrydjh do
begin
Close;
sql.clear;//加上這句看看
sql.Add('update YCL_dtkc set kcsl=kcsl-:grsl where YLBM=:bh and YLgg=:gg');
ParamByName('bh').AsString := qrysaveKC.fieldbyname('YLBM').AsString;
parambyname('gg').AsString := qrysaveKC.fieldbyname('YLgg').AsString;
parambyname('GRSL').asfloat := qrysaveKC.fieldbyname('GRSL').AsFloat;
ExecSQL;
end;
Next;
end;
kye_jufei 2011-02-24
  • 打赏
  • 举报
回复
try...
qrysaveKC.First;
while not qrysaveKC.eof do
begin
with qrydjh do
begin
Close;
sql.clear;//加上這句看看
sql.Add('update YCL_dtkc set kcsl=kcsl-:grsl where YLBM=:bh and YLgg=:gg');
ParamByName('bh').AsString := qrysaveKC.fieldbyname('YLBM').AsString;
parambyname('gg').AsString := qrysaveKC.fieldbyname('YLgg').AsString;
parambyname('GRSL').asfloat := qrysaveKC.fieldbyname('GRSL').AsFloat;
ExecSQL;
end;
qrysaveKC.Next;
end;
kye_jufei 2011-02-24
  • 打赏
  • 举报
回复
  qrysaveKC.First;
while not qrysaveKC.eof do
begin
with qrydjh do
begin
Close;
sql.clear;
sql.Add('update YCL_dtkc set kcsl=kcsl-:grsl where YLBM=:bh and YLgg=:gg');
ParamByName('bh').AsString := qrysaveKC.fieldbyname('YLBM').AsString;
parambyname('gg').AsString := qrysaveKC.fieldbyname('YLgg').AsString;
parambyname('GRSL').asfloat := qrysaveKC.fieldbyname('GRSL').AsFloat;
ExecSQL;
end;
qrysaveKC.Next;
end;
guduhen 2011-02-24
  • 打赏
  • 举报
回复
语句需要先清空呀
顶楼上
xhh_88 2011-02-24
  • 打赏
  • 举报
回复
// 取单据的明细项目
with qrysaveKC do
begin
Close;
sql.Clear;
SQL.Add('SELECT YLBM,YLGG,GRSL FROM yl_rKDJ WHERE DJBH=:DJBH');
ParamByName('djbh').AsString := qrydh.fieldbyname('djbh').AsString;
Open;
end;
//将单据中明细项目的出库数量从库存表中对应减去
qrysaveKC.First;
while not qrysaveKC.eof do
begin
with qrydjh do
begin
Close;
sql.Clear;//改为这样看看
sql.Add('update YCL_dtkc set kcsl=kcsl-:grsl where YLBM=:bh and YLgg=:gg');
ParamByName('bh').AsString := qrysaveKC.fieldbyname('YLBM').AsString;
parambyname('gg').AsString := qrysaveKC.fieldbyname('YLgg').AsString;
parambyname('GRSL').asfloat := qrysaveKC.fieldbyname('GRSL').AsFloat;
ExecSQL;
end;
qrysaveKC.Next;
end;

2,498

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧