1,217
社区成员
发帖
与我相关
我的任务
分享

。
还有你的 RecExist 函数,只是为了判断数据是否存在?
如果给个大点的数据表查询给你,估计你单是为了判断是否有数据在时间上都耗死你。
因为ADO的这个RecordCount属性是轮训查询记录来统计数量的,有个几十万条含文本的数据都轮到你CPU发烫。
所以如果想得到查询的数据条数,通常的做法是直接用 SQL 语句用相同的条件先查询数据条数,再进行具体数据的查询。
SQL语句中有个叫聚合函数的理念,比如 Count 这个函数,就可以统计查询数据的数量。
而使用聚合函数得到这个数量的速度,远比你用ADO对象的RecordCount 属性得到数量的速度快出 n 倍,如:
' conn 为全局的数据连接对象
Dim str_sql As String, _
i As Long, _
rs As Recordset, _
rs_count As Long
Set rs = New Recordset
' 这里是根据条件统计数据数量
str_sql = "select count(id) as c from 表1 where ff link '%ABC%'"
rs.open str_sql,conn,3,1
rs_count = rs!c
rs.close
if rs_count>0 then
' 这里是用相同的条件同时排序查询具体的数据
str_sql = "select * from 表1 where ff link '%ABC%' order by id"
rs.open str_sql,conn,3,1
for i=1 to rs_count
debug.print rs!id
if i<rs_count then rs.movenext
next i
rs.close
end if
Set rs = Nothing
这样的操作特别是对于数据量大的时候速度差别最为明显。
所以我之前才说你的数据库操作习惯很不正确。


