【VBA/ADO】 Excel에의 DB 접속에 OLEDB 프로바이더 외에 ODBC 드라이버도 사용할 수 있는 것에 대해

7125 단어 ADOVBAExcel

1. 개요



VBA에서 MySQL에 연결하는 방법을 살펴보면 Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)라는 것이 있다는 것을 알았습니다 (무지 때문에).

조사해 보면, 이 드라이버에서도 ADO로 연결 가능 것을 알았으므로, 시험에 사용해 보았습니다.
기본적인 곳은, 평상시 사용하고 있다 Microsoft.ACE.OLEDBプロバイダ 와 큰 차이는 없습니다만,
데이터형의 읽기 내용에 차이가 있었습니다.
이 점에 대해서도, 이미 정중하게 검증된 사이트 가 있었으므로, 더 이상 쓰는 것이 없습니다만, 모처럼 조사했으므로 써 둡니다.


Excel 서식
OLEDB 데이터 유형
ODBC 데이터 형식


문자열
adVarWChar(202)
adVarChar(200)

수치
adDouble(5)
adDouble(5)

통화
adCurrency(6)
adCurrency(6)

날짜
adDate(7)
adDBTimeStamp(135)


Microsoft가 공식적으로 제공하고 있기 때문에 아는 분들에게는 당연할지도 모릅니다.

2. 소스 코드 예



2-1. Connection 객체의 연결 부분



일반적으로 사용되는 ADODB.Connection 연결 방법


    Dim cn As New ADODB.Connection
    cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    cn.Properties("Extended Properties") = "Excel 12.0"
    cn.Open ThisWorkbook.Path & "\" & "TestTable.xlsx"

Microsoft Excel 드라이버를 사용하여 ADODB.Connection을 연결하는 방법


    Dim cn As New ADODB.Connection
    Dim filePath As String: filePath = ThisWorkbook.Path & "\" & "TestTable.xlsx"
    cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & filePath & ";ReadOnly=1"
    cn.Open

2-2. 전체 샘플 코드


'【ODBCドライバー】を使用したアクセス方法
Sub ADOSample()
    'インスタンスを作成
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim filePath As String: filePath = ThisWorkbook.Path & "\" & "TestTable.xlsx"

    'ADO接続
    cn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" & filePath & ";ReadOnly=1"
    cn.Open

    'SQL文の実行
    rs.Open "SELECT * FROM [Sheet1$] WHERE 区分 = '野菜'", cn

    'Recordset
    Do Until rs.EOF
        Debug.Print rs("品名") & ", " & rs("単価") & ", " & rs("購入日")
        rs.MoveNext
    Loop

    'メモリの解放
    rs.Close: Set rs = Nothing
    cn.Close: Set cn = Nothing
End Sub

참고 사이트
· PRB: ODBC를 사용하여 Excel에 액세스하는 경우 "작업은 업데이트 가능한 쿼리를 사용해야 합니다"
· Excel 파일에 ADO에서 CREATE/DROP/ALTER TABLE
· DAO, ADO, ODBC, OLE DB의 차이점을 간편하게 요약

좋은 웹페이지 즐겨찾기