我需要迭代多个MySQL查询并将它们保存在TMemDataset
数组中。下面是实现代码:
MemDataset1.CopyFromDataset(ZQuery1,True);
然而,每次查询变化时,所有以前的
TMemDataset
都会改变以包含新值(我猜是因为它们是“数据感知组件”)。如果我通过ZQuery1.Free
摆脱ZQuery1
,那么所有数据都会消失。我该如何避免这种情况发生?我正在使用FreePascal,但我相信Delphi的解决方案也适用。
我需要迭代多个MySQL查询并将它们保存在TMemDataset
数组中。下面是实现代码:
MemDataset1.CopyFromDataset(ZQuery1,True);
TMemDataset
都会改变以包含新值(我猜是因为它们是“数据感知组件”)。如果我通过ZQuery1.Free
摆脱ZQuery1
,那么所有数据都会消失。我该如何避免这种情况发生?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;
这样应该可以工作,因为现在查询和内存数据集之间不再混淆。