マクロで可能なのかもしれないが、よくわからないので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 件のコメント:
コメントを投稿