Hallo liebe Leute,
ich hab' ein Problem. Möglicherweise kann mir jemand helfen.
Ich benutze Access 2010.
In einem Formular lasse ich Bilder anzeigen die woanders gespeichert sind. Ich habe ein normales Bild-Steuerelement eingebaut und lasse ein Bild für jeden Datensatz anzeigen.
Die Datensätze wähle ich mit einem Listenfeld aus, worauf das
entsprechende Bild angezeigt wird. Es funzt gut aber das Bild des ersten Datensatzes in dem Listenfeld wird einfach nicht angezeigt.
Ich habe die Datensätze geändert aber immer ist es der erste Datensatz bei dem das Bild nicht angezeigt wird.
Die Bildanzeige steuere ich in VBA bei den Ereignissen "Beim Öffnen" und "Bei der Anzeige" mit folgendem Code:
Dim strPfad As String
If Not IsNull(Me!xyz_ID) Then
strPfad = "C:/Bilder/xyz/" & Me!xyz_ID & ".jpg"
If Dir(strPfad) <> (vbNullString) Then
Me!Foto.Picture = strPfad
Me!Foto.Visible = True
Else
Me!Foto.Visible = False
End If
End If
Hat jemand eine Lösung ?
Gruß Peter
Hallo,
"Die Datensätze wähle ich mit einem Listenfeld aus,"
WIE machst Du das? Heißt das auch, dass Du damit das Formular filterst und auch andere Felder aus der dahinter liegenden Tabelle anzeigst?
Vermutlich ist das Ereignis "Form_Open" nicht das richtige, benutz das "Form_Load" anstelle.
Hallo Franz,
ja ich wähle den gesamten Datensatz mit dem Listenfeld. In den Datensätzen befinden sich noch eine ganze Menge Textfelder.
Und ich habe natürlich das "Form_Load"-Ereignis benutzt.
und nicht "Form_Open".
Habe das nur hier falsch geschrieben.
Funzt trotzdem nicht.
????
Hallo,
Du hast meine Frage nicht beantwortet: WIE wählst Du aus??
Mit einem Listenfeld das auf einer sql-Abfrage beruht in dem nach einem Textfeld alphabethisch sortiert und die Datensätze nach einer check-Box gefiltert (ja) wird.
Hallo,
und die Datensätze nach einer check-Box gefiltert (ja) "
versteh ich nicht...
und es keine Beschreibung WIE (VBA-Code, Makro, oder was) gefiltert wird
SQL:
SELECT tbl_Bonsai_Pflanzen.Pflanzen_ID, tbl_Bonsai_Pflanzen.Pflanzenname_dt, tbl_Bonsai_Pflanzen.Indoor
FROM tbl_Bonsai_Pflanzen
WHERE (((tbl_Bonsai_Pflanzen.Indoor)=Yes))
ORDER BY tbl_Bonsai_Pflanzen.Pflanzenname_dt;
Hallo,
bin nicht sicher, ob es mit Yes geht. Versuche es mal mit True.
SELECT Pflanzen_ID, Pflanzenname_dt, Indoor
FROM tbl_Bonsai_Pflanzen
WHERE Indoor=True
ORDER BY Pflanzenname_dt
Hallo,
wenn das der SQL-String für die Datensatzherkunft des Listenfeldes ist und die Datensätze richtig angezeigt werden, bleibt immer noch die Frage offen, WIE (durch welchen Code, Makro, oder auch Abfrage-Parameter) das Formular denn nun gefiltert wird. ::)
Zur Ausgangslage: Wenn das Bild beim Klick auf den ersten Listenfeldeintrages nicht angezeigt wird, könnte(!) es sein, dass der erste Listenfeldeintrag bereits den Fokus hat und nicht mehr auf einen Mausklick reagiert und dadurch das Form auch nicht gefiltert , bzw. aktualisiert (????) wird.
Das Formular wird gefiltert durch ein eingebettetes Makro.
Beim Öffnen des Formulars wird der richtige (erste) Datensatz und das dazugehörige Bild angezeigt.
Wenn ich dann einen anderen als den ersten Listeneintrag anklicke, dann wird der richtige Datensatz und das richtige Bild angezeigt. Danach klicke ich wieder auf den ersten Eintrag, dann wird der richtige Datensatz aber das falsche Bild angezeigt. Also kann das mit dem Fokus nicht sein.
Merkwürdig.
Hallo,
was denn jetzt: wird das FALSCHE Bild angezeigt
oder wird KEIN Bild angezeigt???
WIE lautet denn nun dieses Makro und zudem, WIE lautet die Datenherkunft des Forms?
Unendliche Fragen....
Wenn das FALSCHE Bild angezeigt wird, dann setz mal einen Haltepunkt an die Zeile
<<edit>
strPfad = "C:\Bilder\xyz\" & Me!xyz_ID & ".jpg"
<</edit>>
und prüfe den Inhalt von Me!xyz_ID , ob der auch dem erwarteten ID-Wert entspricht.
Anschliessend öffnest Du die diesem ID-Wert entspr. Datei über den Windowsexplorer und prüfst, ob darin wirklich das richtige Bild steckt....
Jetzt hab ich die Lösung gefunden.
Wenn man in Access 2010 ein Listenfeld zur Datensatzauswahl einbaut, dann erstellt Access ein "eingebettetes Makro" automatisch.
Dieses Makro funktioniert einfach nicht richtig.
Ich habe jetzt dieses Makro gelöscht und eine konventionelle Prozedur in VBA geschrieben:
----------------------------------
On Error GoTo MyError
'Den mit dem Steuerelement übereinstimmenden Datensatz suchen.
Dim rs As Object
Set rs = Me.Recordset.Clone
rs.FindFirst "[Pflanzen_ID] = " & (Nz(Me![lst_Suchen_dt], 0))
If Not rs.EOF Then Me.Bookmark = rs.Bookmark
'Suchfeld leeren:
Me!lst_Suchen_dt = 0
MyExit:
Exit Sub
MyError:
MsgBox Err.Description
Resume MyExit
----------------------------------
Jetzt funzt alles !!
Danke für die Bemühungen.
Hallo!
Ich wür des ungefär so lössen
gruß Frank
Public Function akt_Verz_Pflanze() As String
akt_Verz_Pflanze = CurrentProject.Path & "\Pflanze\"
End Function
Public Function akt_Verz_KeinBild() As String
akt_Verz_KeinBild = CurrentProject.Path & "\Pflanze\KeinBild.jpg"
End Function
Private Sub Bild()
Dim lItem As Long
Dim itemSelected As Boolean
On Error GoTo Bild_Error
itemSelected = False
For lItem = 0 To Me!lst_Suchen_dt.ListCount - 1
If Me!lst_Suchen_dt.Selected(lItem) = True Then
itemSelected = True
Exit For
End If
Next
Select Case itemSelected
Case True
Me.Recordset.FindFirst "[Pflanzen_ID] = " & Me!lst_Suchen_dt '.Column(0)
Select Case Len(Dir(akt_Verz_Pflanze & "Bildname.jpg"))
Case 0
Me!Foto.Picture = akt_Verz_KeinBild
MsgBox "Möchten Sie ein Bild anlegen?"
Case Else
Me!Foto.Picture = akt_Verz_Pflanze & "Bildname.jpg"
End Select
Case False
MsgBox "es wurde keine auswahlgetroffen!"
End Select
On Error GoTo 0
Exit Sub
Bild_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure Bild of Modul Modul1"
End Sub