我在 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
:ParamName
是 Delphi 在其 SQL 包装器组件中用于命名参数的占位符,如 TADOQuery
。它不是 ADO 的本机语法,?
是直接使用 ADO 的 OLE API 时参数的正确占位符。
虽然这个问题已经得到解答,但正确的参数引用应该是 ':id' 而不是 'id' - 冒号也应该被替换!