我在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;
当我打开查询时,我会收到以下错误:
参数对象定义不正确。提供的信息不一致或不完整。
答案 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;