PRB: ODBC를 통해 Excel에 액세스할 때 "작업에서 업데이트 가능한 쿼리를 사용해야 함"

증상

ADO 및 ODBC를 통해 Excel 워크시트를 편집할 때 ADO DataControl 개체를 사용하는 경우 다음 오류 메시지가 표시될 수 있습니다.

[Microsoft][ODBC Excel Driver] Operation must use an updateable query.

ADO 코드로 생성된 Recordset 개체를 사용하는 경우 ADO 및 ODBC를 통해 Excel 워크시트를 편집할 때 다음 오류 메시지가 표시될 수 있습니다.

Run-time error '-2147467259(80004005)': [Microsoft][ODBC Excel Driver] Operation must use an updateable query.

원인

이 문제는 ReadOnly로 저장되거나 열린 워크시트를 편집하려고 하면 발생합니다.

참고

ReadOnly는 DSN(데이터 원본 이름)을 사용하거나 사용하지 않고 Excel에 대한 ODBC 연결의 기본 설정입니다. 따라서 사용자는 항상 해당 설정을 변경하여 데이터를 편집해야 합니다.

해결 방법

이 문제를 resolve려면 다음 방법을 사용합니다.

  • Recordset 개체의 LockType 속성이 ReadOnly로 설정되지 않았는지 확인합니다.

  • 열려는 파일이 ReadOnly로 저장되지 않았는지 확인합니다.

  • DSN을 통해 연결하는 경우 다음 단계를 수행합니다.

    1. 제어판 열고 ODBC 데이터 원본 관리자를 클릭합니다.
    2. DSN을 두 번 클릭합니다.
    3. ODBC Microsoft Excel 설치 대화 상자에서 옵션을 클릭합니다.
    4. ReadOnly 검사 상자가 선택되어 있지 않은지 확인합니다.
  • DSN이 없는 연결을 사용하는 경우 연결 문자열 "ReadOnly=0" 옵션을 포함해야 합니다. 예를 들면 다음과 같습니다.

    cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=C:\MyDoc.xls;ReadOnly=0;"
    

상태

이것은 의도적으로 설계된 동작입니다.

추가 정보

동작을 재현하는 단계

  1. Visual Basic에서 새 표준 EXE 프로젝트를 만듭니다.

  2. 프로젝트 메뉴에서 참조를 클릭한 다음 Microsoft ActiveX 데이터 개체 라이브러리에 대한 참조를 추가합니다.

  3. Form1에 명령 단추를 추가합니다.

  4. Form1에 다음 코드를 추가합니다.

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    
    Private Sub Form_Load()
      Command1.Caption = "Edit"
    End Sub
    
    Private Sub Command1_Click()
      Dim DocPath As String
    
      DocPath = App.Path & "\Test.xls"
    
      Set cn = New Connection
      Set rs = New Recordset
    
      cn.Open "Driver={Microsoft Excel Driver (*.xls)};DBQ=" & DocPath & ";ReadOnly=1"
      rs.LockType = adLockOptimistic
      rs.Open "TB1", cn
      rs.AddNew
      rs.Fields(1).Value = "New Value"
      rs.Update
    
      rs.Close
      cn.Close
      Set rs = Nothing
      Set cn = Nothing
    End Sub  
    
  5. 애플리케이션을 저장합니다.

  6. 새 Excel 워크시트를 만든 다음 워크시트를 Test.xls 저장합니다.

  7. 삽입 메뉴에서 이름을 가리킨 다음 정의를 클릭합니다.

  8. Excel 워크시트 내에 새 테이블을 만든 다음 테이블 이름을 TB1로 지정합니다.

  9. 워크시트를 Visual Basic 애플리케이션과 동일한 폴더에 저장합니다.

  10. F5 키를 눌러 애플리케이션을 실행합니다.

참조

자세한 내용은 다음 문서를 참조하세요.

Office 공간: Microsoft Office 애플리케이션 스크립팅을 위한 팁과 묘기