【发布时间】:2014-07-01 07:06:20
【问题描述】:
我正在尝试通过 VBA 将 Excel 工作表连接到本地 Access 数据库,我遇到了 Access 数据库在之前的调试中被锁定的问题,并且正在抛出错误 3704 或 3709(见下文)尝试调试时。
现在我是 VBA 的新手,所以我很有可能无法正确地将它连接到数据库。有没有办法强制关闭数据库?
以下是连接代码:
Dim objAccess As Object
Dim strFile, strConnection As String
strFile = "Address of SampleDB.accdb"
Set objAccess = CreateObject("Access.Application")
Call objAccess.OpenCurrentDatabase(strFile)
'get the connection string
strConnection = objAccess.CurrentProject.Connection.ConnectionString
objAccess.Quit
Set cn = CreateObject("ADODB.Connection")
cn.ConnectionString = strConnection
所以为了检查状态是否打开,我写了一个 if 块来检查,但这是当我在 cn.CloseConnection 行上得到“运行时错误 3074:对象关闭时不允许操作”时:
If cn.State = adStateOpen Then
cn.Close
Else
MsgBox "The connection is already open."
End If
所以我将上面的代码注释掉并替换为以下代码,但我得到“运行时错误 3079:连接不能用于执行此操作。它在此上下文中已关闭或无效。”在 Set rs.ActiveConnection = cn 行上。它首先进入 (cn.State And adStateOpen) = adStateOpen is true 部分。
If (cn.State And adStateOpen) = adStateOpen Then
MsgBox "cn Connection is already open."
Else
cn.Open strConnection
MsgBox "Connection is now open"
End If
Set rs = Nothing
Set rs = CreateObject("ADODB.Recordset")
Set rs.ActiveConnection = cn
我在最后使用 cn.Close 和 Set cn = Nothing 来清理连接。但是,代码在到达该点之前就停止了,现在将我锁定在 Access 数据库之外。至于我运行的查询,它只是一个带有变量的基本选择语句:
Dim iArea As String
Dim strSQL As String
Dim dId As Integer
iArea = "Sales"
strSQL = "SELECT [deptID] FROM [tblDept] WHERE [deptArea]='" & iArea & "'"
rs.Open
Set rs = cn.Execute(strSQL)
dId = rs.Fields(0)
MsgBox dId
rs.Close
Set rs = Nothing
代码最初停止是因为我在 SQL 中放置变量的语法错误。 我能够再次调试的唯一方法是重新启动计算机。任何建议将不胜感激。
【问题讨论】:
-
几乎总是最好将 DAO 与 Access 结合使用。
-
你有 ADO 库的引用集吗?
标签: vba excel connection adodb