Display A File Image on a Form
If you are planning on storing images in your application (such as pictures of products) I would highly recommend just storing the path to the image and not the actual image in your Access DB. I have written a number of successful applications where the images are stored in a regular file directory, and only the path is recorded in Access. This method works well and keeps the size of the database small.
The code that follows illustrates a very simple test program that asks the user to enter a path to an image, such as C:\Images\MyImage.jpg. Then, the form will request the image to be displayed. Because forms are private, I use the convenience of putting variables I want to pass to the form in a Global variable visible to all forms, objects and modules. The sample code in the program below follows this logic:
(1) When the user starts the Access DB, the AutoExec macro executes
(2) First, AutoExec runs the code that initializes the global variable I use
(3) Next, AutoExec runs code that displays an input box asking the user for a file path to an image
(4)
When the user enters the path, the module opens the form
(5) The form has a Form_Open event that uses the global path to the image to call the actual module that displays the image
Program Code
'''''''''''''''''''''''''''''''''''''''' THIS IS A REGULAR MODULE '''''''''''''''''''''''''''''''''''''''' Option Compare Database Option Explicit Public strGlobalPathToImage As String ' **************************************************************** ' This Is Started By the AutoExec Macro When the DB Is Opened ' **************************************************************** Public Function SetGlobals() strGlobalPathToImage = "" End Function '''''''''''''''''''''''''''''''''''''''' THIS IS A REGULAR MODULE '''''''''''''''''''''''''''''''''''''''' Option Compare Database Option Explicit Public Function TestImageDisplay() ' ************************************************************************** ' After The SetGlobals Function Is Executed by the AutoExec Macro at Startup ' This Is Also Executed By The AutoExec ' ************************************************************************** Dim strPathToImage As String Do ' ***************************************************************** ' Ask For An Image ' ***************************************************************** strPathToImage = InputBox("Enter A Path To An Image" & vbCrLf & _ "Or Click Cancel", "Image Display Test") If strPathToImage = "" Then Exit Function End If ' ***************************************************************** ' Set Up The Global Image Path So It Can Be Seen By The Form ' ***************************************************************** strGlobalPathToImage = strPathToImage ' ***************************************************************** ' Open The Image Display Form ' ***************************************************************** DoCmd.OpenForm "frmViewPassingImages", acNormal, , , , acDialog Loop End Function ''''''''''''''''''''''''''''''''''''' THIS IS THE CODE BEHIND A FORM ''''''''''''''''''''''''''''''''''''' Option Compare Database Option Explicit Private Sub cmdExitViewer_Click() ' *********************************************************************** ' Activated By The Exit Button On The Form ' *********************************************************************** DoCmd.Close End Sub Private Sub Form_Open(Cancel As Integer) ' *********************************************************************** ' Call The Image Display Module With The Image Frame and Path to Image ' The Module Returns "Y" if the image is found, "N" if not ' *********************************************************************** If DisplayImage(Me.ImageFrame, strGlobalPathToImage) = "N" Then MsgBox ("An Error Occurred - Image Not Found") DoCmd.Close End If End Sub '''''''''''''''''''''''''''''''''''''''' THIS IS A REGULAR MODULE '''''''''''''''''''''''''''''''''''''''' Option Compare Database Option Explicit Public Function DisplayImage(ctlImageControl As Control, strImageName As Variant) As String Dim strImageFound As String ' ************************************************************* ' The First Parameter Is The Name of the Image Control ' The Second Parameter is the Path And File Name ' The Function Returns a "Y" If Image Found, "N" If Not ' ************************************************************* On Error GoTo Err_DisplayImage strImageFound = "Y" With ctlImageControl .Visible = True .Picture = strImageName End With Exit_DisplayImage: DisplayImage = strImageFound Exit Function Err_DisplayImage: Select Case Err.Number Case 2220 ' Can't find the picture. ctlImageControl.Visible = False strImageFound = "N" Resume Exit_DisplayImage: Case Else ' Some other error. MsgBox Err.Number & " " & Err.Description strImageFound = "N" Resume Exit_DisplayImage: End Select End Function
Here is an illustration of the picture frame properties: