最近在做一个小程序,源程序如下:
// 取单据的明细项目
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
我跟踪程序每条明细确实只减了一次,真的郁闷,求各位大侠帮忙!不胜感激!
// 取单据的明细项目
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
我跟踪程序每条明细确实只减了一次,真的郁闷,求各位大侠帮忙!不胜感激!
解决方案 »
- 下学期开学要做软件~准备用Delphi写~高手推荐几本书~或指点一二~谢谢
- JAVA转变为DELPHI代码
- 还上应用程序跟网页的问题
- 如何直接Seek到文件末尾?
- Form1.frReport1.DesignReport;没响应?
- 如何将装入到graphi字段的图片压缩??
- 刚爬到三座小山,开心!同时问一个小问题,散分!
- VB.net代码改写为delphi
- 我在玩的反恐精英时,一碰到我军与敌军打仗时,硬盘灯猛闪,速度奇慢,分辨率已到640*480,怎么办?
- 小问题。
- InsideVCL,TButton鼠标点击消息流动,“Call Stack”窗口,两个问题??
- [程序員健康篇]程序員如何緩解壓力,保持心理健康!
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;
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;
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;
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;