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

2 つの ID を区別する必要があります。

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 に答える