MySQL ZeosLib Delphi XE3

4

我想知道如何将查询结果保存在内存中以在DBgrid中显示。

我的当前应用程序使用:

TZConnection > TZquery > DataSource > DBgrid

它工作正常,但问题在于,调用ZConnection.disconnect后,dbgrid会被清除。

我希望在查询完成后立即断开TZConnection的连接,因为大多数MySQL数据库同时连接的用户数量是有限制的。


我会将整个数据复制到TClientDataSet或TkbmMemTable(?)中,但由于您终止了连接,为什么不在TListView或TVirtualStringTree中显示数据呢? - user497849
你能提供一些将整个数据复制到ClientDataSet的示例吗?我尝试过,但没有成功。 - Rebelss
@Rebless 这是一个两阶段操作(如果您在设计时设置了客户端数据集,则为1),两个阶段分别是:1)对于查询中的每个“字段”,在“客户端数据集”中创建一个字段,2)对于查询中的每个记录,将内容复制到“客户端数据集”,非常简单和直接,这将是一个非常好的练习,祝你玩得愉快! - user497849
1个回答

4

使用TDataSetProvider将查询数据传输到ClientDataSet中。那个组件会为你完成所有操作。

在你的DataModule上放置以下组件,并相应地将它们链接起来:

TZQuery <- TDataSetProvider <- TClientDataSet <- TDataSource

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

之后,只需调用TClientDataSet.Open方法,数据就会自动传输到TClientDataSet中。使用TClientDataSet.ApplyUpdates,可以将数据推回数据库中。
我在firebird(TIBQuery)中使用这种技术。
以下是有关ClientDataSets的一些信息:
每个数据库应用程序中都有一个ClientDataSet
深入Delphi:ClientDataSet书籍
使用ClientDataSet和InterBase Express构建应用程序

谢谢你的帮助,但是对我来说这并不起作用。TZQuery > TDataSetProvider - 好的,我可以将TDataSetProvider属性“DataSet”设置为TZQuery,但现在TDataSetProvider和TClientDataSet之间没有链接了。你能为我写一个小例子吗? - Rebelss
您可以在设计时在 ObjectInspector 中将它们连接起来。 - markus_ja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接