AccessはDB内に画像を保存することができるので、画像ファイルが散らばらないメリットがあり、間違って画像ファイルを消した、入れ替えてしまったというようなエラーが発生しにくいと考えています。
Accessで画像を扱うための基本と、ファイルの大きさ(=DBとしての動作の軽さ?)について、保存方法の種類ごとにまとめます。
画像ファイルはOLEオブジェクトフィールド
Accessの画像ファイルを保存するフィールドは、OLEオブジェクト形式のフィールドにします。
OLEオブジェクトは写真などの静止画だけではなく、動画やWord、Excelファイルなども登録できます。そう考えると、ドキュメント管理にも使えるのかもしれません。(差分とかはできません)
OLEオブジェクト形式のテーブルのフィールド設定はこんな感じです。
データ型をOLEオブジェクトにすればいいのです。
フォームもそのまま作成し、大きさを調整すればいいのではないでしょうか。
Accessデータへの画像の新規登録
これはAccessのイマイチなところなのですが、OLEオブジェクトをデータに登録するには、ちょっと(かなり)面倒です。
テーブル、またはフォームのOLEオブジェクトを右クリックし、オブジェクトの挿入します。
ファイルからにして参照
これでやっとファイルが指定できます。
選んでOKします。
そこでもう一回OKします。
これで入ります。
実にクリック回数、7回+ファイル選択の手間がかかります。
PNGだとプレビューしないのかな。
JPGとBMPはちゃんと表示されます。
登録の仕方による違い
ということで、画像の登録が面倒なので、いろいろな登録を試してみたいと思います。
その前に、現時点のファイル容量をプロパティで確認します。
ファイルを指定したときのファイル容量
438,272バイト
ここでこのレコードを削除して、データベースを最適化します。
ファイルアイコンをフォームにドラッグ
エクスプローラーからフォームにドラッグ。
ちゃんと登録されました。
これは簡単ですね。
438,272バイト(全く同じ)
エクスプローラーのファイルアイコンをコピーして、フォームに貼り付けする方法でも、同じくできて、ファイルサイズも変わりません。
ペイントからコピペ
ペイントで実画像を開き、すべて選択してコピー、フォームに貼り付けする方法。
ちゃんとデータとして格納しました。
表示もされてますね。
ダブルクリックするとペイントで開けます。
容量も小さくなって、387,312バイト。
うーん、事前実験ではこちらのほうがデータ大きくなったのですが。。。
もしかしたらグラフとかじゃなくて写真だったら違うかも。
ちょっと比較してみます。
比較に使うデータはこれ。
結果
冗談みたいなのですが、どの方法でも変わりませんでした。
考察
予想は、Accessはファイルで登録すればファイルの容量がデータ量、画像そのものをフォームにコピペしたらビットマップそのままになると思っていました。
しかし、この結果から考えると、内部でなんらかの圧縮をしているようですね。
写真の方は1200pix×900pixなので少なくともビットマップではデータがもっと大きくなるはずです。
事前実験では、コピペしたら大きさが極端に大きくなったのですが、もしかするとパソコン&ディスプレイに影響しているのかもしれません。
スクリーンショットをするとディスプレイによっては2倍の高さと幅になるからその違いかと。
この記事を執筆しているパソコンは、オフィスソフトだけ使うパソコンなので普通のディスプレイでスクリーンショットは100%なのですね。
まとめ
Accessのフォームに画像を登録することができる!
Accessのフォームに画像を登録する時はいろいろな登録方法があるけど、ファイルアイコンをドラッグしてもいいし、画像をそのままデスクトップ上でスクショしてフォームに貼り付けられる!
スクショするときはいいディスプレイを使うと大きな画像で登録される(ようだ)