Access全テーブルのレコードをCSV出力したい

Access内の全テーブルについて、レコードをCSV出力したい。

マクロで可能なのかもしれないが、よくわからないのでVBAを使うことにする。

1) 全テーブルの取得
全オブジェクトの情報は "MSysObjects" というテーブルに入っている模様。
レコードを眺めたところ、
・type=1 がテーブル表す
・flags=0 がユーザーテーブル?
っぽい。

2) CSVの作成
CSVの作成は "DoCmd.TransferText" というコマンドで出来る。
"DoCmdTransfer acExportDelim, , (テーブル名), (CSV出力先)"

3) AccessでDAO3.6は使えない?
VisualBasicの [ツール] > [参照設定] で "Microsoft DAO 3.6 Object Library" にチェックを付けるが "DLL読み込み時のエラーです。" となり参照できない。
64bit版Accessだからなのかもしれない。
代替として "Microsoft ActiveX Data Objects 6.1 Library" を使うことにした。

4) 以上と纏めると、だいたい以下のソースとなる。
Option Compare Database

Public Sub test()
    
    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim sql As String
    
    Set conn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    
    sql = "SELECT NAME FROM MSYSOBJECTS WHERE TYPE=1 AND FLAGS=0 ORDER BY NAME"
    rs.Open sql, conn
    
    Dim tableName As String
    
    Do Until rs.EOF
       '今回はAccessテーブル名先頭8文字は不要なので除去した
        tableName = Mid(rs!Name, 9)
        Debug.Print tableName
        DoCmd.TransferText acExportDelim, , rs!Name, "C:\csv\" & tableName & ".csv", True
        rs.MoveNext
        Loop
    
    rs.Close
    Set rs = Nothing
    
    conn.Close
    Set conn = Nothing
    
End Sub


0 件のコメント:

その他の記事