如何解决这个SQL更新语句,因为它在delphi中返回语法错误?

问题描述:

每当我尝试运行这段代码,它返回一个语法错误,我遵循了什么在这里发表一些格式,但没有我似乎工作。我怎样才能解决这个问题?如何解决这个SQL更新语句,因为它在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; 

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

+2

“语法错误”?这就是它说的吗? – Blorgbeard

+0

如果使用FireDAC,您可以使用宏(它们可以用值替代标志物)。但这似乎不适合你。 – Victoria

+0

我收到的错误是'UPDATE语句中的语法错误'。是的,即使我想,我也不能使用FireDac,这是为了一个项目。但非常感谢你的建议。 – crackedlogic

你不能使用字段名称参数。如果你真的必须这样做,你需要写一个大的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注入!