フォーム、レポート、またはデータ アクセス ページでフォルダーの画像を表示する方法
元の KB 番号: 285820
注:
専門的なコーディング、相互運用性、マルチユーザー スキルが必要です。 この記事は、Microsoft Access データベース (.mdb/.accdb) と Microsoft Access プロジェクト (.adp) に適用されます。
概要
場合によっては、Microsoft Access テーブルにイメージを格納することは実用的ではありません。 イメージが多数ある場合、または各イメージ ファイルが大きい場合は、Microsoft Access データベース ファイルのサイズがすぐに大きくなる可能性があります。
この記事では、次の目的で使用できるカスタム関数を示します。
- ファイル パスとイメージの名前をテーブルに格納します。
- イメージ コントロールを使用して画像を表示します。
- 使用可能なイメージがない場合は、イメージ コントロールを非表示にします。
- 画像の表示状態に関するフィードバックを提供します。
この記事には、データ アクセス ページに画像を表示するために使用できる Visual Basic スクリプトのサンプルも含まれています。
注:
この例ではビットマップ イメージ (.bmp) を使用しますが、.jpg、.pcx、.gif など、他の種類のイメージを使用することもできます。
Microsoft は、例示のみを目的としてプログラミング例を提供しており、明示または黙示にかかわらず、いかなる責任も負わないものとします。 これには、市販性または特定の目的との適合性についての黙示の保証も含まれますが、これに限定はされません。 この記事は、説明されているプログラミング言語、手順を作成およびデバッグするために使用されているツールに読者が精通していることを前提にしています。 マイクロソフト サポート窓口では、特定のプロシージャの機能説明に関するご質問に対して支援いたしますが、本例を特定の目的を満たすために機能を追加したり、プロシージャを構築することは行いません。
ファイルとパスのデータを格納するテーブルの作成
サンプル データベース、Northwind.mdb、またはサンプル プロジェクト NorthwindCS.adp を開きます。
次の表を Northwind.mdb または NorthwindCS.adp に作成します。
In Northwind.mdb:
Table: tblImage ---------------------------- Field Name: ImageID Data Type: AutoNumber Indexed: Yes (No Duplicates) Field Name: txtImageName Data Type: Text Table Properties: tblImage -------------------------- PrimaryKey: ImageID
In NorthwindCS.adp:
Table: tblImage ----------------------- Column Name: ImageID Datatype: Int Allow Nulls: Unchecked Identity: Yes Column Name: txtImageName Datatype: varchar Table Properties: ImageTable ------------------------------- Primary Key Constraint: ImageID
データシート ビューで tblImage テーブルを開き、ビットマップ ファイルのパスと名前を各レコードに追加します。 次の例の表は、レコードがどのように表示されるかを示しています。
型 例 Absolute (Local) C:\Windows\Zapotec.bmp Absolute (UNC パス) \\Servername\sharename\Zapotec.bmp Relative Zapotec.bmp
カスタム関数の作成
新しいモジュールを作成し、次のコードを貼り付けるか入力します。
Option Compare Database Option Explicit Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String On Error GoTo Err_DisplayImage Dim strResult As String Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlImageControl If IsNull(strImagePath) Then .Visible = False strResult = "No image name specified." Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Visible = True .Picture = strImagePath strResult = "Image found and displayed." End If End With Exit_DisplayImage: DisplayImage = strResult Exit Function Err_DisplayImage: Select Case Err.Number Case 2220 ' Can't find the picture. ctlImageControl.Visible = False strResult = "Can't find image in the specified name." Resume Exit_DisplayImage: Case Else ' Some other error. MsgBox Err.Number & " " & Err.Description strResult = "An error occurred displaying image." Resume Exit_DisplayImage: End Select End Function
モジュールを Module1 として保存します。
フォームでのカスタム関数の使用
tblImage テーブルに基づく次の新しいフォームを作成します。
Form: frmImage ---------------------- Caption: Image Form RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
注:
フォームにパスを表示しない場合は、コントロールの
txtImageName
プロパティをVisible
False に設定できます。[ 表示 ] メニューの [ コード] をクリックし、次のコードを貼り付けるか入力します。
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
フォーム ビューで frmImage フォームを開きます。 フォームには、各レコードの対応するビットマップが表示されることに注意してください。 フィールドが
txtImageName
空白の場合、またはイメージが見つからない場合は、イメージ フレームではなく適切なメッセージを受け取ります。
レポートでのカスタム関数の使用
ImageTable テーブルに基づく次の新しいレポートを作成します。
Report: rptImage ---------------------- Caption: Image Report RecordSource: tblImage Image Control --------------------------------- Name: ImageFrame Picture: "C:\Windows\Zapotec.bmp" Text box ---------------------- Name: txtImageID ControlSource: ImageID Text box --------------------------- Name: txtImageName ControlSource: txtImageName Text box --------------------------- Name: txtImageNote ControlSource: <Blank>
注:
パスをレポートに表示しない場合は、コントロールの
txtImageName
プロパティをVisible
False に設定できます。[ 表示 ] メニューの [ コード] をクリックし、次のコードを貼り付けるか入力します。
Option Compare Database Option Explicit Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) Me!txtImageNote = DisplayImage(Me!ImageFrame, Me!txtImageName) End Sub
印刷プレビューで rptImage レポートを開きます。 レポートには、レコードごとに対応するビットマップが表示されることに注意してください。 フィールドが
txtImageName
空白の場合、またはイメージが見つからない場合は、イメージ フレームではなく適切なメッセージを受け取ります。
データ アクセス ページでのカスタム関数の複製
tblImage テーブルに基づく次の新しいデータ アクセス ページを作成します。
Data Access Page: dapImage ----------------------------- Title: Image Data Access Page Image Control --------------------------------- ID: ImageFrame Text box ---------------------- ID: txtImageID ControlSource: ImageID Text box --------------------------- ID: txtImageName ControlSource: txtImageName
注:
パスをページに表示しない場合は、コントロールの
txtImageName
プロパティをVisibility
Hidden に設定できます。[ツール] メニューの [マクロ] をポイントし、[Microsoft Script Editor] をクリックします。
次のスクリプトを、HTML ドキュメントの HEAD タグ部分の MSODSC の Current イベントに追加します。
注:
イベントをトリガーするには、パラメーターを渡す必要があります。
<SCRIPT language=vbscript event=Current(oEventInfo) for=MSODSC> <!-- ImageFrame.src=txtImageName.value --> </SCRIPT>
ページ ビューで dapImage ページを開きます。 ページには、レコードごとに対応するビットマップが表示されることに注意してください。 txtImageName フィールドが空白の場合は、コントロール アイコンが表示されます。 イメージが見つからない場合は、イメージ コントロールに X アイコンが表示されます。
フォームで http:// パスを使用する
フォームで http:// パスを使用するには、次のように Web ブラウザー コントロール (shdocvw.dll) を使用します。
Microsoft Web Browser コントロールをフォームに追加し、WebBrowser という名前を付けます。
モジュールに次のコードを追加します。
Public Function DisplayImageWeb(ctlBrowserControl As Control, _ strImagePath As Variant) On Error GoTo Err_DisplayImage Dim strDatabasePath As String Dim intSlashLocation As Integer With ctlBrowserControl If IsNull(strImagePath) Then ElseIf Left(strImagePath, 4) = "http" Then .Navigate (strImagePath) Else If InStr(1, strImagePath, "\") = 0 Then ' Path is relative strDatabasePath = CurrentProject.FullName intSlashLocation = InStrRev(strDatabasePath, "\", Len(strDatabasePath)) strDatabasePath = Left(strDatabasePath, intSlashLocation) strImagePath = strDatabasePath & strImagePath End If .Navigate (strImagePath) End If End With Exit_DisplayImage: Exit Function Err_DisplayImage: Select Case Err.Number Case Else MsgBox Err.Number & " " & Err.Description Resume Exit_DisplayImage: End Select End Function
フォームの背後に次のコードを追加します。
Option Compare Database Option Explicit Private Sub Form_AfterUpdate() CallDisplayImage End Sub Private Sub Form_Current() CallDisplayImage End Sub Private Sub txtImageName_AfterUpdate() CallDisplayImage End Sub Private Sub CallDisplayImage() DisplayImageWeb Me.WebBrowser9, Me.txtImageName End Sub
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示