Excel 시트를 VBA를 통해 로컬 Access 데이터베이스에 연결하려고하는데 이전 디버그에서 잠긴 Access 데이터베이스 문제에 부딪혔습니다. 오류 3704 또는 3709 (아래 참조)가 발생할 때 디버깅하려고합니다.Excel VBA - 강제로 ADO 연결을 닫으려면 어떻게해야합니까?
이제 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
확인하기 위해 블록을 확인하는 경우에, 나는 썼다, 그러나 나는 "GET 런타임 때이다 오류 3074 : 운영 개체가 닫혀있을 때 허용되지 않는다 "는 cn.CloseConnection 라인에 :
If cn.State = adStateOpen Then
cn.Close
Else
MsgBox "The connection is already open."
End If
그래서 나는 밖으로 위의 코드를 주석하고 다음으로 교체,하지만 난 얻을"런타임 오류 3079 : 연결이 없습니다 이 작업을 수행하는 데 사용됩니다.이 컨텍스트에서는 닫히거나 유효하지 않습니다. " rs.ActiveConnection = cn 행으로 설정하십시오. 그것은 (cn.State 및 adStateOpen) = adStateOpen 부분에 먼저 들어갑니다.
마지막으로 연결을 정리하려면 cn.Close와 Set cn = Nothing을 사용하십시오. 그러나 그 시점에 도달하기 전에 코드가 중지되어 Access 데이터베이스에서 나를 잠급니다. 는 SQL에서 변수를 배치 내 구문이 잘못했기 때문에
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
코드는 원래 중지 : 내가 실행 한 쿼리에 관해서는, 변수와 단지 기본 선택 문이었다. 다시 디버깅 할 수 있었던 유일한 방법은 컴퓨터를 다시 시작하는 것입니다. 모든 조언을 크게 주시면 감사하겠습니다.
DAO를 Access와 함께 사용하는 것이 거의 항상 가장 좋습니다. – Fionnuala
ADO 라이브러리에 대한 참조가 설정되어 있습니까? – Rory