VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2470|回复: 11

以下while代码如何进行优化?(入库后修改库存表中的现存数量)

[复制链接]

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
发表于 2020-1-5 00:30:01 | 显示全部楼层 |阅读模式
//修改库存表中的现存数量
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Select * from RukuTmp');
ADOQuery1.Open;
//从入库临时表中查找所有数据
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
  ADOQuery2.Close;
  ADOQuery2.SQL.Clear;
  ADOQuery2.SQL.Add('Select * from Kucun where ChID=:a');
  ADOQuery2.Parameters.ParamByName('a').Value:=ADOQuery1.fieldbyname('ChID').AsString;
  ADOQuery2.Open;
  ADOQuery2.Edit;
  ADOQuery2.FieldByName('Kcsl').AsFloat:=ADOQuery2.fieldbyname('Kcsl').AsFloat
    +ADOQuery1.fieldbyname('Rksl').AsFloat;   
  ADOQuery2.Post;
  ADOQuery1.Next;
end;
回复

使用道具 举报

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 01:48:01 | 显示全部楼层
能不能一次性修改库存表中的数据,而不要用while循环?
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-5 08:57:01 | 显示全部楼层
update Kucun
set Kcsl=Kucun.Kcsl+RukuTmp.Rksl
from Kucun ,RukuTmp
where Kucun.ChID=RukuTmp.ChID
回复

使用道具 举报

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 10:36:01 | 显示全部楼层
库存数量和库存金额都可以这样改
update Kucun
set Kcsl=Kucun.Kcsl+RukuTmp.Rksl,Kcje=Kucun.Kcje+RukuTmp.Rkje
from Kucun ,RukuTmp
where Kucun.ChID=RukuTmp.ChID

可是库存单价呢?
库存单价是用库存金额除以库存数量得到的。
update Kucun set Kcdj=Kcje/Kcsl from Kucun,RukuTmp
where Kucun.ChID=RukuTmp.ChID and Kucun.Kcsl<>0(库存数量不为0)
update Kucun set Kcdj=0 from Kucun,RukuTmp
where Kucun.ChID=RukuTmp.ChID and Kucun.Kcsl=0(库存数量为0)
回复

使用道具 举报

0

主题

4

帖子

4.00

积分

新手上路

Rank: 1

积分
4.00
发表于 2020-1-5 11:42:01 | 显示全部楼层
用SUM求和
with ADOQuery1 do
begin
  close;
  sql.clear;
  sql.add('update Kucun set Kcsl = c.Kcsl from (select ChID,sum(Kcsl) as Kcsl from RukuTmp group by ChID) c, warehouse where Kucun.ChID =c.ChID ');
  execsql;
end;
回复

使用道具 举报

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 13:03:01 | 显示全部楼层
xclzc17 ( )
我试了,你的方法不对,Update后不能连接两个表。
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-5 13:48:01 | 显示全部楼层
什么数据库?不能连接两个表是什么意思?
回复

使用道具 举报

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 14:12:01 | 显示全部楼层
我是Access数据库,运行时提示:
语法错误(操作符丢失)在查询表达式'Kucun.Kcsl+RukuTmp.Rksl from Kucun'中。
回复

使用道具 举报

2

主题

12

帖子

3.00

积分

新手上路

Rank: 1

积分
3.00
 楼主| 发表于 2020-1-5 14:21:01 | 显示全部楼层
所以我判定是',RukuTmp'没有被程序识别出来,是不是update后只能跟一个表?
回复

使用道具 举报

0

主题

40

帖子

27.00

积分

新手上路

Rank: 1

积分
27.00
发表于 2020-1-5 16:30:01 | 显示全部楼层
哦,可能是Access不支持这种SQL语法吧,你可以试一下四月天 的方法。

如果还不行,你就用循环吧
ADOQuery1.Open;
//从入库临时表中查找所有数据
ADOQuery1.DisableControls;//加上这句话
try
ADOQuery1.First;
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('update Kucun set Kcsl=Kcsl+:Rksl where ChID=:ChID');
while not ADOQuery1.Eof do
begin
  ADOQuery2.Parameters.ParamByName('Rksl').Value:=ADOQuery1.fieldbyname('Rksl').AsFloat;
ADOQuery2.Parameters.ParamByName('ChID').Value:=ADOQuery1.fieldbyname('ChID').AsString;
ADOQuery2.ExecSQL

  ADOQuery1.Next;
end;
finally
ADOQuery1.EnableControls;
end;

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表