Access には フォーム という便利な機能がありますが、工夫次第で様々なことに応用できます。
今回は フォーム を利用して、マスタとなるテーブルに紐づいている画像を表示する方法を紹介します。
紐づいた画像を表示する方法はいくつか存在しますが、今回はその中でも比較的シンプルに実現可能な複数 フォーム を利用した方法の紹介になります。
使用するもの
- マスタとなるテーブル(画像マスタ)
- コードを入力するための フォーム(入力フォーム)
- フォームの入力を元にした選択クエリ(マスタ抽出)
- 画像を表示するための フォーム(表示フォーム)
使用するのは上記4点となります。
それぞれの詳細について順を追って説明しますが、まずは今回作成する処理の大まかな流れを説明します。
フォーム を利用して作成する処理について
今回作成する処理の流れは、
- 入力フォームにコードを入力する
- マスタ抽出の選択クエリで画像マスタの中から一致するレコードを抽出
- 抽出した結果を表示フォームに表示する
- 表示フォームを閉じて入力フォームに戻り再入力できるようにする
という流れになります。
上記流れにはなりますが、実際にはフォームの連結OLEオブジェクトという機能を利用するため、複雑な記述は不要で、入力が完了したら表示フォームを開くだけの記述で十分となります。
マスターとなるテーブル
マスターとなるテーブルについては、一番簡易的なもので説明しますが、詳細や備考などフィールドを増やすのは自由に行って問題ありません。
テーブルの作成
マスターとなるテーブルに必須なのは、”コード” と ”画像” になります。
フィールド名 | コード | 画像 |
データ型 | 短いテキスト / 数値型 など | OLEオブジェクト型 |
コードに指定するのは通常 ”短いテキスト” が一般的ですが、コードは任意の文字・数字にすることもできるため、データ型は ”短いテキスト” だけの表記ではなく、”数値型” などの表示を加えました。
画像に指定するのは ”OLEオブジェクト型” 一択です。
Access の画面上では上図のように設定します。
これでマスタとなるテーブルが完成です。
前述の通り、これは最低限必要な情報のため、フィールドは任意で増やすことが可能です。
テーブルの整備
準備したマスタテーブルをデザインビューからデータシートビューに変更します。
すると、何もデータが存在しないテーブルが表示されます。
このテーブルを整備することでマスターとして利用できるようになります。
コードについては、手入力しましょう。(エクセルで作ってコピペでも可)
画像の挿入は3つの方法があります。
- 画像フィールドを右クリックして挿入する
- フォルダからファイルをドラッグ&ドロップで挿入する
- コピー&ペーストで挿入する
マウス右クリックで画像データを挿入する方法
マウス右クリックで画像を挿入する場合、まずテーブルを開きます。
その後、画像を挿入したいレコードに移動し、画像フィールドで右クリック、オブジェクトの挿入を選択します。
するとオブジェクトを選択するためのウィンドウが立ち上がるため、ファイルからに変更し、参照ボタンをクリックするとファイル選択ダイアログが表示されるので、目的のファイルを選択し挿入します。
ドラッグ&ドロップで画像データを挿入する方法
ドラッグ&ドロップで画像を挿入する場合、まずは目的のファイルがあるフォルダを開きます。
その後テーブルを開き挿入したいレコードが画面上に表示される位置まで移動します。
移動が完了したら目的のファイルをドラッグし、目的のレコードの画像フィールドにマウスを移動させ、ドロップします。
これで画像データの挿入が完了します。
コピー&ペーストで画像データを挿入する方法
コピー&ペーストで画像を挿入する場合、まずは目的のファイルがあるフォルダを開き、目的のファイルをコピー(Ctrl + Cなど)します。
その後テーブルを開き挿入したいレコードが画面上に表示される位置まで移動します。
移動が完了したらレコードの画像フィールドにカーソルを移動させ、ペースト(Ctrl + Vなど)します。 これで画像データの挿入が完了します。
テーブル作成時の注意点
画像ファイルを利用する場合
OLEオブジェクトとしてマスタを作成し、画面に表示させることができるオブジェクトには限りがあります。
代表的なものは“Bitmap” “Excel” “Power Point” “Word” “PDF”などです。
“JPEG“や”PNG“などの画像ファイルをそのまま利用しても画像として表示させることができません。(下記画像のように表示されます)
“JPEG”などを利用する際には工夫が必要です。
- Bitmapに変換する
- ExcelやWord、Power Pointに貼り付ける
これらの工夫を行うことで画像ファイルをフォームに表示させることができます。
OLEオブジェクトとして挿入した場合、JPEGやExcelなどは以下のように表示されます。
Packegeと表記されるファイルは全て画像として表示されないので注意してください。
Excelファイルを利用する場合
Excelファイルを利用する場合、ファイル選択で画像を挿入していると、最初のシートの内情報が入力されているすべての範囲がフォームに表示されてしまいます。
表示させたい範囲を制限したい場合、範囲を選択して、コピー&ペーストでマスタを作成してください。
コードを入力するための フォーム
コードを入力するためのフォームでは、例えばバーコードリーダーやキーボードでテキストボックスにコードが入力され、その後画像を表示するためのフォームを開くという処理が必要になります。
フォーム の作成
まず、フォームを新規作成します。(“入力フォーム”と定義)
今回は処理の後にもう一つのフォームを開く必要があるので、先にもう一つのフォームも新規作成しておきましょう。(“表示フォーム“と定義)
“入力フォーム”にはテキストボックスを配置します。(プロパティからオブジェクトの名前を“TextImput”と再定義)
“TextImput”の更新後処理にイベントプロシージャを指定して下記VBAを記述します。
Private Sub TextImput_AfterUpdate() DoCmd.OpenForm "表示フォーム" End Sub
これで入力フォームの作成が完了しました。
この状態で、入力フォームをデザインビューからフォームビューに変更し、適当な文字を入力してEnterキーを押すと、新しく表示フォームが開きます。
フォーム の入力を元にした選択クエリ
次に表示フォームに画像を表示させるための準備として、選択クエリを作成します。
この選択クエリの抽出条件に入力フォームのテキストボックスの値を利用することで、簡単に抽出を実現することができます。
選択クエリの基本的な作成方法は以下の記事を参照してください。
選択クエリの作成
まず、選択クエリを新規作成します。
作成後、テーブルには画像マスタを指定し、コードと画像のフィールドを選択する。
コードの抽出条件に [Forms]![入力フォーム]![TextImput] と入力する。
入力の仕方はベタ打ちでも可能ですが、ビルドを使うとより直観的に入力することができます。
ビルドの使い方は下記記事に記載しています。
これで選択クエリの作成は完了です。
“マスタ抽出”と名前を付けて保存してください。
画像を表示するための フォーム
画像を表示するためのフォームは開いた際に選択クエリの結果を元にして画像を表示する仕組みになります。
これを実現するために、フォームのデータソースと、フォーム内の画像を表示するオブジェクトのレコードソースを指定する必要があります。
フォーム の作成
フォーム自体は先に作成した“表示フォーム”を利用します。
“表示フォーム”をデザインビューで開き、OLEオブジェクトフレームを挿入します。(オブジェクトの名前を“ObJPict”と定義)
大きさは必要な大きさに調整してください。
次に“表示フォーム”のレコードソースに“マスタ抽出”を設定します。
データソースを設定したら、先ほど挿入した“ObjPict”のコントロールソースに“画像”を指定します。
これで画像を表示させるまでの動作設定は完了です。
ですが、このままでは一度表示させて終わりなので、次のコードを入力して次の画像を表示できるように機能を加えます。
“表示フォーム”にボタンを挿入します。(オブジェクトの名前を“BotClose”と定義)
“BotClose”のクリック時、もしくはダブルクリック時にイベントプロシージャを指定して下記VBAを記述する。
Private Sub BotClose_Click() DoCmd.Close acForm, "表示フォーム" Forms.入力フォーム.TextImput = "" End Sub
クリック時、ダブルクリック時どちらが良いかは状況によって判断してください。
DoCmd.Close acForm, "表示フォーム"
この記述により表示フォームを閉じることができます。
Forms.入力フォーム.TextImput = “”
この記述により、入力フォームのテキストボックスを空にすることができます。
Access のイベントプロシージャ記載時の注意点
入力フォームの“TextImput”を空にする処理の記載で間違いがちなのが、以下の記述です。(私もよくエラーが出て気づきます)
入力フォーム.TextImput.text = “”
テキストボックスのテキストを空にるため、.textを後ろにつけがちですが、Access VBAにおいて、.textはそのオブジェクトにフォーカスがある時に使用できるようです。
.textを付けないように注意しましょう。
まとめ
今回はコードを元にして画像を表示させる方法を紹介しました。
この方法に限らず、ひとつのフォームだけで完結させる方法もありますが、それはまたの機会に紹介します。
この方法の問題点は、画像をAccess内に保存することになるので、データベース容量が圧迫されること、JPEG等のファイルを利用するためには、工夫が必要になることです。
小規模システムとしての利用であれば十分かと思いますので、活用してみてはいかがでしょうか?
コメント