Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsFormsForms ProgrammingQueriesModules / DAO / VBAReports / PrintingMacrosDatabase DesignSecurityConversionImporting / LinkingSQL Server / ADPMultiuser / NetworkingReplicationSetup / ConfigurationDeveloper ToolkitsActiveX ControlsNew UsersGeneral 1General 2
Access DirectoryToolsTutorialsUser Groups
Related Topics
SQL ServerOther DB ProductsMS OfficeMore Topics ...

MS Access Forum / Forms / August 2007

Tip: Looking for answers? Try searching our database.

Pictures in a form not blanking out if no path is included

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Lila - 31 Jul 2007 00:48 GMT
I am using Access 2002. I have read the very helpful links provided in this
newsgroup, as well as used the Northwind database as my guide
http://support.microsoft.com/Default.aspx?id=148463

In fact, the form I used is based on the Employee form of the Northwind
database, but I added tabs across the top. On the second tab, I have 6
pictures that need to be shown. I have added the OnCurrent Event(s) to the
form, and the AfterUpdate event to the ImagePath(s).

The problem is this... I add the picture to the first record. I change to
the second record. The same picture shows up for the second record, even
though there is no picture defined in the ImagePath. I have hunted through
the events trying to locate an If statement that makes the original Employee
record display nothing in the ImageFrame when there is nothing defined in the
ImagePath, but I can't find it.

Any suggestions? Is it related to the tabs?
Arvin Meyer [MVP] - 31 Jul 2007 01:15 GMT
Unless the picture is changed in the Current event of the form, the picture
will always remain. You need something like this (air code):

Sub Form_Current()
   If Len(Me.txtPath & vbNullString) > 0
       Me.ImageControlName.Picture = Me.txtPath
   Else
       Me.ImageControlName.Picture = C:\Folder\Blank.jpg
End Sub

