#490 添付ファイル型フィールドへファイルを追加するには? フォーム、VBA

Access2007から追加された「添付ファイル型」フィールドには、複数の外部ファイルをデータベース内に取り込んで保存することができます。また「添付ファイル」コントロールをフォームに配置し、そのフィールドと連結することによって、ミニツールバーを使って簡単に添付ファイルを追加したり削除したり、あるいは画像ファイルであれば1枚ずつ順番に画面表示させることもできます。

ここでは、VBAを使って、添付ファイル型フィールドと連結されたフォーム上のコントロールにファイルを追加するプログラム例を紹介します。

次のサンプルコードでは、[追加]ボタンのクリックによって、「商品写真」という添付ファイルコントロールに「c:\Picture\img17.jpg」という画像ファイルを追加しています。添付ファイルの追加には「LoadFromFile」メソッドを使います。なおレコードセット上の「FileData」フィールドは、添付ファイルの実データを保存する場所です。

Private Sub cmd追加_Click()
'[追加]ボタンクリック時

  'フォームのレコードセットの編集を開始
  Me.Recordset.Edit

  '商品写真フィールドのレコードセットに対する操作
  With Me.Recordset!商品写真.Value
    .AddNew
      !FileData.LoadFromFile "c:\Picture\img17.jpg"
    .Update
    .Close
  End With

  '添付ファイルコントロールの表示を更新
  Me!商品写真.Requery

End Sub


実行結果:
■クリック前
実行結果:クリック前
■クリック後
実行結果:クリック後

なおここで、「Me.Recordset!商品写真.Value」の方の「商品写真」はテーブル上のフィールド名、「Me!商品写真.Requery」の方の「商品写真」は添付ファイルコントロールの名前プロパティであることに注意してください。

また、「商品写真.Value」のレコードセットでは、「ファイル名(内部的には”FileName”というフィールド名)」が主キーになっています。ファイルを追加添付することによってその情報もいっしょにテーブルに保存されています。よって、すでに登録されているのと同じファイル名のファイルを添付しようとするとキー重複のエラーとなります。上記サンプルでは省略していますが、厳密には何らかのエラー処理が必要となります。
またその際、特に注意しなければならないのは、あくまでも添付した際の「フルパス」ではなく「ファイル名+拡張子」がキー値となる点です。よって、異なるフォルダから取り込んだとしても、ファイル名+拡張子が同じであればキー重複のエラーとなります。

また、上記の商品写真フィールドのレコードセットの宣言は、次のように記述することもできます。

Dim rst As Recordset

Set rst = Me.Recordset!商品写真.Value
With rst
  (以下同様)

| Index | Prev | Next |



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