2011-11-20 41 views
3

我需要迭代大量的MySQL查詢並將它們保存在TMemDataset的數組中。這似乎做到這一點:TDataset和TMemDataset

MemDataset1.CopyFromDataset(ZQuery1,True); 

但是每次查詢的變化,以前的所有TMemDataset的更改爲包含新的值(我猜是因爲他們是‘數據的組件’)。如果我用ZQuery1.Free擺脫ZQuery1,那麼所有的數據都會消失。我如何避免這種情況?

我正在使用FreePascal,但我敢打賭Delphi的解決方案也適用。

+2

'以前的所有TMem包含新的vaues':在數組中使用1個TMemDataset實例的機會是多少?你可以顯示一些代碼填充數組並創建TMemDatasets? –

+0

對於我來說,看起來你已經克隆了TClientDataSet,而不是複製。排除你的代碼的這一行,我不知道你在做什麼。此外,您正在錯誤地使用技術術語。請重新提出您的問題並提供更多的代碼和詳細信息,使您的問題更具建設性。 –

+0

首先提及FPC版本。你測試2.6.0rc1嗎?第二個參數是「複製」,如果我查看代碼,數據真的被複制。所以問題是爲什麼它不適合你(以及爲什麼你使用FPC SQLDB類和Zeos查詢?) –

回答

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之間沒有更多的混亂。

相關問題