TCLIENTDATASET或TDATASETPROVIDER(DBEXPRESS)所需的分配,memcpy或其他方法



我正在用embarcadero C 构建器XE环境中的dbexpress组件进行使用。我有一个相对较大的桌子,其中有20k至100k的记录,我在DBGrid中显示。我正在使用连接到SQLQUERY和CLIELTDATASET的DataSetProvider,该数据已连接到DataSetProvider。

我还需要分析数据,因此我需要在整个表中运行。对于较小的桌子,我一直使用代码,这基本上是这样的:

    Form1->ClientDataSet1->First();
    while(!Form1->ClientDataSet1->Eof){
        temp=Form1->ClientDataSet1->FieldByName("FailReason")->AsLargeInt;
       //do something with temp
       Form1->ClientDataSet1->Next();
       }

当然可以奏效,但是当我需要贯穿整个DBGRID时,它非常慢。对于大约50000个记录,最多可能需要几分钟。我的怀疑是,由于实际数据集增加了其地址,因此DBGRID需要重新粉刷性能,因此性能最多。因此,我正在寻找一种方法,该方法使我可以在不操纵实际客户端数据的情况下读取数据。也许是将列的数据复制到变量的方法,或者是通过数据集运行的另一种方法,这更有效。我敢肯定,如果我将在变量中有一个副本,则操作将不到几秒钟...我现在谷歌搜索了几个小时,但到目前为止还没有发现任何有用的东西。

最好的问候,Bodo

如果您的CD连接到某些DB感知控制(-s((通过tdatasource(,则首先考虑使用DisableControls((

使用DisableControls((

另一个选择是避免在循环中使用fieldbyname

最新更新