我想知道如何将查询保存在内存中以显示在 DBgrid 中,
我当前的应用程序正在使用:
TZConnection > TZquery > 数据源 > DBgrid
工作正常,但这里的问题是,在调用 ZConnection.disconnect 之后,dbgrid 被清理
我想在完成查询后立即断开 TZConnection,因为大多数 MySQL 数据库同时连接的用户数量有限。
最佳答案
使用 TDataSetProvider 将您的查询数据传输到 ClientDataSet。该组件会为您做所有事情。
将以下组件放在您的 DataModule 上,并相应地链接它们:
TZQuery <- TDataSetProvider <- TClientDataSet <- TDataSource
TDataSource.DataSet := TClientDataSet;
TCLientDataSet.ProviderName := TDataSetProvider;
TDataSetProvider.DataSet := TZQuery;
之后,只需调用TClientDataSet.Open 方法,数据就会自动传输到TClientDataSet 中。使用 TClientDataSet.ApplyUpdates,您可以将数据推回到您的数据库中。
我将该技术用于 firebird (TIBQuery)。
这里有一些关于ClientDataSets的信息:
A ClientDataSet in Every Database Application
Delphi In Depth: ClientDataSet book
Building Applications With ClientDataSet and InterBase Express
关于Mysql ZeosLib Delphi XE3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946584/