首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

TADOQuery遍历速度?该如何解决

2012-02-16 
TADOQuery遍历速度?TADOQuery有没有办法提高遍历速度下面的代码,在3000多行记录,8列,就要0.5秒左右,那上万

TADOQuery遍历速度?
TADOQuery有没有办法提高遍历速度
下面的代码,在3000多行记录,8列,就要0.5秒左右,那上万了就更受不了了

int   nRowCount   =   ADOQuery1-> RecordCount;
int   nColCount   =   ADOQuery1-> Fields-> Count;
ADOQuery1-> First();
for(int   irow   =   0;   irow   <   nRowCount;   irow++)
{
for(int   icol   =   0;   icol   <   nColCount;   icol++)
{
m_pDataTable[irow][icol]   =   ADOQuery1-> Fields-> Fields[icol]-> Value;
}
ADOQuery1-> MoveBy(1);
}

[解决办法]
http://blog.csdn.net/vvvvvvvvvvvvvvvvvvvv/archive/2004/07/23/49435.aspx
[解决办法]
m_pDataTable[irow][icol] = ADOQuery1-> Fields-> Fields[icol]-> Value;
如果要將數據放進數組中進行計算。用ADO快不多少的。設置ADOQuery為單向只讀數據集就快些,但改用 DBX 的單向數據集就快很多。

這與服務器無關,討論的是10000條數據全部取回本地後的遍歷速度。
在 2G 256M的PC機上,單向ADO數據集遍歷一次的速度約3秒,而DBX就快多了。

構造函數:

ADOQuery1-> Open();

OnClick事件:

int nRowCount = ADOQuery1-> RecordCount;
int nColCount = ADOQuery1-> Fields-> Count;
ADOQuery1-> First();
for(int irow = 0; irow < nRowCount; irow++)
{
for(int icol = 0; icol < nColCount; icol++)
{
m_pDataTable[irow][icol] = ADOQuery1-> Fields-> Fields[icol]-> Value;
}
ADOQuery1-> Next();
}

如果數據量很大,想辦法分段計算。能交給服務器計算就最好了。

[解决办法]
我也碰到了同样的问题,同样的数据操作,BDE在8秒钟完成,而ADO居然用了5分20秒,记录总数是18万条左右。经过测试,的确慢在Next或者MoveBy上。
[解决办法]
你要把那么多的记录显示在界面上干嘛,让用从几万条记录中选择一条吗?

应当从界面操作上来避免这种问题!
[解决办法]
设置adoQuery的CursorType为ctStatic,LockTyp为ltReadOnly
[解决办法]
我也试了, ADO + ODBC + ACCESS, 30万记录, 扫描一遍要1-2小时, 只是每条记录取两个字段,不涉及显示的,只取出数据保存到缓冲区。
[解决办法]
这么多循环不慢才怪。
[解决办法]
我也试了, ADO + ODBC + ACCESS, 30万记录, 扫描一遍要1-2小时, 只是每条记录取两个字段,不涉及显示的,只取出数据保存到缓冲区。
> > ADO+OLEDB比较快  ODBC 就不要用了.
[解决办法]
AdoQuery .CacheSize
ExecuteOptions.eoAsyncFetch=true
LockType:=ltReadOnly
[解决办法]
换控件吧
数据量大的话用adoquery怎么优化代码都不能让速度有质的飞跃

热点排行