如何修复此SQL更新语句,因为它在delphi中返回语法错误?

时间:2017-09-30 19:29:37

标签: sql delphi sql-update delphi-10.2-tokyo

每当我尝试运行此代码时,它都会返回一个语法错误,我已经遵循了这里发布的几种格式,但我所做的一切似乎都没有用。我该如何解决这个问题?

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;

所有变量都是字符串并且已成功捕获。这是我的第一个问题,所以如果我有任何格式错误,我会提前道歉。如果我需要发布更多代码,请告诉我。表名不是变量

1 个答案:

答案 0 :(得分:6)

您不能将参数用于字段名称。如果你真的必须这样做,你需要写一个大的switch语句。或者将查询构建为字符串:

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;

考虑可能的SQL注入!