4

まず、私はこれらに不慣れで、質問はばかげている可能性があります。とにかく、私はこのような手順を持っています:

procedure Tform1.QueryChange(sqltext : String; query : Integer);
begin
if query = 1 then begin
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(sqltext);
ADOQuery1.Open;
end;
if query = 2 then begin
ADOQuery2.Close;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add(sqltext);
ADOQuery2.Open;
end;

if ブロックを削除して、1 つの統一されたコードを作成したいと思います。

ADOQuery+query.Close; (know that looks very silly)
ADOQuery+query.SQL.Clear;
ADOQuery+query.SQL.Add(sqltext);
ADOQuery+query.Open;

私の目標は、query=1 コードが ADO​​Query1.Close; を使用するときです。query=2 の場合、コードは ADOQuery2.Close を使用します。

4

3 に答える 3

8

TADOQuery操作したいオブジェクトを参照するローカル変数を作成できます。このような:

var
  ADOQuery: TADOQuery;
begin
  if query=1 then
    ADOQuery := ADOQuery1
  else if query=2 then
    ADOQuery := ADOQuery2;
  ADOQuery.Close;
  ADOQuery.SQL.Clear;
  ADOQuery.SQL.Add(sqltext);
  ADOQuery.Open;      
end;
于 2013-05-23T09:30:02.127 に答える
6

タイプ の変数ADOQuery1、などを作成する代わりにADOQuery2、配列を作成します。ADOQuery3TADOQuery

ADOQueries: array of TADOQuery;

次に、要素の数がわかっているときに、要素の数を設定します。

SetLength(ADOQueries, NumberOfQueries);

または、要素の数が最初からわかっている場合は、ADOQueries代わりに静的配列を定義できます。

ADOQueries: array[0..7] of TADOQuery;

今、あなたはすることができます

procedure TForm1.QueryChange(sqltext: String; query: Integer);
begin
  ADOQueries[Query].Close;
  ADOQueries[Query].SQL.Clear;
  ADOQueries[Query].SQL.Add(sqltext);
  ADOQueries[Query].Open;
end;
于 2013-05-23T09:29:59.673 に答える