2

我正在使用下面的代码从表中检索数据。之后,我将结果数据绑定到网格。问题在于速度。执行此查询需要将近 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

/// 结果:相同的速度

--------使用执行而不是打开记录集的替代解决方案---------------

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’:当前记录集不支持更新。这可能是提供程序的限制,或者是所选锁定类型的限制。”


4

1 回答 1

0

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

确保 WHERE、JOIN 和 ORDER BY 子句中列出的每个字段都已编入索引。

重新评估您正在创建的任何派生字段。前几天我看到一个查询,它结合了 2 个文本字段,然后对那个新的 -unindexed- 字段进行排序。

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

于 2012-12-02T20:55:47.117 回答