当前位置:主页>仓库管理软件> 列表

各位大侠请指导 找免费的家庭记账软件

销售管理软件版1楼: 从一处查询表中,更新另一个表中的数据,方法很笨,因为频繁的打开与关闭数据集,必定会影响执行效率.请指导.

procedure Tclly_Frm.BitBtn4Click(Sender: TObject);
begin
with datamodule1.q1 do
begin
close;
sql.Clear;
sql.Add(''select sum(cksl) ss,wzbm from ckwz where ckid=:ckid group by wzbm'');
parameters.ParamByName(''ckid'').Value:=trim(edit1.Text);
open;
first;//很笨,请更改
while not eof do
begin
with datamodule1.adoq2 do
begin
close;
sql.Clear;
sql.Add(''update kucun set cksl=cksl+:cksl where wzbm=:wzbm '');
parameters.ParamByName(''cksl'').Value:=datamodule1.q1.fieldbyname(''ss'').Value;
parameters.ParamByName(''wzbm'').Value:=datamodule1.q1.fieldbyname(''wzbm'').Value;
execsql;
end;
next;
end;
end;

2楼: ADOQ1的内容不用显示的话
把两个ADOQUERY写成一个 如免费的家庭记账软件

3楼: 最好用存储过程

4楼: 可以

5楼: update kucun set cksl=cksl+(select sum(cksl) ss,from ckwz where ckid=:ckid group by wzbm) where wzbm in (select wzbm from ckwz where ckid=:ckid group by wzbm)

6楼: 建议用存储过程,而且楼主上面的步骤用存储过程更好维护。
尝试一下,你会喜欢上的。

销售管理软件版7楼: To Supermay 我在mssql上运行了这段程序,系统提示

子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
update kucun set rksl=rksl+(select sum(ce) from pdbody where pdid=''20060118002'' group by wzbm) where
wzbm in (select wzbm from pdbody where pdid=''20060118002'' group by wzbm )

8楼: 正确的做法是
update kucun set rksl=rksl- a.ss from kucun b,(select wzbm, sum(ce) ss from pdbody where pdid=''20060118002'' group by wzbm ) a where

a.wzbm=b.wzbm

9楼: 请问如果用存储过程的话怎么写呢,因为初学不懂,请给出例子

10楼: SQL还是Oracle?
用得着循环列新嘛?
直接update [表A] set [表A.字段1]=[表B.字段1] from [表B] where [表A.字段2]=[表B.字段2]

11楼: 多人接受答案了。