各位大侠请指导 找免费的家庭记账软件
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楼: 多人接受答案了。