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