#784 テキストファイルを丸ごとフィールドに格納する方法 VBA

ディスク等に単独で保存されているテキストファイルの内容を丸ごと読み込み、Accessデータベース内のテーブルの1フィールドにまとめて格納する方法です。
このような処理を行うことで、別ファイルとなっていたテキストデータをデータベース内で一括保管できるとともに、テーブル上で検索したりクエリを使って抽出したりといったデータ操作も行えます。

次の例では、「C:\テスト」にある拡張子「.htm」のテキストファイルをすべて読み込み、「tblテキストファイルデータ」テーブルに1ファイル1レコードとしてそれぞれ取り込みます。
  • テキストファイルなので1行ずつ読み込んで文字列を組み立てて最後にそれをテーブルにレコード追加するという方法もありますが、ここでは「Binary」モードで開いてその内容を一度に丸ごと変数「strData」に取得、それを保存するようにしています。
  • 格納先は「テキストデータ」フィールドで、「メモ型(長いテキスト)」とします。
  • 合わせてファイル名も「ファイル名」フィールドに保存しています。文書管理のようなことをしたい場合には、さらにここでファイルサイズや更新日時などの情報も別途取得し、データベース化することもできます。

Dim dbs As Database
Dim rst As Recordset
Dim strFileName As String
Dim intFilenum As Integer
Dim lngRecLen As Long
Dim strData As String
Const cstrDir = "C:\テスト\"

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblテキストファイルデータ")

'C:\テストフォルダ内の最初の.htmlファイルを読み込む
strFileName = Dir(cstrDir & "*.html")

'フォルダ内のすべての.htmlファイルを読み込むループ
Do While strFileName <> ""
  '入力元ファイルをBinaryモードで開く
  intFilenum = FreeFile()
  Open cstrDir & strFileName For Binary As #intFilenum
  'ファイルのサイズを取得
  lngRecLen = LOF(intFilenum)
  'ファイルサイズに合わせて変数をスペースで埋める
  strData = String$(lngRecLen, " ")
  'ファイルを丸ごと読み込む
  Get #intFilenum, , strData
  'NULL文字を除去
  strData = Replace(strData, vbNullChar, "")

  '読み込んだデータを新規レコードにフィールドに格納
  With rst
    .AddNew
      !ファイル名 = strFileName
      !テキストデータ = strData
    .Update
  End With

  '入力元ファイルを閉じる
  Close #intFilenum

  '次のファイルへ進む
  strFileName = Dir()

Loop

rst.Close

実行例:





※参考Tips:「#785 フィールドの内容を丸ごとテキストファイルに出力する方法」
※参考Tips:「#520 テキストファイルを丸ごと変数に読み込む方法(1)」
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved