我有一个多年前开发的 Delphi 4 程序,它使用Opus 直接访问 http://sourceforge.net/projects/directaccess/按顺序搜索 Microsoft Access 数据库并检索所需的记录。 Delphi 4 没有 ADO,所以这就是我使用 DirectAccess 的原因。
但我现在已升级到 Delphi 2009 并将程序转换为使用 ADO。我发现,通过表(大约 100,000 条记录)的循环开始时与在 DirectAccess 中一样快,但随后它开始减慢,并且随着它通过表的速度变得越来越慢。基本循环是:
ArticlesTable.First;
while not Cancel and not ArticlesTable.Eof do begin
( See if the current record has criteria desired )
( If so, process the record )
ArticlesTable.Next;
end;
所以基本上,它只是使用 .Next 方法按顺序处理记录。
那么为什么它会变慢,我该如何重新编码才能使它不会变慢呢?
如果您没有在数据集上使用数据库感知控件,则应该对所有 ADO 数据集调用 DisableControls。
不然速度就烂了。
参考本文 http://edn.embarcadero.com/article/27790了解详情。
或者,使用内部 ado 记录集属性
while Not ADOQuery1.Recordset.EOF do
begin
ADOQuery1.Recordset.Movenext;
end;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)