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 时参数的正确占位符。
我在 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 时参数的正确占位符。