AdoQuery Грешка при използване на параметри

Трябва да актуализирам стойност на поле, увеличавайки старата стойност. нещо като ths

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