Ошибка AdoQuery при использовании параметров

Мне нужно обновить значение поля, увеличив старое значение. что-то вроде тс

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

Как можно переписать это предложение?

Любые подсказки?


person Salvador    schedule 12.02.2010    source источник
comment
спасибо за исправление опечатки.   -  person Salvador    schedule 12.02.2010


Ответы (1)


Быстрая догадка (сейчас ничего под рукой, чтобы играть с этим), но попробуйте поместить параметр в скобки таким образом;

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 (и т. д.), как и раньше

person robsoft    schedule 12.02.2010
comment
VALRECON=(:RECON)+(VALRECON) отлично работает, большое спасибо. - person Salvador; 12.02.2010
comment
Отлично, с удовольствием. Я думаю, что это бит в Delphi, который определяет, что (если вообще есть) является параметром в операторе SQL и поэтому нуждается в привязке. В прошлом мне приходилось проявлять творческий подход один или два раза с обеими ссылками SQL (для SQL Server) и dbExpress (для SQL Server), поэтому я предположил, что это, вероятно, просто случай, когда синтаксический анализатор обрабатывает ваш оператор как параметр внутри выражение, если вы понимаете, что я имею в виду. :-) - person robsoft; 12.02.2010