テーブル内容をソートし、テキストファイルに出力する方法
◆概要
この資料は、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
▼ページトップに戻る