Delphi ADO.Command 命名参数

问题描述 投票:0回答:2

我在 Delphi 上尝试简单的代码:

  Connection := CreateOleObject('ADODB.Connection');
  Connection.ConnectionString := 'dsn=rollcontrol_im';
  Connection.Open;

  Command := CreateOleObject('ADODB.Command');
  Command.CommandText := 'SELECT * FROM log where log.id = :id';
  Command.ActiveConnection := Connection;
  Command.Parameters.Append( Command.CreateParameter('id', adInteger, adParamInput, 4 {size}, 5 {value}) );

  RecordSet := Command.Execute();

我得到了一个错误:

[ODBC Firebird 驱动程序][Firebird]动态 SQL 错误 SQL 错误代码 = -206 列未知 ID 位于第 1 行第 35 列。

如果我将参数名称更改为?它工作正常:

  Connection := CreateOleObject('ADODB.Connection');
  Connection.ConnectionString := 'dsn=rollcontrol_im';
  Connection.Open;

  Command := CreateOleObject('ADODB.Command');
  Command.CommandText := 'SELECT * FROM log where log.id = ?';
  Command.ActiveConnection := Connection;
  Command.Parameters.Append( Command.CreateParameter('?', adInteger, adParamInput, 4 {size}, 5 {value}) );

  RecordSet := Command.Execute();

如何将命名参数与 OLE ADO.Commanad 一起使用?怎么了?

Tnx

delphi ado
2个回答
3
投票

:ParamName
是 Delphi 在其 SQL 包装器组件中用于命名参数的占位符,如
TADOQuery
。它不是 ADO 的本机语法,
?
是直接使用 ADO 的 OLE API 时参数的正确占位符。


0
投票

虽然这个问题已经得到解答,但正确的参数引用应该是 ':id' 而不是 'id' - 冒号也应该被替换!

© www.soinside.com 2019 - 2024. All rights reserved.