3

我需要遍历多个 MySQL 查询并将它们保存在TMemDataset's 数组中。这似乎做到了:

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;

类似的东西应该可以工作,因为现在查询和 memdatasets 之间不再有混淆。

于 2012-05-20T15:13:15.500 回答