如何将参数传递给ADOQuery对象?

时间:2011-10-13 12:46:19

标签: delphi tadoquery

我在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;

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

  

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

3 个答案:

答案 0 :(得分: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';

我希望它有所帮助。

答案 1 :(得分: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;

答案 2 :(得分: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;