2017-09-30 11 views
0

Chaque fois que j'essaie d'exécuter ce code, il renvoie une erreur de syntaxe, j'ai suivi quelques formats de ce qui a été posté ici, mais rien de ce que je fais ne semble fonctionner. Comment puis-je réparer cela?Comment corriger cette instruction de mise à jour SQL car elle renvoie une erreur de syntaxe dans Delphi?

with adoQuerysupplier do             
begin 
sql.Clear; 
sql.Add('UPDATE SupplierList'); 
SQL.Add('SET :Column = :newdetail'); 
SQL.Add('WHERE :Column1 = :OldDetail'); 
Parameters.ParseSQL(adoQuerysupplier.SQL.Text, True); 
Parameters.ParamByName('Column').Value:= column; 
Parameters.ParamByName('Column1').Value:= column; 
Parameters.ParamByName('newdetail').Value:= newdetail; 
Parameters.ParamByName('OldDetail').Value:= olddetail; 
ExecSQL; 

Toutes les variables sont des chaînes et sont capturées avec succès. C'est ma première question donc je m'excuse d'avance si j'ai des erreurs de format. S'il vous plaît laissez-moi savoir si je dois poster plus de code. Le nom de la table n'est pas une variable

+2

"erreur de syntaxe"? Est-ce tout ce qu'il a dit? – Blorgbeard

+0

Si vous utilisez FireDAC, vous pouvez utiliser des macros (elles peuvent remplacer les marqueurs par des valeurs). Mais cela ne semble pas être pour vous. – Victoria

+0

L'erreur que j'ai reçue était 'Erreur de syntaxe dans l'instruction UPDATE'. Oui, je ne peux pas utiliser FireDac même si je le voulais, c'est pour un projet. Mais merci beaucoup pour cette suggestion. – crackedlogic

Répondre

6

Vous ne pouvez pas utiliser de paramètres pour les noms de champs. Si vous avez vraiment besoin de faire cela, vous devez écrire une grosse déclaration de commutateur. alternativement construire la requête comme une chaîne:

sql.Add('UPDATE SupplierList'); 
SQL.Add('SET [' + column2 + '] = :newdetail'); 
SQL.Add('WHERE [' + column1 + '] = :OldDetail'); 
Parameters.ParseSQL(adoQuerysupplier.SQL.Text, True); 
Parameters.ParamByName('newdetail').Value:= newdetail; 
Parameters.ParamByName('OldDetail').Value:= olddetail; 

Envisager une injection SQL possible!