where Blank.jpg is a blank image or a default (I use one that says "No
Image") for instances where there is no path stored.
Signature

Arvin Meyer, MCP, MVP
http://www.datastrat.com
http://www.mvps.org/access
http://www.accessmvp.com

>I am using Access 2002. I have read the very helpful links provided in this
> newsgroup, as well as used the Northwind database as my guide
[quoted text clipped - 15 lines]
>
> Any suggestions? Is it related to the tabs?
Lila - 31 Jul 2007 01:26 GMT
I will definately give that a try, but I'm wondering if there is a way to
make it work without being dependant on a file. I noticed in the Northwind
database, they actually turned the image off by using:

hideImageFrame

If we could do that, would the following work?

Sub Form_Current()
   If Len(Me.txtPath & vbNullString) > 0
       Me.ImageControlName.Picture = Me.txtPath
   Else
       hideImageFrame
End Sub

> Unless the picture is changed in the Current event of the form, the picture
> will always remain. You need something like this (air code):
[quoted text clipped - 8 lines]
> where Blank.jpg is a blank image or a default (I use one that says "No
> Image") for instances where there is no path stored.
Arvin Meyer [MVP] - 31 Jul 2007 16:13 GMT
Sure, that will work. What it does is to hide the Image control if there's
no image. Speaking from a user friendly standpoint, I think I'd rather know
that there was no picture than to wonder what happened to the image control.
You're the developer though, so it's your call.
Signature

Arvin Meyer, MCP, MVP
http://www.datastrat.com
http://www.mvps.org/access
http://www.accessmvp.com

>I will definately give that a try, but I'm wondering if there is a way to
> make it work without being dependant on a file. I noticed in the Northwind
[quoted text clipped - 24 lines]
>> where Blank.jpg is a blank image or a default (I use one that says "No
>> Image") for instances where there is no path stored.
Rob Parker - 31 Jul 2007 01:22 GMT
Hi Lila,

If you are using the code from the Northwind Employees form in your
OnCurrent event, this should not be happening.  The Northwind example hides
the image frame if there is no picture (via a call to Sub
hideImageFrame() ).  Did you include this in your code?

If that's not the problem, please post the code from your Sub Form_Current()

Rob

>I am using Access 2002. I have read the very helpful links provided in this
> newsgroup, as well as used the Northwind database as my guide
[quoted text clipped - 15 lines]
>
> Any suggestions? Is it related to the tabs?
Lila - 31 Jul 2007 01:32 GMT
Actually, the picture on the first tab works just fine. It's the 6 additional
pictures on the second tab that are having the problems. For those I added
the code indicated in the following link:

http://support.microsoft.com/Default.aspx?id=148463

The code is as follows. Note that the first section is straight from
Northwind and is fine. The last 6 are as noted in above link.

Private Sub Form_Current()
   ' Display the picture for the current record if the image
   ' exists.  If the file name no longer exists or the file name was blank
   ' for the current record, set the errormsg label caption to the
   ' appropriate message.
   Dim res As Boolean
   Dim fName As String
   
   path = CurrentProject.path
   On Error Resume Next
       errormsg.Visible = False
       If Not IsNull(Me!Photo) Then
           res = IsRelative(Me!Photo)
           fName = Me![ImagePath]
           If (res = True) Then
               fName = path & "\" & fName
           End If
           
           Me![ImageFrame].Picture = fName
           showImageFrame
           Me.PaintPalette = Me![ImageFrame].ObjectPalette
           If (Me![ImageFrame].Picture <> fName) Then
               hideImageFrame
               errormsg.Caption = "Picture not found"
               errormsg.Visible = True
           End If
       Else
           hideImageFrame
           errormsg.Caption = "Click Add/Change to add picture"
           errormsg.Visible = True
       End If
   On Error Resume Next
        Me![fabric1photoframe].Picture = Me![Fabric1Photo]
   On Error Resume Next
        Me![fabric2photoframe].Picture = Me![Fabric2Photo]
   On Error Resume Next
        Me![fabric3photoframe].Picture = Me![Fabric3Photo]
   On Error Resume Next
        Me![EdgeTrim Picture Frame].Picture = Me![EdgeTrim Picture Path]
   On Error Resume Next
        Me![FrameFinishFrame].Picture = Me![FrameFinishPicturePath]
   On Error Resume Next
        Me![HardSurfaceFrame].Picture = Me![HardSurfacePicturePath]

End Sub
Rob Parker - 31 Jul 2007 03:20 GMT
Lila,

You are not testing whether any of the other 6 pictures are missing, and
setting their frame states accordingly.  You need to repeat the
   If Not Isnull (Me!Photo) Then
       ...
   End If
statements for each of your additional 6 picture fields, substituting the
appropriate field names and control names in each section of code.

You'll also need to either pass the control name to the showImageFrame and
hideImageFrame subroutines, or (probably easier) simply set the visible
property of each image frame control in the code in each If statement.
Using the second option, here's a sample of what each If  ... End If section
will look like, using generic field/control names:

 If Not IsNull(Me!NameOfPhotoField) Then
   NameOfErrormsgControl.Visible = False
   res = IsRelative(Me!NameOfPhotoField)
   fName = Me![NameOfImagePathField]
   If (res = True) Then
     fName = path & "\" & fName
   End If

   Me![NameOfImageFrameControl].Picture = fName
   Me![NameOfImageFrameControl].Visible = True
   Me.PaintPalette = Me![NameOfImageFrameControl].ObjectPalette
   If (Me![NameOfImageFrameControl].Picture <> fName) Then
     Me![NameOfImageFrameControl].Visible = False
     NameOfErrormsgControl.Caption = "Picture not found"
     NameOfErrormsgControl.Visible = True
   End If
 Else
     Me![NameOfImageFrameControl].Visible = False
   NameOfErrormsgControl.Caption = "Click Add/Change to add picture"
   NameOfErrormsgControl.Visible = True
 End If

Also, a single On Error Resume Next statement (at/near the top of the Sub -
the current position is fine) is all that is needed (unless you change the
error handling).  The statement (which stays in effect until a different On
Error Resume statement is encountered) simply says, in effect "if there's
any error when this code runs, ignore it and continue at the next line".
You might like to comment it out while you're changing your code, since it
will hide any errors that you might produce ;-)

I notice in your reply to Arvin's answer that you ask about not using a
file.  The "file" is the pathname/filename of the picture that you are
using, stored in the NameOfPhotoField in your underlying table.  You do need
it, in some fashion.  Whether you need the particular code that's in the
Northwind example will depend on exactly what you are storing for each
picture; the code shown (which I haven't changed) will use the picture field
entry as an absolute pathname if it finds a drive designator or UNC path
designator in the picture field, otherwise it assumes that the picture
fields are defined relative to the folder of the database itself.

HTH,

Rob

> Actually, the picture on the first tab works just fine. It's the 6
> additional
[quoted text clipped - 51 lines]
>
> End Sub
Lila - 31 Jul 2007 03:46 GMT
Thank you for taking the time to reply. I will try this out at the office
tomorrow. I was hoping for just a few lines for each picture (like... if the
file name is null, hide the frame), but I guess it's necessary to do all of
the testing.

The file I was trying to avoid in the other post was hard coding a "none"
file. I'd hate to hard code a filename in the code. It would so easily break
everything if it was moved or deleted.

Lila

> Lila,
>
[quoted text clipped - 5 lines]
> statements for each of your additional 6 picture fields, substituting the
> appropriate field names and control names in each section of code.
Rob Parker - 31 Jul 2007 05:13 GMT
Exactly how much code you need depends on exactly what your data looks like,
and whether you are wanting to display the "missing" message as in the
Northwind sample.  For example, if your picture field has the full
path/filename for the picture, and you don't want any message displayed (are
happy with a blank space on your form), you could get away with something as
simple as this for each image control:

 If Not IsNull(Me.NameOfPhotoField) Then
   Me.NameOfImageFrameControl.Picture = Me.NameOfImagePathField
   Me.NameOfImageFrameControl.Visible = True
 Else
     Me.NameOfImageFrameControl.Visible = False
 End If

Note that if any of your field or object names contain spaces, you will need
square brackets around them.  Note also that in this code I'm using all
dots, rather than a mixture of dots and bangs.  In general, they are
interchangeable, and if you use dots you get intellisense while entering
code.  My personal practice is to use dots everywhere except when referring
to recordset fields, when the ! is required.  If you want to learn more
about that, search on the forms.coding group - there's regular discussion of
the topic.

Again, HTH,

Rob

> Thank you for taking the time to reply. I will try this out at the office
> tomorrow. I was hoping for just a few lines for each picture (like... if
[quoted text clipped - 19 lines]
>> statements for each of your additional 6 picture fields, substituting the
>> appropriate field names and control names in each section of code.
Lila - 31 Jul 2007 19:48 GMT
I'm kind of new to this coding thing and I'm wondering if Me.NameOfPhotoField
is different from Me.NameOfImagePathField. In my table, I only have

a) a place to type in the name/description of the finish (i.e. Frame Finish)
that the user inputs

b) a place to store the image path (i.e. FrameFinishPicturePath) that the
user does not directly input (is changed with the code)

c) an image frame (i.e. FrameFinishFrame)

