MS Access Tips/Sample and VBA and Blog customize etc...

AC2007以降の帳票フォームで画像表示

AC2003以前は画像の取り扱いはなかなか大変でした。OLEオブジェクト型に画像データを格納すれば、帳票フォームでも簡単に表示できて便利なんですが、Jpegなどの圧縮ファイルでも展開された状態で格納されるので、データベースファイルが肥大化したり、OLEサーバーに対応した画像処理ソフトが必要だったり、といろいろ問題点も抱えています。

そこで、ファイル名をテーブルに格納して、VBAでイメージコントロールにファイルパスを代入して表示させるという手法を使うのが一般的でした。ただし、この方法では帳票フォームで複数の画像データを表示させるのは無理です。

AC2007以降ではこれらの問題が改善されていますが、下記のように以外と知らない方も見えるようです。
Access2007で画像データのテーフ - Microsoft Answers

帳票フォームに画像表示

難易度:

AC2003以前

AC2003以前ではファイル名をテーブルに格納して帳票フォームに画像を表示するのは不可能と上で書いたのですが、実は表示する方法はあります。Accessの不可能を可能にする男 YU-TANG氏が公開している OleImage 関数を使えばできます。もし2003以前でそのような必要に迫られたら下記を参照してください。

OleImage 関数 - 表形式(帳票)フォームにパスから画像を表示する方法 | YU-TANG's MS-Access Discovery

単票フォームの場合は下記を参考にしてください。

続_写真付フォームの作成方法--相対パス対応:SampleFile200

どちらにしてもAccess標準の機能ではないので、モジュールをインポートしたり、VBAを記述したりという手間が必要になります。

添付ファイル型フィールドに格納する方法

AC2007以降は、Access標準の機能で可能になりますので、VBAは一切必要なく、プロパティの設定のみで簡単に表示させることができます。

まずは、Access2007以降に実装された添付ファイル型を使う方法から。これは、OLEオブジェクト型の弱点である肥大化、OLEサーバー依存、を克服しています。扱い方の詳細は下記を参照してください。
添付ファイル型フィールドとは

このフィールドに画像を格納したテーブルを元にウィザードでフォームを作成するか、テーブルをレコードソースに設定したフォームでフィールドリストから添付ファイル型フィールドをドロップするだけで、帳票フォームでも簡単に画像を表示できます。

画像の追加もコントロールをダブルクリックすることで簡単にできます。複数の画像を格納することもできます。
添付ファイル型に画像を追加

画像ファイル名のみ格納してイメージコントロールで表示する方法

AC2007以降、イメージコントロールにコントロールソースプロパティが実装されました。これにより外部の画像ファイルを簡単に表示させることができるようになりました。

テーブルに下記のようにテキスト型のフィールドに画像ファイル名を格納します。

T_Img
ID画像
1Img01.jpg
2Img02.jpg
3Img03.jpg

このテーブルをレコードソースとする帳票フォームを作成して、詳細セクションにイメージコントロールを配置します。そのとき「図の挿入」というダイアログが開きますがそのままキャンセルをクリックします。

コントロールソースに下記のように設定します。

="C:\Users\hatena\Documents\AccessTest\Picture\" & [画像]

上記は例ですので実際に画像をおいてあるフォルダーのパスを指定してください。

これだけで、帳票フォームが画像を表示させることができます。上記の例では画像フォルダーを絶対パスで指定しましたが、画像ファイルの保存先を変更したときに、あちこちのイメージコントロールのプロパティをいちいち変更するのは面倒と言うときは、画像フォルダーのパスを格納しておくテーブルを作成しておいてDLookUpで参照すればいいでしょう。

=Dlookup("Path","T_ImgFolder") & [画像]

こうしておけば保存先を変更してもT_ImgFolderのPathを変更するだけです。

イメージコントロールで画像ファイルを相対パスで指定する。

いや絶対パスではなく、データベースファイル(Accdb)と同じフォルダに画像フォルダをおいて相対的に参照したいという場合もあるでしょう。その場合は、さすがにVBAで必要だと思われるかもしれませんが、プロパティ設定だけで可能です。
コントロールソースを下記のように設定してください。

=[CurrentProject].[Path] & "\Picture\" & [画像]

データベースファイルと同じフォルダー内のPictureフォルダに画像を格納する例です。

いや、データベースはフロントエンドとバックエンドに分割していて、バックエンドファイルの置いてあるサーバーに画像フォルダを置きたいという場合は、下記のように設定すればいいでしょう。

まず、テキストボックスを配置して、下記のように設定します。

プロパティ設定値
コントロールソース=Mid$([Currentdb].[TableDefs]("リンクテーブル名").[Connect],11)
可視いいえ
名前txtPath

イメージコントロールのコントロールソースは下記のように設定します。

