3

いくつかのMySQLクエリを繰り返し処理し、それらをの配列に保存する必要がありますTMemDataset。これはそれを行うようです:

MemDataset1.CopyFromDataset(ZQuery1,True); 

ただし、クエリが変更されるたびに、以前TMemDatasetのすべての値が変更され、新しい値が含まれるようになります(これらは「データ対応コンポーネント」であるためだと思います)。を削除するZQuery1ZQuery1.Free、すべてのデータが消えます。これを回避するにはどうすればよいですか?

私はFreePascalを使用していますが、Delphiのソリューションも適用されると思います。

4

1 に答える 1

1

解決策は、の配列との配列を持つことZQueryですMemDataSet

type
  TZQueries = array of TZQuery;
  TMemDataSets = array of TMemDataset;

procedure Test;
var
  ZQueries: TZQueries;
  MemDatasets: TMemDatasets;
  i: integer;
begin
  try
    SetLength(ZQueries,10);
    SetLength(MemDatasets,10);
    for i:= Low(ZQueries) to high(ZQueries) do begin
      ZQueries[i]:= TZQuery.Create;
      ZQueries[i].Connection:= ZConnection1;
      ZQueries[i].SQL.Text:= QueryTextFromSomewhere
    end; {for i} 
    for i:= Low(MemDatasets) to High(MemDatasets) do begin
      MemDatasets[i]:= TMemDataset.Create;
      ZQueries[i].Open;
      MemDatasets[i].CopyFromDataset(ZQueries[i],True);
    end; {for i}
    ....
      code to process the memdatasets
    ....
  finally
    for i = Low(ZQueries) to High(ZQueries) do begin
      ZQueries[i].Free;
    end; {for i}
    for i = Low(MemDatasets) to High(MemDatasets) do begin
      MemDatasets[i].Free;
    end; {for i}
  end; {tryf}
end;

クエリとmemdatasetの間に混乱がなくなるため、このような機能が機能するはずです。

于 2012-05-20T15:13:15.500 に答える