关于ADODB.Connection作为全局的效率问题
时间:2011-11-28
来源:互联网
目前遇到一个问题,因为涉及到多次链接数据库,
所以想把cnnConn做成全局的,因为会很多次的查询,所以经过实际测试链接一个全局的连接确实能省时间。
但目前遇到一个问题。
如果我需要从主表取数据,根据取到的数据作为条件再次查询,这样就会遇到查主表的连接没有关闭后涉及到再次查询。
可以看下面的代码GET_FI_FACEAMOUNT函数查询主表信息, 再没有关闭rstRecordset时候会调用函数BOB_FIMTM再次查询。
此时如果使用全局的cnnConn,会非常的慢。因为这个报表程序会有几百次的查询,累计起来非常的可怕。
不知道大家是如何处理这样的问题呢?
还是这样的情况不适合全局的连接。
谢谢大家??
代码如下
Sub GET_FI_FACEAMOUNT(aggr1, aggr2, aggr3, col, rowindex)
Dim rstRecordset As ADODB.Recordset
Dim cmdCommand As ADODB.Command
Set rstRecordset = New ADODB.Recordset
Set cmdCommand = New ADODB.Command
With cmdCommand
.ActiveConnection = cnnConn
.CommandType = adCmdText
.CommandText = " sql 语句 "
With rstRecordset
.Open cmdCommand
While Not rstRecordset.EOF
If rstRecordset.EOF = False And IsNull(!AMOUNT) = False And !AMOUNT <> 0 Then
Range(col & rowindex).Offset(0, 11) = BOB_FIMTM(aggr1, aggr2, aggr3, !contract, "RPT-BOND-VAR")
End If
rstRecordset.MoveNext
Wend
End With
End With
rstRecordset.Close
Set rstRecordset = Nothing
Set cmdCommand = Nothing
End Function
---------------------------------------------------------------------------------
Function BOB_FIMTM(aggr1, aggr2, aggr3, aggr4, CODE) As Double
Dim rstRecordset As ADODB.Recordset
Dim cmdCommand As ADODB.Command
Dim Concate As String
Dim i
Set rstRecordset = New ADODB.Recordset
Set cmdCommand = New ADODB.Command
With cmdCommand
.ActiveConnection = cnnConn
.CommandType = adCmdText
.CommandText = " "
Debug.Print .CommandText
With rstRecordset
.Open cmdCommand
If rstRecordset.EOF = False And IsNull(!MTM) = False Then
BOB_FIMTM = !MTM
Else
BOB_FIMTM = 0
End If
End With
End With
rstRecordset.Close
Set rstRecordset = Nothing
Set cmdCommand = Nothing
End Function
作者: fffanpei 发布时间: 2011-11-28
作者: chinaboyzyq 发布时间: 2011-11-28
全局ADODB.Connection + 全局ADODB.Recordset
+1
Recordset不全局的话, 全局Connection 毫无意义.
至于你说的几百次查询或者其他什么的导致很慢, 我觉得更大的可能是你程序逻辑还有很大优化的余地啊.
作者: WallesCai 发布时间: 2011-11-28
作者: fffanpei 发布时间: 2011-11-28
谢谢2位
作者: fffanpei 发布时间: 2011-11-28
再使用recordset 没有close的时候
再次调用查询应该怎样写呢
难道另外新建一个recordset 吗?
作者: fffanpei 发布时间: 2011-11-28
根据不同的需要,可以同时由一个有效的连接打开多个记录集
set rs1=cnn.execute(sql1)
set rs2=cnn.execute(s1l2)
set rs3=new adodb.recordset
rs3.open sql3,cnn
rs1,rs2,rs3可以同时并存,根本不会存在你所说的问题
作者: worldy 发布时间: 2011-11-28
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28