2010-02-12 12 views
1

J'ai besoin de mettre à jour une valeur de champ, en augmentant l'ancienne valeur. quelque chose comme thsAdoQuery Erreur lors de l'utilisation des paramètres

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

mais quand exécuter le code suivant j'ai cette erreur

objet paramètre est mal défini . incomplète ou Incohérence informations ont été fournies

c'est mon code

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; 

i essayé multiples combinaisons

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

Seulement quand j'ai essayé ceci cela fonctionne. (évidemment ce n'est pas une option valide, mais montrez-moi où le problème est)

 AdoQuery.SQL.Add('UPDATE DIPTT SET VALRECON=:RECON WHERE NUM=:NUM AND LIN=:LIN'); 

Comment réécrire cette donnée?

Des indices?

+0

merci pour la faute de frappe correction. – Salvador

Répondre

2

Saisie rapide (rien à la main en ce moment pour jouer avec ça) mais essayez de mettre le paramètre entre parenthèses ainsi;

 
UPDATE DIPTT SET VALRECON=(:RECON)+(VALRECON) WHERE NUM=:NUM etc 

A défaut, votre meilleur itinéraire pourrait être de construire l'instruction SQL dynamique pour cette partie par exemple

 
FSQL:='UPDATE DIPTT SET VALRECON=VALRECON+' + IntToStr(d1) + 
     ' WHERE NUM=:NUM etc'; 
AdoQuery.SQL.Text:=FSQL; 

puis définissez vos valeurs de paramètres Num (etc) comme avant

+0

VALRECON = (: RECON) + (VALRECON) fonctionne parfaitement, merci beaucoup. – Salvador

+0

Super, mon plaisir. Je pense que c'est le bit de Delphi qui détermine quel paramètre (s'il y a lieu) est un paramètre dans l'instruction SQL et doit donc être lié. J'ai dû être créatif une ou deux fois dans le passé avec SQL Links (pour SQL Server) et dbExpress (pour SQL Server), donc je devinais que ce serait probablement un cas où l'analyseur traiterait votre instruction comme un paramètre dans une expression, si vous voyez ce que je veux dire. :-) – robsoft