2010-02-12 1 views
1

Мне нужно обновить значение поля, увеличив старое значение. что-то вроде тысAdoQuery Ошибка с использованием параметров

UPDATE MYTABLE SET FIELD1=FIELD1+VALUE WHERE .... 

но при запуске следующего кода я эта ошибка

объект Parameter неправильно определены. Противоречивые или неполной информация была предоставлена ​​

это мой код

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

Как переписать этот sentece?

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

+0

спасибо за опечатку коррекция. – Salvador

ответ

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 (и т.д.), как и прежде

+0

VALRECON = (: RECON) + (VALRECON) работает отлично, спасибо большое. – Salvador

+0

Отлично, мое удовольствие. Я думаю, что это бит в Delphi, который определяет, что (если что-либо) является параметром в выражении SQL и поэтому требует привязки. Я должен был быть творческим один или два раза в прошлом как с SQL-ссылками (с SQL Server), так и с dbExpress (на SQL Server), поэтому я предположил, что это, вероятно, просто случай, когда парсер обрабатывает ваше утверждение как параметр внутри выражение, если вы понимаете, что я имею в виду. :-) – robsoft

 Смежные вопросы

  • Нет связанных вопросов^_^