【Access VBA】SQL ServerのデータをUTF-8形式でCSVファイルに出力する

SQL ServerのデータをUTF-8形式でCSVファイルに出力する

SQL ServerのテーブルのデータをAccess経由でUTF-8形式のCSVファイルに出力します。

テーブルを準備する

SQL Serverで「sample」という名前のデータベースの中に「Tサンプル」という名前のテーブルを用意しました。

参照設定の準備

Visual Basic Editorを表示し、「ツール」タブの「参照設定」をクリック します。

Microsoft ActiveX Data Objects ×.× Library」をチェックし、「OK」ボタンをクリックします。

コードの記述

標準モジュールに以下のコードを記述しました。

Public Sub sample()
    Dim i As Integer
    Dim strCN As String
    strCN = "driver={ODBC Driver 17 for SQL Server};server=LAPTOP-114315\SQLEXPRESS;DATABASE=sample;uid=admin;PWD=1111"
        
    Dim cn As ADODB.Connection
    Set cn = CurrentProject.Connection

    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset
    
    Dim strm As ADODB.Stream
    Set strm = New ADODB.Stream
  
    Dim vData As String
    Dim Target As String

    With rs
        .Open "SELECT * FROM Tサンプル IN ''[ODBC;" & strCN & "]", cn, adOpenForwardOnly, adLockReadOnly, adCmdText
            For i = 0 To rs.Fields.Count - 1
                vData = vData & .Fields(i).Name
                If i < rs.Fields.Count - 1 Then vData = vData & ","
            Next
            vData = vData & vbCrLf

        Do Until .EOF
            For i = 0 To rs.Fields.Count - 1
                vData = vData & .Fields(i).Value
                If i < rs.Fields.Count - 1 Then vData = vData & ","
            Next
            vData = vData & vbCrLf
            .MoveNext
        Loop
        .Close
    End With
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    
    Target = CurrentProject.Path & "\Sample.csv"
    
    With strm
          .Charset = "UTF-8"
          .Open
          .WriteText vData
          .SaveToFile Target, adSaveCreateOverWrite
          .Close
    End With
    Set strm = Nothing
End Sub