我需要更新字段值,增加旧值。类似于
UPDATE MYTABLE SET FIELD1=FIELD1+VALUE WHERE ....
但是当运行下一个代码时我有这个错误
参数对象不正确 定义。不一致或不完整 信息已提供
这是我的代码
AdoQuery:=TADOQuery.Create(nil);
try
AdoQuery.Connection:=FAdoConnection;
AdoQuery.Active:=False;
AdoQuery.Parameters.CreateParameter('RECON',ftFloat,pdInput,SizeOf(Double),d1);
AdoQuery.Parameters.CreateParameter('NUM',ftInteger,pdInput,SizeOf(Integer),Trans);
AdoQuery.Parameters.CreateParameter('LIN' ,ftInteger,pdInput,SizeOf(Integer),Lin);
AdoQuery.SQL.Clear;
AdoQuery.SQL.Add('UPDATE DIPTT SET VALRECON=:RECON+VALRECON WHERE NUM=:NUM AND LIN=:LIN');
AdoQuery.Prepared:=True;
AdoQuery.ExecSQL;
finally
if AdoQuery.Active then AdoQuery.Close;
AdoQuery.Free;
end;
我尝试了多次组合
1)
AdoQuery.SQL.Add('UPDATE DIPTT SET VALRECON=VALRECON+:RECON WHERE NUM=:NUM AND LIN=:LIN');
2)
AdoQuery.SQL.Add('UPDATE DIPTT SET VALRECON=(VALRECON)+:RECON WHERE NUM=:NUM AND LIN=:LIN');
只有当我尝试这个时它才有效。 (显然这不是一个有效的选项,但请告诉我问题出在哪里)
AdoQuery.SQL.Add('UPDATE DIPTT SET VALRECON=:RECON WHERE NUM=:NUM AND LIN=:LIN');
如何改写这种情绪?
任何线索?
答案 0 :(得分:2)
快速猜测(现在没法用它来玩这个)但是尝试将参数放在括号中;
UPDATE DIPTT SET VALRECON=(:RECON)+(VALRECON) WHERE NUM=:NUM etc
如果不这样做,你的最佳路线可能是为该部分动态构建SQL语句,例如
FSQL:='UPDATE DIPTT SET VALRECON=VALRECON+' + IntToStr(d1) + ' WHERE NUM=:NUM etc'; AdoQuery.SQL.Text:=FSQL;
然后像以前一样设置你的Num参数值(等)