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:

