Here's an old post I happen to have kept on the subject.
Chris
----- Original Message -----
From: "Frank Miller" <
[email protected]>
Newsgroups: microsoft.public.access.developers.toolkitode
Sent: Tuesday, November 13, 2001 11:04 AM
Subject: RE: Catalog Application - Picture Handling
Hi Beau,
My name is Frank Miller. Thank you for using the Microsoft Access
Newsgroups.
There are primary two ways to get images onto an Access 97 form or report,
either we embed the images in the database or we create links in the
database to the image files.
The embed method is easier to distribute but creates a much larger database
file.
The link method saves considerable space in the database but requires that
the path is valid at the time the image is displayed.
Thumbnail images can also be utilized by including a second, smaller
version of each image, or by simply scaling down the image display in the
form or report.
In the following example, a form is used to load and display images, a
report is used that will print both the embedded and linked images, and a
database table is created that contains both embedded and a linked JPG
images. Although JPG images were used in this example, other image types
can also be used.
On a Windows 98 platform, the database table uses a Text field to store the
image link and an OLE Object field to store the embedded image.
First we create a database that contains, as a minimum, a text field which
is the source for the image link and a OLE Object field which is where the
embedded image is stored.
Next, we create a Form that will both link, embed, and display both types
of the selected image file. On the form we need a Common Dialog ActiveX
control (named ActiveXCtl3 in the example below) to get the image path, a
Command Button (named Load New Image) to get new images, a Text box (named
Text2) to display the image file path, an Image box (named Image4) to
display the linked image, and a Bound Object Frame (named OLEBound10), that
is bound to the embedded image in the database.
Sample code:
The routine below is good for loading OLE objects, such as .gif, .jpg,
doc, .xls, or .bmp files that are associated with an OLE Server, into a
Microsoft Access database. We can set the Image control's Picture Property
to any .bmp, .ico, .wmf, .dib, or .emf file on your hard disk. If you have
installed graphics filters for other programs, you can use any file
supported by those filters (such as TIF files).
NOTE: To associate a graphic file with an OLE Server, open it with an OLE
Server package, such as Microsoft Imager or Microsoft Paint, and save the
file.
If you receive an error opening the image, please see article:
Q294255 - ACC2000: Err Msg When You Attempt to Display Images on a Form
http://support.microsoft.com/support/kb/articles/q294/2/55.asp
The following subroutine loads the linked image to the form when the form
opens and when the user selects a new record in the database. The On Error
Resume Next is used to avoid an error message when there is no link or when
the link does not point to a valid image file.
Private Sub Form_Current()
On Error Resume Next
Me.Image4.Picture = Me.Text2
End Sub
This subrountine runs when the Load New Image button is clicked. It
displays the Open File dialog box so that the user can select a new image
file, links the file, displays the image, and embeds the image in to the
database.
Private Sub Command1_Click()
Me.ActiveXCtl3.ShowOpen
'Linked Image Code
Me.Text2 = ActiveXCtl3.FileName
Me.Image4.Picture = Me.Text2
'Embedded Image Code
Me.OLEBound.OLETypeAllowed = acOLEEmbedded
Me.OLEBound.SourceDoc = ActiveXCtl3.FileName
Me.OLEBound.Action = acOLECreateEmbed
Me.Refresh
End Sub
We can now create a report to display the embedded image is in a bound
object frame and the linked images with the following code:
Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer)
On Error Resume Next
Me.Image9.Picture = Me.MyImage
End Sub
This example could be further modified to display only the desired file
types in the Open File dialog. For additional information, please see the
CommonDialog Control's Filter Property in the help file. If the application
is to be distributed to other machines I would favor using VBA code, rather
than the Commod Dialog Control to select the images. See article Q161286 -
HOWTO: Use a Common Dialog File Open Dialog with Win32 API
Image Quality:
When we both Link and Embed the same file at the same time, we should not
see any difference in the image quality.
When we Embed the image in an OLE Object, we "wrap" the image with the OLE
Server information so it will display even after we have removed the OLE
Server (such as Photo Editor) from the computer.
When we Link the image file we use whatever OLE Server is installed to
display the image, or, if there is no OLE Server installed, then we use the
Graphics Filters that are installed with Office.
For example, if we try to Link to a TIF file and there are no OLE Server
applications installed that would display a TIF file, the TIF file won't
display linked in Access because Office does not install the TIF graphics
filter by default.
If we did the same thing using a BMP file, it would display because we
install the BMP, JPG and several other graphics filters by default.
In Office Setup, Add/Remove Features, Converters and Filters, Graphic
Filters, you can see and change which graphics filters are installed.
To see which OLE Server is currently being used by the operating system for
a file type, double click on an image file with the same extension as the
one you are linking to (EG: BMP, JPG), and see what application it opens in.
When we double-click a JPG file, it will often display in Internet
Explorer(IE). IE is not an OLE Server so it is the default JPG graphics
filter that is enabling the JPG file to be displayed as linked in Access.
By the same token, we can't embed a JPG file even though it can be
displayed in both Access as a linked file and in IE.
To embed a and display a JPG file, we would still need an OLE Server. Even
is an OLE Server that supported JPG files was subsequently installed, the
"wrapper" in the Access OLE Object field would be incorrect until we
removed the image from the database and reinstalled the image with a valid
OLE Server available.
For additional information please see article Q158941: How to Load OLE
Objects from a Folder into a Table, available from the internet at:
http://support.microsoft.com/support/kb/articles/q158/9/41.asp
For Access 2000, see the following articles:
Q198466 ACC2000: How to Load OLE Objects from a Folder into a Table at:
http://support.microsoft.com/support/kb/articles/q198/4/66.asp
Q114214: How to Programmatically Embed or Link an Object in a Form,
available from the internet at:
http://support.microsoft.com/support/kb/articles/q114/2/14.asp
Q210100 - ACC2000: How to Display an Image from a Folder in a Form
http://support.microsoft.com/support/kb/articles/q210/1/00.asp
Because Word install most of the Office Graphics Filters, the following
articles may also be of Interest:
Q210396 - OFF2000: Descriptions, Limitations of Shipped Graphics Filters
http://support.microsoft.com/support/kb/articles/q210/3/96.asp
Q212271 - WD2000: Graphics Filters Installed in an "Install Now" Setup
http://support.microsoft.com/support/kb/articles/q212/2/71.asp
Q212265 - WD: Additional Converters/Filters Available in Converter Pack
http://support.microsoft.com/support/kb/articles/q212/2/65.asp
Q235928 - WD2000: Supported File and Graphics Formats
http://support.microsoft.com/support/kb/articles/q235/9/28.asp
I hope this helps! If you have additional questions on this topic, please
reply to this posting.
Regards, Frank Miller
Microsoft Support
This posting is provided “AS IS” with no warranties, and confers no rights.