我有一个连接到连接到连接到DBGrid的DataSource的ClientDataSet的DataSetProvider的ADOQuery。在某些情况下,查询返回太多记录,并且我在MidasLib中遇到Out Of Memory错误。
我已经读过我可以使用DataReader,以避免将所有记录加载到内存中,但我没有看到如何使用DataReader并且仍然使DBGrid正常工作。我也找不到有关如何在Delphi中使用DataReader的信息。
我想知道我是否可以断开ADOQuery与DataSetProvider(以及链的其余部分),运行查询,获取RecordCount,然后只有在RecordCount合理的情况下才重新连接链。
我无法弄清楚如何禁用DataSetProvider,当我尝试禁用ClientDataSet时,无论如何都会出现内存错误。
答案 0 :(得分:0)
我最终将ADOQuery.DataSetProvider设置为NIL,并将所有记录直接从ADOQuery卸载到本地内存驻留数据库表中。花了一段时间,但没有内存错误。
时,导致Out of Memory错误的相同数据在转换为StringList时只有4 MB。