misc.log

日常茶飯事とお仕事と

Accessからクエリー定義情報をテキストファイルに出力する

自分用メモです。

古いAccessファイルにある大量のクエリーを分析したり調査、修正したりする際に、いちいちAccess上で確認したり、列名などで検索したりするのが大変なので、テキストファルにしてGrepでまとめて洗い出せないか……という場面に遭遇しました。少し検索した結果、VBAでテキストファイルにエクスポートするスクリプトを紹介してくれている人がいたので、参考にさせてもらいました。

qiita.com

こちらです。私の環境では、さらに参照設定で「Microsoft Scripting Runtime」など、FileSystemObjectを含んでいるライブラリーを参照しないとエラーになりましたので、そのあたりは適宜調整してください。

'クエリの出力
''参照設定:Microsoft office 16.0 Object Library
Private Sub ExportQuery()

    Dim queryAt         As QueryDef
    Dim fs              As New Scripting.FileSystemObject
    Dim streamAt        As Scripting.TextStream
    Dim BaseDir         As String
    Dim FileFullPath    As String

    '出力先を指定。ここではプロジェクトフォルダ直下
    BaseDir = CurrentProject.Path & "\"

    For Each queryAt In CurrentDb.QueryDefs 'クエリ分だけ回す

        'ファイル名をフルパスで作成。 ここではクエリと同じ名称にする。
        FileFullPath = BaseDir & queryAt.Name & ".sql"

        'ファイル作成 (既に存在する場合上書き)
        Set streamAt = fs.CreateTextFile(FileFullPath, True, False)

        'SQLの出力
        Call streamAt.Write(queryAt.sql)

        Call streamAt.Close
        Set streamAt = Nothing
        Set queryAt = Nothing

    Next
    Set fs = Nothing

End Sub

これで出てくるクエリーは、改行などの無いベタなテキストファイルになっています。そのままでは読みづらいので、1ファイルずつ下記のサイトで整形して保存しなおしました(150個ぐらいなので、手作業で15分ほどで終わりました)。

atl2.net