【问题标题】:Params sql false参数 sql 错误
【发布时间】:2017-05-18 10:32:20
【问题描述】:

我试过这个代码

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(:pSource) Values ("kkkkk")');
FDQuery4.Params.ParamByName('pSource').Value := source;
FDQuery4.execSQL;

但它向我显示了这个异常。

例外“第一次机会”à $75B2845D。类 d'exception EMySQLNativeException avec un message '[FireDAC][Phys][MySQL] 你有 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在 ''prénom' 附近使用正确的语法) 第 1 行的值 ("kkkkk")'。

我不明白为什么 prénom 被读成这样 ''prénom')

【问题讨论】:

  • 您不能将参数用于列名,它们仅用于值。通过附加 `prénom` 手动构造字符串
  • @Alex ,FireDAC 包含对“参数化”列名的宏支持。

标签: mysql delphi-7 rad


【解决方案1】:

您不能对字段名称使用参数。 像这样在执行之前构造查询

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(' + source + ') Values ("kkkkk")');
FDQuery4.execSQL;

更好的是为你的价值使用参数

source := 'prénom';
FDQuery4.SQL.Add ('INSERT INTO  name(' + source + ') Values (:pValue)');
FDQuery4.Params.ParamByName('pValue').Value := 'kkkk';
FDQuery4.execSQL;

按照 Victoria 的建议,您在使用 FireDAC 时也可以这样做:
这确实解决了您的第一个问题。

FDQuery4.SQL.Add('INSERT INTO name (&TheColumn) VALUES ("TheValue")');     
FDQuery4.MacroByName('TheColumn').AsIdentifier := 'prénom';

【讨论】:

  • 更好地为参数化列名 (FireDAC) 创建宏。在代码中,它们的使用方式与参数类似。你可以写FDQuery4.SQL.Add('INSERT INTO name (&TheColumn) VALUES ("TheValue")'); FDQuery4.MacroByName('TheColumn').AsIdentifier := 'prénom';
  • @Victoria 已将其添加到我的答案中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-26
相关资源
最近更新 更多