使用参数的AdoQuery错误

时间:2010-02-12 12:41:44

标签: delphi ado

我需要更新字段值,增加旧值。类似于

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');

如何改写这种情绪?

任何线索?

1 个答案:

答案 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参数值(等)