【发布时间】:2013-08-21 06:08:13
【问题描述】:
如何更改下面的代码以防止您在屏幕截图中看到。
我正在使用以下代码运行宏
Dim conn As ADODB.Connection
Dim rec1 As ADODB.Recordset
Dim thisSql As String
Set conn = New ADODB.Connection
Dim sConn As String
sConn = "Provider=SQLOLEDB;Trusted_Connection=Yes;Server=xyz;Database=xyz;UID=xyz;PWD=xyz"
conn.Open sConn
' this is creating multiple connections.
Set rec1 = New ADODB.Recordset
rec1.Open thisSql, conn
运行 SQL Server 查询(大约 20 行长,包含 4 个连接)。一切都很好,除了在运行几次后我的数据库管理员说我的查询加载了太多数据库。
现在,我的查询可能会导致问题,也可能是 Excel 开始同时运行多个连接。这方面的一些证据是下面的屏幕截图以及数据库上的负载似乎随时间增加的事实。
如何在不不断创建新连接的情况下建立数据库连接?
有人在使用 Excel 数据库宏时遇到过类似问题吗?
更新
虽然下面的答案非常有用(尤其是对于刚开始使用 VBA 的人),但我的查询占用负载的主要原因似乎是多个连接的组合并且忽略了我的代码中的一行:
With Sheets("FVols").QueryTables.Add(Connection:=rec1, Destination:=Sheets("FVols").Range("A1"))
.name = "data"
.FieldNames = True
.Refresh BackgroundQuery:=True <<<<<<<<<<<<<<<<<<<<<<<-----
End With
【问题讨论】:
-
没有看到更多的宏代码很难回答,但似乎你永远不会关闭连接,所以,是的,每次你的宏运行时,你都会创建一个新的连接。
-
@Tony,我最后写了 conn.Close,但它仍然创建了新的连接(rec1.Close 使宏崩溃)。还有什么我需要关闭的吗?