2012-12-19 62 views
4

我想知道我怎麼可以保存查詢在內存中的DBGrid顯示,Mysql的ZeosLib德爾福XE3

我目前的應用程序使用:

TZConnection> TZquery>數據源> DBGRID

工作正常,但這裏的問題是,在通話後ZConnection.disconnect dbgrid被清除

我想在完成查詢後立即斷開TZConnection,因爲大多數MySQL數據庫有同時連接的用戶數量有限。

+0

我整個數據複製到一個TClientDataSet或TkbmMemTable但因爲你殺的連接,爲什麼不顯示數據(?)一個TListView或TVirtualStringTree? – ComputerSaysNo

+0

你可以舉一些例子來將整個數據複製到ClientDataSet,我嘗試但沒有成功。 – Rebelss

+0

@Rebless這是一個兩階段操作(如果在設計時設置客戶端數據集,則爲1),這兩個階段是:1)對於查詢中的每個「字段」,在「客戶端數據集」中創建一個字段,2 )爲查詢中的每個*記錄*,將內容複製到「客戶端數據集」,真的很簡單直接,這將是一個非常好的練習,玩得開心! – ComputerSaysNo

回答

4

使用TDataSetProvider將您的查詢數據傳輸到ClientDataSet中。該組件爲您做了一切。

將下列部件的DataModule中,並相應地將它們鏈接:

TZQuery <- TDataSetProvider <- TClientDataSet <- TDataSource 

TDataSource.DataSet := TClientDataSet; 
TCLientDataSet.ProviderName := TDataSetProvider; 
TDataSetProvider.DataSet := TZQuery; 

之後,只需調用TClientDataSet.Open方法和數據automaticaly轉移到的TClientdataSet。使用TClientDataSet.ApplyUpdates,您可以將數據推送回數據庫。

我使用firebird技術(TIBQuery)。

以下是有關ClientDataSets的一些信息:
A ClientDataSet in Every Database Application
Delphi In Depth: ClientDataSet book
Building Applications With ClientDataSet and InterBase Express

+0

THX對您有所幫助,但是,這並沒有爲我工作, TZQuery>的TDataSetProvider - 好吧,我可以設置的TDataSetProvider財產「數據集」,以TZQuery 但現在還有的TDataSetProvider和TClientDataSet 之間沒有聯繫你能爲我寫了一個小例子? – Rebelss

+0

請參閱上面的修改。您可以在設計時在ObjectInspector中連接它們。 –

+0

thx Max,它適合我 – Rebelss