4

我在 Delphi 7 和 Oracle 中使用 ADOQuery。将参数传递给 ADOQuery 时出现错误。我使用了以下行。请帮助我识别错误。

ADOQuery.Sql.text:= 'select * from temp_table '+
        'where column1 in (select column from table2 where id=:id) and id=:id';
ADOQuery.Parameters.ParamByValue('id').value= 'abc';
ADOQuery.open;

当我打开查询时,我会收到以下错误:

参数对象定义不正确。提供的信息不一致或不完整。

4

4 回答 4

4

我们有同样的问题,我们像这样结束了“屏蔽”类 TParameters :

宣言:

TMyParameter = class(TParameter)
private
  function GetAsValue: variant;
  Procedure SetAsValue(const Value: variant);
public
  property Value: variant read GetAsValue write SetAsValue;
end;

执行:

procedure TMyParameter.SetAsValue(const Value: variant);
var
  iPar: Integer;

begin
  for iPar:= 0 to Collection.Count - 1 do
    if (Name = TParameter(Collection.Items[iPar]).Name) then
      TParameter(Collection.Items[iPar]).Value:= Value;
end;

function TMyParameter.GetAsValue: variant;
begin
  Result:= inherited Value;
end;

以及如何使用:

TMyParameter(ADOQuery.Parameters.ParamByName('id')).AsValue:= 'abc';

我希望它有所帮助。

于 2011-10-13T13:28:26.340 回答
1
for i:=0 to ADOQuery.Parameters.Count-1 do
begin
  if ADOQuery.Parameters.Items[i].Name = 'id' then
    ADOQuery.Parameters.Items[i].Value := 'abc';
end;
于 2011-10-13T13:35:50.407 回答
0

你需要区分这两个 id;s:

ADOQuery.Sql.text:= 'select * from temp_table a where column1 in (select column from table2 b where b.id=:id) and a.id=:id'; 
ADOQuery.Parameters.ParamByValue('id').value= 'abc'; 
ADOQuery.open;
于 2011-10-13T13:12:37.850 回答
0

在 SQL 代码中声明必要类型的变量,为该变量分配参数;您将能够根据需要多次使用该变量:

ADOQuery.Sql.text:= 'declare @param varchar(50); set @param = :id; '+
'select * from temp_table '+
'where column1 in (select column from table2 where id=@param) and id=@param';

ADOQuery.Parameters.ParamByValue('id').value= 'abc';
ADOQuery.open;

问候

于 2021-11-19T00:55:14.193 回答