增加记录集中查询的执行时间(CursorLocation)

时间:2012-11-22 07:30:46

标签: vb6 recordset

我使用下面的代码从表中检索数据。 之后我将结果数据绑定到网格。 问题在于速度。这个查询需要花费大约2到3分钟才能从后端执行,需要30到40秒。

-----------当前代码------------------

rs.ActiveConnection = con //con is connection
con.Errors.Clear
rs.CursorLocation = adUseServer
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.StayInSync = True
On Error Resume Next
rs.Open strCmd //strCmd is query

-------替代解决方案我尝试使用客户端---------------

rs.ActiveConnection = con //con is connection
con.Errors.Clear
rs.CursorLocation = adUseClient
rs.CursorType = adOpenKeyset
rs.LockType = adLockBatchOptimistic
rs.StayInSync = True
On Error Resume Next
rs.Open strCmd //strCmd is query

///结果:速度相同

--------使用Execute而不是Open recodset的备用解决方案---------------

com.ActiveConnection = con //con is connection
com.CommandType = adCmdText
com.CommandTimeout = 500
com.CommandText = strCmd //strCmd is query
con.Errors.Clear
On Error Resume Next
Set rs= com.Execute()

//结果:速度很快但是当我尝试更新网格中的值时,它显示出以下错误:

  

“运行时错误'3251':当前Recordset不支持   更新。这可能是提供者或所选提供者的限制   锁定类型“。


1 个答案:

答案 0 :(得分:0)

我认为这可能是您的表设置/查询,而不是导致问题的连接。

确保WHERE,JOIN和&中列出的每个字段ORDER BY子句被编入索引。

重新评估您正在创建的所有派生字段。前几天我看到一个查询,它组合了两个文本字段,然后在新的-unindexed-字段上排序。

如果您发布查询和表格结构,它会给我一个更好的主意。