update的问题(30分)

  • 主题发起人 主题发起人 hcx
  • 开始时间 开始时间
H

hcx

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大侠下面的语句出了什么问题,执行后记录没有改变.
我写的代码如下:
DDprice.DataModule1.Qprice_cust.Close;
DDprice.DataModule1.Qprice_cust.SQL.Clear;
DDprice.DataModule1.Qprice_cust.sql.add('select * from price where pricedate=:pdate and dstid like' +''''+'A%'+''''+' order by custid');
DDprice.DataModule1.Qprice_cust.ParamByName('pdate').asstring:=currentdate;
DDprice.DataModule1.Qprice_cust.open;
DDprice.DataModule1.Qprice_cust.First;
with DDprice.DataModule1 do
begin
while not Qprice_cust.Eof do
begin
Qchkrecd.close;
Qchkrecd.sql.clear;
Qchkrecd.sql.add('select * from price where custid=:cst and goodsid=:gsd and dstid not like '+''''+'A%'+''''+' order by custid,goodsid');

Qchkrecd.parambyname('cst').asstring:=Qprice_cust.fieldbyname('custid').asstring;
Qchkrecd.parambyname('gsd').asstring:=Qprice_cust.fieldbyname('goodsid').asstring;
Qchkrecd.open;

if Qchkrecd.recordcount=0 then // 没有执行的记录;
begin

1 try
2 DDprice.StartTransaction;
3 Qupexist.Close;
4 Qupexist.SQL.Clear;
5 //UPDATE dbo_price a INNER JOIN dbo_cust AS b ON a.custid = b.custid SET a.dstid = b.dstid where a.dstid like 'A*'
6 Qupexist.SQL.add('UPDATE price SET dstid =(select distinct dstid from cust where custid=:cst) where custid=:cst and pricedate=:pdt and goodsid=:gsd and dstid like '+''''+'A%'+'''');
7 Qupexist.ParamByName('cst').asstring:=Qprice_cust.fieldbyname('custid').asstring;
8 Qupexist.ParamByName('pdt').asstring:=currentdate;
9 Qupexist.ParamByName('gsd').asstring:=Qprice_cust.fieldbyname('custid').asstring;
10 Qupexist.ExecSQL;
11 DDprice.Commit;
12 except
13 DDprice.Rollback;
14 // report_error_log();
15 raise;
16 end;
end
else //有执行的记录
Qprice_cust.Next;
end; end;
我原没有1,2,11,12,13,14,15,16句,后来加上效果还是一样.
(为什么第五句在access中能执行.而在delphi中不能执行.)
由于不是同一Query查询出后再改(是改由另一查询后得出的数,然后判断此记录该如何改),我没有用updatesql. 因用updatesql的语句不好写.
 
老大,代码这么长,注释又不多,没耐心看啊
 
实在太长,你看看是不是第6中的子查询返回的是空记录?
 
if you use ADOConnection then 5th Line must be run.
 
你在程序中跟踪一下,在open和execsql之前检查一下sql.text看看条件限制是否正确表述了!
 
用存储过程
可查找update是否执行
 
try的格式是:
DDprice.StartTransaction//开启事务
try
...
DDprice.commit//提交事务
except
...//错误处理
end

你将 DDprice.StartTransaction 放在 try 之后,将可能被SQL Server看作事务嵌套。

 
多人接受答案了。
 
后退
顶部