Excel VBA-ADO 연결을 강제로 닫는 방법은 무엇입니까?

사용자 3791508

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이 먼저 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 데이터베이스에서 나를 잠급니다. 내가 실행 한 쿼리는 변수가있는 기본 select 문이었습니다.

    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에 변수를 배치하는 구문이 잘못되어 코드가 원래 중지되었습니다. 다시 디버깅 할 수있는 유일한 방법은 컴퓨터를 다시 시작하는 것입니다. 어떤 조언이라도 대단히 감사하겠습니다.

VBlade

문제는 ADO가 아니라 코드에서 오류 처리가 부족하기 때문이라고 생각합니다. 반드시 읽어야합니다.

달리 지정하지 않는 한, 오류 처리의 기본 모드는 메시지 상자를 표시하고 종료를 클릭하면 중지 된 줄에서 루틴을 종료합니다. On Error Goto를 살펴보고 오류를 처리 한 후 실행되는 블록을 만듭니다. 오류 여부에 관계없이 매번 실행되는 코드 블록을 설정하여 연결을 닫고 개체 할당을 취소 할 수 있습니다. 이것이 연결을 닫는 코드가 실패없이 실행되도록하여 연결을 강제로 닫는 방법입니다. 기본 셸은 다음과 같습니다.

Sub MySub()
On Error Goto MySub_ErrorHandler

    '...Code here...
    '1.  If error happens, goto 2.

ExitMe:
    '4. Clean up and run the code which needs to definitely run here.  Close connections, deallocate your objects, etc.

    '5. Finally, exit the routine with all loose ends tied up. 
    Exit Sub
MySub_ErrorHandler:
    '2. Handle the error here...

    '3. Then go to ExitMe...
    Goto ExitMe

End Sub

ExitMe에 코드를 넣어 오류가 발생할 위험이 있습니다. 이 경우 코드 실행은 다시 MySub_ErrorHandler로 이동하고 무한 루프에 들어갈 수 있습니다. 따라서 ExitMe에서 코드를 테스트하는 데주의하십시오.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

byobu : 창을 강제로 닫는 방법은 무엇입니까?

분류에서Dev

konsole을 강제로 닫는 방법은 무엇입니까?

분류에서Dev

Slack을 강제로 다시 연결하는 방법은 무엇입니까?

분류에서Dev

Java에서 창을 강제로 닫는 방법은 무엇입니까?

분류에서Dev

Excel VBA로 수식을 셀에 넣는 방법은 무엇입니까?

분류에서Dev

Excel VBA로 수식을 셀에 넣는 방법은 무엇입니까?

분류에서Dev

스팬 ID 값을 Excel VBA로 가져 오는 방법은 무엇입니까?

분류에서Dev

VBA에서 Microsft Excel 내에서 창 양식을 연결하는 방법은 무엇입니까?

분류에서Dev

Excel VBA 클래스와 컨트롤을 연결하는 방법은 무엇입니까?

분류에서Dev

Apache HttpClient / HttpConnection이 tcp 연결을 완전히 닫도록 강제하는 방법은 무엇입니까?

분류에서Dev

WCF에서 IEnumerable을 반환하는 방법은 무엇입니까? 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

분류에서Dev

열린 파일을 강제로 삭제하거나 닫는 방법은 무엇입니까?

분류에서Dev

XSL이 닫는 태그로 이것을 작성하도록 강제하는 방법은 무엇입니까?

분류에서Dev

두 개 이상의 행을 함께 연결하는 방법은 무엇입니까? Excel 2010 (예제)

분류에서Dev

다른 상황 (VBA)에서 Excel에서 중복을 삭제하는 방법은 무엇입니까?

분류에서Dev

VBA없이 Excel에서 Goal Seek 기능에 경계 / 제한을 설정하는 방법은 무엇입니까?

분류에서Dev

상대 문자 수의 문자열로 Excel 수식을 연결하는 방법은 무엇입니까?

분류에서Dev

향후 사용을 위해 Excel 및 vba 프로젝트로 저장하는 방법은 무엇입니까?

분류에서Dev

셀 값을 기반으로 Excel vba에서 조건을 설정하는 방법은 무엇입니까?

분류에서Dev

JNDI 연결을 닫는 방법은 무엇입니까?