Thanks for the square bracket explaination. I'm wondering why do some use
"!" and some use a "." For example

Me![fabric2photoframe] as opposed to
Me.fabric1photoframe

Lila

>   If Not IsNull(Me.NameOfPhotoField) Then
>     Me.NameOfImageFrameControl.Picture = Me.NameOfImagePathField
>     Me.NameOfImageFrameControl.Visible = True
>   Else
>       Me.NameOfImageFrameControl.Visible = False
>   End If
Lila - 31 Jul 2007 20:10 GMT
My guess seemed to be right. It works great! Thanks a million!!!

        If Not IsNull(Me.[Fabric1Photo]) Then
           Me.[fabric1photoframe].Picture = Me.[Fabric1Photo]
           Me.[fabric1photoframe].Visible = True
       Else
           Me.[fabric1photoframe].Visible = False
       End If

Now if we can just get rid of that infernal file reload dialogue box that
crashes everything if you scroll through the items too quickly... Oh well!
Thanks again!

> I'm kind of new to this coding thing and I'm wondering if Me.NameOfPhotoField
> is different from Me.NameOfImagePathField. In my table, I only have
[quoted text clipped - 21 lines]
> >       Me.NameOfImageFrameControl.Visible = False
> >   End If
Rob Parker - 01 Aug 2007 00:13 GMT
Hi Lila,

Standard problem, standard solution ;-)

You need to modify some registry keys to prevent this.  The details are
available at
http://www.mvps.org/access/downloads/Set_ShowProgressDialog_To_No.reg

The easy way to incorporate these is this:  Cut/paste to a text file (I used
Notepad), and save as a .reg file.  Then all you need do is double-click the
file, or right-click and choose "Merge", to merge the entries into your
registry.   For a 19kb file of entries, that's certainly faster than
entering them all manually ;-)

Note: there are more entries here than are actually needed to solve the
problem, but it's so easy to import the lot that it's not worth figuring out
exactly which ones you need (and, in my case, at one time some of the others
had been corrupted and I had a very weird problem - re-importing all the
keys cured it).

Glad to have helped so far, and HTH again,

Rob

<snip>

> Now if we can just get rid of that infernal file reload dialogue box that
> crashes everything if you scroll through the items too quickly... Oh well!
> Thanks again!

<snip>
Lila - 01 Aug 2007 18:32 GMT
That worked great! Thanks!

> Hi Lila,
>
[quoted text clipped - 19 lines]
>
> Rob
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.