关于ADODB.Connection作为全局的效率问题
本人用Dim cnnConn As ADODB.Connection 链接数据库 再excel下生产报表。
目前遇到一个问题,因为涉及到多次链接数据库,
所以想把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
[解决办法]
全局ADODB.Connection + 全局ADODB.Recordset
[解决办法]