TADOQuery遍历速度?

hjiaming 2007-01-17 10:56:26
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);
}
...全文
717 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
AdoQuery .CacheSize
ExecuteOptions.eoAsyncFetch=true
LockType:=ltReadOnly
wanglovec 2007-04-09
  • 打赏
  • 举报
回复
LZ加索引了么??
wanglovec 2007-04-09
  • 打赏
  • 举报
回复
我也试了, ADO + ODBC + ACCESS, 30万记录, 扫描一遍要1-2小时, 只是每条记录取两个字段,不涉及显示的,只取出数据保存到缓冲区。
>>ADO+OLEDB比较快  ODBC 就不要用了.
sanyou98 2007-04-09
  • 打赏
  • 举报
回复
换控件吧
数据量大的话用adoquery怎么优化代码都不能让速度有质的飞跃
Jim@luckeeinc.com 2007-04-03
  • 打赏
  • 举报
回复
可以设置多少笔显示的 一般很少一下子显示出几十万笔数据来操作 找一找都要找残废
n27741 2007-04-02
  • 打赏
  • 举报
回复
关注!
最近做报表 也是感觉ADOQuery超级慢啊,郁闷死我了....
panjinfu80 2007-04-01
  • 打赏
  • 举报
回复
这么多循环不慢才怪。
sczyq 2007-04-01
  • 打赏
  • 举报
回复
加进度条

ahjoe 2007-04-01
  • 打赏
  • 举报
回复
我也试了, ADO + ODBC + ACCESS, 30万记录, 扫描一遍要1-2小时, 只是每条记录取两个字段,不涉及显示的,只取出数据保存到缓冲区。
LuoGD 2007-03-30
  • 打赏
  • 举报
回复
设置adoQuery的CursorType为ctStatic,LockTyp为ltReadOnly
wt_sanlian 2007-03-29
  • 打赏
  • 举报
回复
你要把那么多的记录显示在界面上干嘛,让用从几万条记录中选择一条吗?

应当从界面操作上来避免这种问题!
daily66 2007-03-28
  • 打赏
  • 举报
回复
我也想知道这个如何解决
cheese 2007-03-28
  • 打赏
  • 举报
回复
我也碰到了同样的问题,同样的数据操作,BDE在8秒钟完成,而ADO居然用了5分20秒,记录总数是18万条左右。经过测试,的确慢在Next或者MoveBy上。
hjiaming 2007-01-18
  • 打赏
  • 举报
回复
试了,下面这样比原先要快很多,难道是ADOQuery1->Next太慢?

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] = (tagVARIANT)(ADOQuery1->Recordset->Fields->Item[icol]->Value);
}
ADOQuery1->Recordset->MoveNext();
}
daydayup234 2007-01-17
  • 打赏
  • 举报
回复
不知道这种情况,多线程有用不
wood542344 2007-01-17
  • 打赏
  • 举报
回复
楼上的Blog看得我眼晕啊,字体这么大,排版好烂啊,难道是我的浏览器的原因吗?
最新版Maxthon应该不会很老啊/
我不懂电脑 2007-01-17
  • 打赏
  • 举报
回复
http://blog.csdn.net/vvvvvvvvvvvvvvvvvvvv/archive/2004/07/23/49435.aspx
勉励前行 2007-01-17
  • 打赏
  • 举报
回复
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();
}

如果數據量很大,想辦法分段計算。能交給服務器計算就最好了。
hjiaming 2007-01-17
  • 打赏
  • 举报
回复
m_pDataTable[irow][icol]

Variant** m_pDataTable;

现在发现慢主要是因为ADOQuery1->MoveBy(1);或者ADOQuery1->Next();
CACACACACA 2007-01-17
  • 打赏
  • 举报
回复
"m_pDataTable[irow][icol]" 是什么东东-----"虚拟数据集"
不同的东西可以采用不同的技巧.

加载更多回复(1)

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