テーブル内容をソートし、テキストファイルに出力する方法

◆概要
 この資料は、Microsoft Access でテーブル内容をソートし、テキストファイルに出力する方法を記載しています。

◆内容

 Access97で開発を行っていたのですが、Access97のテーブルは、順番に書き込んだつもりでもそのとおりにならない事がありました。4つのテーブルから1つのテーブルへ順番に追加クエリーで書き込んでも途中に最後に書き込んだデータが入ってしまうのです。書き込む前に最適化をしても結果は同じでした。


これがいつもだと分かるのですが、たまにあるので厄介です。ある一定の条件のもとで発生するようです。Access97のバグだと思います。ちなみにAccess2000で同じ条件で行ってみましたが、このようなことはありませんでした。


コード順で並んでいる事が絶対必要なものでしたので、以下のとおりDAOのRecordsetでメモリ空間でテーブルをソートすることで解決しました。


◆Sample code

 Microsoft データ アクセス オブジェクト(DAO)を使用するため、Microsoft DAO 3.6 Object Library を参照する必要があります。 これを行うには、 Visual Basic Editor の ツール メニューで 参照設定をクリックし、 Microsoft DAO 3.6 Object Library チェック ボックスをオンにします。


次の例は、テーブル「ZFTData」をソートし、それをPrintメソッドでテキストファイルに書き出しています。

Option Compare Database
Option Explicit

Function MkTxtFile()
On Error Resume Next
    Dim dbs As Database, rs As Recordset, sortset As Recordset
    Dim strData As String

    Set dbs = DBEngine.Workspaces(0).Databases(0)

    'ダイナセットを作成します。
    Set rs = dbs.OpenRecordset("ZFTData", DB_OPEN_DYNASET)

    '並べ替え順序を設定します。
    rs.Sort = "Data"

    '最初のダイナセットを元にして新たなダイナセットを作成します。
    Set sortset = rs.OpenRecordset()

    'ファイルにデータを書き込む
    Dim strFileName As String
    Dim intFileNo As Integer
    Dim strRecBuff As String
    Dim lngLineCounter As Integer

   '書き込むファイル名 ファイルがなくても作成されます。
    strFileName = "c:\test.txt"

    '空いているファイル番号を取得
    intFileNo = FreeFile

    'シーケンシャルモードでファイルを開く
    Open strFileName For Output As intFileNo
   
    '並べ替えた先頭のレコードに移動します。
    sortset.MoveFirst

    Do Until sortset.EOF
        strData = sortset!Data & String(30, " ")        '空白文字30文字を追加
        'ファイルに書き込む
       Print #intFileNo, strData
       sortset.MoveNext    '次のレコードに移動
    Loop

    'テキストファイルを閉じる
    Close intFileNo

    'データベースを閉じます
    sortset.Close
    rs.Close
    dbs.Close

End Function



▼ページトップに戻る