=Left([txtPath],InStrRev([txtPath],"\")) & "Picture\" & [画像]

リンク先のデータベースファイルと同じ場所のPictureフォルダに画像がある例です。

ここまで行くなら素直にVBAを使った方が読みやすいかもしれませんが、VBAを使わなくてもここまでできるということで。

追記:上記の3つの方法はレポートでもまったく同じ方法で使用できます。

サンプルファイルには、3つのAccdbファイルと画像フォルダが同封されています。

Pictureフォルダ・・・10個のJpegファイルが入っています。
FrmPictureAlbumAttachment.accdb・・・添付ファイル型フィールドに画像を格納
FrmPictureAlbumImgControl.accdb・・・ファイル名を格納してイメージコントロールで表示
FrmPictureAlbumOLEObject.accdb・・・OLEオブジェクト型フィールドに画像を格納

サンプルファイルが下記からダウンロードできます。
FrmPictureAlbum_07.zip (Access 2007-2010 形式 - 2,113kb)

拍手する

8 Comments

孔明 says..."素晴らしい。"

業務でフォームで画像を複数表示させる方法を探しており、非常に困っておりました。

(以前はAccess Clubというサイトを参照しておりましたが、閉鎖したんですよね・・・。)

本当にありがとうございました。

2013.08.04 16:10 | URL | #cA6gwZ6w [edit]
hatena says...""

わざわざ、コメントありがとうございます~^^

Access Club の閉鎖は本当に残念ですね。

2013.08.06 11:25 | URL | #5uE6dEgY [edit]
ティマロン says..."初心者で困っています。"

hatena様 助けてください!!

サンプルデータでレポート出力をしてみたいのですが、初心者でよくわかりません。
もちろん、資料や本サイトの内容をしっかりと確認しなければならないのですが、明日までに資料を作成せねばならず、hatena様にヒントを教えてもらえると助かります。

2014.02.28 20:24 | URL | #9L.cY0cg [edit]
hatena says..."re:初心者で困っています。"

> hatena様 助けてください!!

助けてあげたいのはやまやまなんですが、

> サンプルデータでレポート出力をしてみたいのですが、初心者でよくわかりません。

何が分からないのが、具体的に提示してもらえないと、ヒントの出しようがありません。

2014.02.28 21:05 | URL | #5uE6dEgY [edit]
ティマロン says..."恐れ入ります"

hatena様

説明不足で大変、失礼いたしました。

>>FrmPictureAlbumImgControl.accdb
>>ファイル名を格納してイメージコントロールで表示

をレポートにて画像を出力する場合の方法を教えていただきたいのです。
ヒントを教えていただき、現在、作業をしているアクセスに取り込んで
みたいのです。

環境はアクセス2013です。

最終目標は、身分証明書のように顔写真がIDごとに出力できることです。


2014.02.28 23:53 | URL | #9L.cY0cg [edit]
hatena says..."re:レポート"

> >>FrmPictureAlbumImgControl.accdb
> >>ファイル名を格納してイメージコントロールで表示
>
> をレポートにて画像を出力する場合の方法を教えていただきたいのです。

フォームとまったく同じ方法で可能です。

例えば、FrmPictureAlbumImgControl.accdb 内の F_Img をデザインビューで開いて、[ファイル]-[オブジェクトに名前を付けて保存]で、「貼り付ける形式」で「レポート」を選択して、OK をクリックすると、レポートに変換されます。

2014.03.01 00:07 | URL | #5uE6dEgY [edit]
ティマロン says..."ありがとうございました。涙が出ました。"

hatena様

さっそくの返信、ありがとうございます。

>>フォームとまったく同じ方法で可能です。

>>例えば、FrmPictureAlbumImgControl.accdb 内の F_Img をデザイン>>ビューで開いて、[ファイル]-[オブジェクトに名前を付けて保存]で、「貼>>り付ける形式」で「レポート」を選択して、OK をクリックすると、レポート>>に変換されます。

 問題なく、しっかりと出力されました。プレビューでは画像が荒くなりましたが、プリントアウト時はしっかりと出力されました。

遅い時間までお付き合いいただき、感激です。
もっと勉強をしなくてはと思った次第です。ありがとうございました。

これから本番のファイルに同じ方法でチャレンジしてみます。

2014.03.01 00:19 | URL | #9L.cY0cg [edit]
マシュタ says..."ありがとうございます!!"

素晴らしい記事!
イメージコントロールのプロパティの記述だけで
こんな事が実装可能なんて。。

Accessに画像を格納すると重く遅く柔らかくなるが
画像挿入のニーズは高くて難儀していました。

この方法なら、NASに画像、SQLserverにデータ、
入力・表示・レポートはAccessと実に快適に動作しました。

本当にありがとうございました。 
あ、BOSSキタ。。

2014.04.24 16:31 | URL | #- [edit]

Leave a reply






該当の記事は見つかりませんでした。