Как передать параметры объекту ADOQuery? - PullRequest
4 голосов
/ 13 октября 2011

Я использую ADOQuery в Delphi 7 и Oracle. Я получаю ошибку при передаче параметров в 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 ]

4 голосов
/ 13 октября 2011

У нас та же проблема, мы закончили "маскирование" класса 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 голос
/ 13 октября 2011
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;
0 голосов
/ 13 октября 2011

Вы должны различать два идентификатора; 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;
...