분류에서Dev

동일한 열의 값을 다음 열로 복사하는 방법은 무엇입니까? Excel VBA

분류에서Dev

Excel VBA에서 세로 열에 여러 json을 생성하는 방법은 무엇입니까?

분류에서Dev

Excel VBA에서 윤곽선으로 쐐기 모양을 그리는 방법은 무엇입니까?

분류에서Dev

중첩 된 JSON에서 VBA로 Excel을 채우는 방법은 무엇입니까?

분류에서Dev

Excel VBA : 피벗 테이블에서 공백을 0으로 표시하는 방법은 무엇입니까?

분류에서Dev

Excel VBA로 동적 피벗 테이블을 반복하는 방법은 무엇입니까?

분류에서Dev

OpenWRT PPPoE 연결 모드에서 강제로 다시 연결하는 방법은 무엇입니까?

분류에서Dev

Excel 용 VBA로 Cosd 함수를 만드는 방법은 무엇입니까?

분류에서Dev

Excel VBA 배열에 값 열을 추가하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    byobu : 창을 강제로 닫는 방법은 무엇입니까?

  2. 2

    konsole을 강제로 닫는 방법은 무엇입니까?

  3. 3

    Slack을 강제로 다시 연결하는 방법은 무엇입니까?

  4. 4

    Java에서 창을 강제로 닫는 방법은 무엇입니까?

  5. 5

    Excel VBA로 수식을 셀에 넣는 방법은 무엇입니까?

  6. 6

    Excel VBA로 수식을 셀에 넣는 방법은 무엇입니까?

  7. 7

    스팬 ID 값을 Excel VBA로 가져 오는 방법은 무엇입니까?

  8. 8

    VBA에서 Microsft Excel 내에서 창 양식을 연결하는 방법은 무엇입니까?

  9. 9

    Excel VBA 클래스와 컨트롤을 연결하는 방법은 무엇입니까?

  10. 10

    Apache HttpClient / HttpConnection이 tcp 연결을 완전히 닫도록 강제하는 방법은 무엇입니까?

  11. 11

    WCF에서 IEnumerable을 반환하는 방법은 무엇입니까? 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다.

  12. 12

    열린 파일을 강제로 삭제하거나 닫는 방법은 무엇입니까?

  13. 13

    XSL이 닫는 태그로 이것을 작성하도록 강제하는 방법은 무엇입니까?

  14. 14

    두 개 이상의 행을 함께 연결하는 방법은 무엇입니까? Excel 2010 (예제)

  15. 15

    다른 상황 (VBA)에서 Excel에서 중복을 삭제하는 방법은 무엇입니까?

  16. 16

    VBA없이 Excel에서 Goal Seek 기능에 경계 / 제한을 설정하는 방법은 무엇입니까?

  17. 17

    상대 문자 수의 문자열로 Excel 수식을 연결하는 방법은 무엇입니까?

  18. 18

    향후 사용을 위해 Excel 및 vba 프로젝트로 저장하는 방법은 무엇입니까?

  19. 19

    셀 값을 기반으로 Excel vba에서 조건을 설정하는 방법은 무엇입니까?

  20. 20

    JNDI 연결을 닫는 방법은 무엇입니까?

  21. 21

    동일한 열의 값을 다음 열로 복사하는 방법은 무엇입니까? Excel VBA

  22. 22

    Excel VBA에서 세로 열에 여러 json을 생성하는 방법은 무엇입니까?

  23. 23

    Excel VBA에서 윤곽선으로 쐐기 모양을 그리는 방법은 무엇입니까?

  24. 24

    중첩 된 JSON에서 VBA로 Excel을 채우는 방법은 무엇입니까?

  25. 25

    Excel VBA : 피벗 테이블에서 공백을 0으로 표시하는 방법은 무엇입니까?

  26. 26

    Excel VBA로 동적 피벗 테이블을 반복하는 방법은 무엇입니까?

  27. 27

    OpenWRT PPPoE 연결 모드에서 강제로 다시 연결하는 방법은 무엇입니까?

  28. 28

    Excel 용 VBA로 Cosd 함수를 만드는 방법은 무엇입니까?

  29. 29

    Excel VBA 배열에 값 열을 추가하는 방법은 무엇입니까?

뜨겁다태그

보관