Delphi ADO.Command 命名参数

Delphi ADO.Command named parameters

我在 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 Driver][Firebird]Dynamic SQL Error SQL error code = -206 Column unknown ID At line 1, column 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

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