【问题标题】:Why is this FireDAC SQL Server query with parameters failing?为什么这个带有参数的 FireDAC SQL Server 查询失败?
【发布时间】:2016-03-04 18:43:19
【问题描述】:

这是我第一次使用参数进行查询。 (在 SQL Server 中使用 Delphi Seattle 和 FireDAC)

(我打算在我完成这项工作后使用 DML。)

为什么会出现这个错误:

[FireDAC][Phys][ODBC][Microsoft][SQL Server Native Client 11.0]
[SQL Server]':' 附近的语法不正确。

使用此查询:

procedure TForm2.Button1Click(Sender: TObject);
var
  FDParam: TFDParam;
begin
  FDQuery1.SQL.Text := 'CREATE TABLE TestTable (Column1 Int)';
  FDQuery1.ExecSQL;

  FDQuery1.SQL.Text := 'INSERT INTO TestTable (Column1) VALUES (111)';
  FDQuery1.ExecSQL;  // works fine

  FDParam := FDQuery1.Params.Add;
  FDParam.Name := 'Column1';
  FDParam.DataType := ftInteger;
  FDParam.Paramtype := ptInput;

  FDQuery1.SQL.Text := 'INSERT INTO TestTable (Column1) VALUES(:Column1)' ;
  FDQuery1.ParamByName('Column1').AsInteger := 222;
  FDQuery1.ExecSQL;  // FAILS 
end;

【问题讨论】:

  • 注释创建参数的代码并再次运行。错误会消失吗?大多数 DB 驱动程序会自动解析 SQL 并创建参数,使用 AsXXXX 将处理 ParamType。我从来不用使用 Delphi 在任何 DB 组件的代码中创建参数。
  • 我已经在我的笔记本电脑上使用非常旧的 SQL server 7 SQL server 2000 运行了上述代码,并且都运行完美。

标签: delphi firedac


【解决方案1】:

Ken 和 Johan:感谢你们的 cmets。

这里有人将连接的 ResourceOptions.ParamCreate 和 ParamExpand 设置为 false。

在 FDQuery 中覆盖它消除了问题。

再次感谢您。

【讨论】:

  • 那么,请接受这个作为答案,以帮助未来的搜索者。
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多