2012-12-19 40 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