1

我有一个 ADOQuery 连接到一个 DataSetProvider 连接到一个 ClientDataSet 连接到一个 DataSource 连接到一个 DBGrid。在某些情况下,查询返回的记录太多,我在 MidasLib 中收到 Out Of Memory 错误。

我读过我可以使用 DataReader,以避免将所有记录加载到内存中,但我不知道如何使用 DataReader 并且仍然让 DBGrid 正常工作。我也找不到有关如何在 Delphi 中使用 DataReader 的信息。

我想知道是否可以断开 ADOQuery 与 DataSetProvider(以及链的其余部分)的连接,运行查询,获取 RecordCount,然后仅在 RecordCount 看起来合理时才重新连接链。

我不知道如何禁用 DataSetProvider,当我尝试禁用 ClientDataSet 时,我还是会收到内存错误。

4

1 回答 1

0

我最终将 ADOQuery.DataSetProvider 设置为 NIL 并将所有记录直接从 ADOQuery 卸载到本地内存驻留数据库表中。花了一段时间,但没有内存错误。导致 Out of Memory 错误的相同数据在转换为 StringList 时只有 4 MB。

于 2013-05-17T11:42:04.383 回答