【问题标题】:How do I fix this SQL update statement as it returns a syntax error in delphi? [duplicate]如何修复此 SQL 更新语句,因为它在 delphi 中返回语法错误? [复制]
【发布时间】:2017-10-02 23:46:42
【问题描述】:

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

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;

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

【问题讨论】:

  • “语法错误”?就是这么说的吗?
  • 如果您使用 FireDAC,您可以使用宏(它们可以用值替换标记)。但这似乎不适合你。
  • 我收到的错误是“UPDATE 语句中的语法错误”。是的,即使我想,我也不能使用 FireDac,这是一个项目。不过非常感谢你的建议。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多