加速数据库访问速度。

liangsiyuan 2002-01-15 09:29:08
当我们要读取一个数据库时往往会这么做:
Do while not records.eof
combo1.additem records![Full Name]
records.movenext
loop
每次数据库移动到下一个记录的时候,它必须检测是否达到文件底部,这样使数据访问速度大打折扣。
用什么样的方式做能够使访问速度提高很多?
...全文
151 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
redata 2002-01-16
  • 打赏
  • 举报
回复
楼上的说的游标方式也很重要。up
ferrytang 2002-01-16
  • 打赏
  • 举报
回复
在不确定的情况下很难确定最好的优化方式。
首先它要取决于你的游标位置,
如果是客户端游标
那么请注意你的 recordset.cachesize,最好让他比你的要去的记录数目大一点
那么,你会发现你读取recordset的时候没有数据与服务器交互,
这个时候,recordset是可靠的,除非你用的是只向前的锁定类型。
那么,这个时候取recordset.recordcount比较快。
如果是服务器端游标,还是用.eof,bof比较好!
。。个人观点
lihonggen0 2002-01-16
  • 打赏
  • 举报
回复
我建议先读到数组中
再用循环处理 additem
liangsiyuan 2002-01-16
  • 打赏
  • 举报
回复
感谢大家的支持!!

其实这个问题有很多的办法,在c中,我们都知道算法如果好的话,那么时间复杂度和空间复杂度就会很低.
但是在数据库访问的时候是不是也能够利用上呢?
请大家集思广意.如果嫌弃很少的话,请直说.
我想大家可以通过这个问题学习到很多的知识的.

再次感谢大家能够提出新颖的建议.
junglerover 2002-01-16
  • 打赏
  • 举报
回复
我倒认为,RECORDCOUNT就没有可靠的时候。

如果你非要不判断EOF,那么可以用一个死循环,然后用错误捕获跳出,
还要简单得多。如下:

On Error goto Err_Process
While 1
...填入数据
RecordSet.MoveNext
Wend
Err_Process:
.....
redata 2002-01-16
  • 打赏
  • 举报
回复
使用recordset的getrows方法,将记录集赋值到数组中,然后得到数组的长度,循环显示或者处理,省去调用movenext以提高效率。
matboy 2002-01-16
  • 打赏
  • 举报
回复
sorry,打错了一个字母
if not(recordset.bof and recordset.eof) then
recordset.movelast
recordset.movefirst

for I=1 TO recordset.recordcount
........
recordset.movenext
next I
end if
recordset.close
set recordset=nothing

zbhui 2002-01-16
  • 打赏
  • 举报
回复
eaglezhao(笨小子)和crazymens(疯子)老兄加在一起就可以解决问题。 
luckyhqh 2002-01-16
  • 打赏
  • 举报
回复
有时候并不能得到 Recordcount .例如Cursorlocation 为aduserserver时
dbcontrols 2002-01-16
  • 打赏
  • 举报
回复
把Combo绑定到DAO控件快.
fishzone 2002-01-15
  • 打赏
  • 举报
回复
to: crazymens(疯子) 
>楼上的方法有一点问题,在那样子使用之前最好使用如下语句
>records.movelast
>records.movefirst
>这样可以得到较为准确的recordcount,不然有得时候得到的count为-1

这个跟你的游标位置,游标类型有关,好好看看ado吧
skydg 2002-01-15
  • 打赏
  • 举报
回复
gz
gz
gz
matboy 2002-01-15
  • 打赏
  • 举报
回复
if not(recordset.bof and recordset.bof) then
recordset.movelast
recordset.movefirst

for I=1 TO recordset.recordcount
........
recordset.movenext
next I
end if
recordset.close
set recordset=nothing

crazymens 2002-01-15
  • 打赏
  • 举报
回复
楼上的方法有一点问题,在那样子使用之前最好使用如下语句
records.movelast
records.movefirst
这样可以得到较为准确的recordcount,不然有得时候得到的count为-1
eaglezhao 2002-01-15
  • 打赏
  • 举报
回复
使用for i=0 to records.recordcount-1循环要比do while not .eof快至少好几倍。

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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