Foto weergeven in Rapport Access 2003

Status
Niet open voor verdere reacties.

HuubBakker

Gebruiker
Lid geworden
28 dec 2008
Berichten
31
Ik heb een Access 2003 database waarin foto's zijn opgenomen. In de formulieren zijn de fotovelden gekoppeld aan een txtveld AfbeeldingPadnaam. In dit veld staat het pad en de fotonaam.
In het rapport krijg ik het fotoveld niet gekoppeld aan het txtveld AfbeeldingPadnaam. Heeft iemand hier een oplossing voor. Bvd Huub
 
Ik snap eerlijk gezegd niet wat je probleem is; een afbeelding aan een (tekst)veld koppelen gaat in een formulier op exact dezelfde manier als in een rapport. Sterker nog: het maakt niet uit of je een tabelveld koppelt aan een tekstveld of aan een afbeelding. Dus ik vermoed dat je eigenlijk een andere vraag wilt stellen. De vraag is dan: welke?
 
Halo OctaFish, bedankt voor je reactie. In de bijlage een fotovoorbeeld van mijn probleem.
In mijn formulieren staat in de ontwerpweergave bij de regel Afbeelding (Geen) en wordt het pad gelezen uit het veld "Afb_3X01_Padnaam". Zodoende wordt voor elk record in het formulier de juiste foto getoond.
In mijn (nieuw)Rapport staat in de regel Afbeelding het padnaam naar de foto. Hier moet ook het pad uit het veld "Afb_3X01_Padnaam" gelezen worden anders geeft ieder record dezelfde foto.
 

Bijlagen

  • Voorbeeld Fotoveld.jpg
    Voorbeeld Fotoveld.jpg
    210,5 KB · Weergaven: 101
Zoals ik al zei: de techniek is exact hetzelfde op een formulier als op een rapport. Een afbeeldingsobject kun je alleen plaatsen als je een foto ophaalt. Die moet je dus daarna gelijk verwijderen. Daarna gebruik je dezelfde code (in de basis; een rapport is natuurlijk geen formulier) om de afbeelding te vullen. Dus hoe ziet je formuliercode er uit?
 
In het Formulier staat de onderstaande code en die werkt prima. De code komt uit een andere database en heb ik wat aangepast. In het rapport staat nog geen code. Ik ben niet zo goed met VBA en loop hierbij dus vast.

Code:
Private Sub Form_Current()
'Toon juiste afbeelding bij openen Formulier
    On Error GoTo Fout
    'toon afbeelding
    If Not IsNull(Me.Afb_3X01_Padnaam) And Len(Me.Afb_3X01_Padnaam) > 0 Then
        'er is een bestandsnaam opgegeven; controleer of het bestand ook bestaat
        If fIsFileDIR(Me.Afb_3X01_Padnaam) Then
            'bestand bestaat, dus tonen
            'er kunnen problemen voorkomen als grote afbeeldingen geladen worden en er
            'tegelijkertijd al verder genavigeerd wordt. Daarom worden de navigatiebuttons
            'tijdelijk verborgen.
            'Navigatie blijft dan nog wel mogelijk via sneltoetsen en bv scrollen.
            'Gebruik daarom zo klein mogelijke afbeeldingen!
            'Me.NavigationButtons = False
            Me.Afbeelding_3X01.Picture = Me.Afb_3X01_Padnaam
            'Me.NavigationButtons = True  'Uitgeschakeld door DA
            ' Me.NavigationButtons = False 'Toegevoegd door DA
            Me.LblStatus_Afbeelding_3X01.Caption = ""   'geen melding
        Else
            'bestand bestaat niet; eventuele afbeelding verwijderen
            'en (ter illustratie)melding tonen
            If Len(Me.Afbeelding_3X01.Picture) > 0 And LCase(Me.Afbeelding_3X01.Picture) <> "(geen)" Then
                Me.Afbeelding_3X01.Picture = ""
            End If
            Me.LblStatus_Afbeelding_3X01.Caption = "Kan bestand (" & Me.Afb_3X01_Padnaam & ") niet vinden." & vbCrLf _
                                                & "" & vbCrLf _
                                                & "De opgegeven afbeelding is mogelijk van de harde schijf verwijderd." & vbCrLf _
                                                & "Kies een nieuwe afbeelding."
        End If
    Else
        'geen afbeelding opgegeven; eventuele afbeelding verwijderen
        'en (ter illustratie) melding tonen
        If Len(Me.Afbeelding_3X01.Picture) > 0 And LCase(Me.Afbeelding_3X01.Picture) <> "(geen)" Then
            Me.Afbeelding_3X01.Picture = ""
        End If
        Me.LblStatus_Afbeelding_3X01.Caption = "Geen afbeelding opgegeven."
    End If
    'Afbeelding2
  If Not IsNull(Me.Afb_3X01_Padnaam) And Len(Me.Afb_3X01_Padnaam) > 0 Then
        'er is een bestandsnaam opgegeven; controleer of het bestand ook bestaat
        If fIsFileDIR(Me.Afb_3X01_Padnaam) Then
            'bestand bestaat, dus tonen
            'er kunnen problemen voorkomen als grote afbeeldingen geladen worden en er
            'tegelijkertijd al verder genavigeerd wordt. Daarom worden de navigatiebuttons
            'tijdelijk verborgen.
            'Navigatie blijft dan nog wel mogelijk via sneltoetsen en bv scrollen.
            'Gebruik daarom zo klein mogelijke afbeeldingen!
            Me.NavigationButtons = False
            Me.Afbeelding_3X01.Picture = Me.Afb_3X01_Padnaam
            'Me.NavigationButtons = True  'Uitgeschakeld door DA
            ' Me.NavigationButtons = False 'Toegevoegd door DA
            Me.LblStatus_Afbeelding_3X01.Caption = ""   'geen melding
        Else
            'bestand bestaat niet; eventuele afbeelding verwijderen
            'en (ter illustratie)melding tonen
            If Len(Me.Afbeelding_3X01.Picture) > 0 And LCase(Me.Afbeelding_3X01.Picture) <> "(geen)" Then
                Me.Afbeelding_3X01.Picture = ""
            End If
            Me.LblStatus_Afbeelding_3X01.Caption = "Kan bestand (" & Me.Afb_3X01_Padnaam & ") niet vinden." & vbCrLf _
                                                & "" & vbCrLf _
                                                & "De opgegeven afbeelding is mogelijk van de harde schijf verwijderd." & vbCrLf _
                                                & "Kies een nieuwe afbeelding."
        End If
    Else
        'geen afbeelding opgegeven; eventuele afbeelding verwijderen
        'en (ter illustratie) melding tonen
        If Len(Me.Afbeelding_3X01.Picture) > 0 And LCase(Me.Afbeelding_3X01.Picture) <> "(geen)" Then
            Me.Afbeelding_3X01.Picture = ""
        End If
        Me.LblStatus_Afbeelding_3X01.Caption = "Geen afbeelding opgegeven."
    End If
Einde:
    Exit Sub
Fout:
    MsgBox "Fout " & Err.Number & ": " & Err.Description & vbCrLf & vbCrLf _
         & "Plaats: Form_Current", vbOKOnly + vbExclamation, "Foutje..."
   'If Me.NavigationButtons = False Then
   '     Me.NavigationButtons = True
   ' End If
    Resume Einde

End Sub
 
Laatst bewerkt:
Doe ons een lol en maak de code op met de CODE tag; dat zou je na 11 jaar HelpMij moeten weten :).
 
En, tenzij ik mij heel sterk vergis, doe je ook nog eens twee keer ongeveer dezelfde vergelijking met acties:

Code:
Actie 1:
    If Not IsNull(Me.Afb_3X01_Padnaam) And Len(Me.Afb_3X01_Padnaam) > 0 Then
Actie 2:
    If Not IsNull(Me.Afb_3X01_Padnaam) And Len(Me.Afb_3X01_Padnaam) > 0 Then
Wat ook nog eens m.i. een stuk makkelijker kan, maar dit terzijde.
 
Bedankt OctaFish... bericht aangepast. Zoals ik al schreef VBA is niet mijn sterkste kant. Ik zie die acties ook, maar krijg de code zoals die nu staat niet gestroomlijnd. Dus die code herschrijven/aanpassen voor het rapport is al helemaal een struikelblok.
Een beetje hulp zou ik zeer waarderen.
 
Laatst bewerkt door een moderator:
Maar klopt het dat je twee keer hetzelfde doet? Want dat lijkt mij niet nodig.
 
Dingen dubbel doen is inderdaad niet nodig en kan worden aangepast. De code die ik gepost heb staat in het formulier en daar heb ik op dit moment geen probleem mee.
Het probleem waar ik nu mee zit is dat ik in het rapport niet de afbeelding te zien krijg die in het veld "Afb_3X01_Padnaam" staat. In het rapport moet dus ook een code komen die voor het fotoveld "Afb_3X01" de waarde gebruikt die in het veld "Afb_3X01_Padnaam" staat.
 
Ik gebruik altijd deze routine, en die werkt voor mij prima.

Op het formulier:
Code:
Private Sub Form_Current()
    If Dir(Me.FotoPad & "\" & Me.FotoNaam) <> "" Then
        Me.imgAfbeelding.Picture = Me.FotoPad & "\" & Me.FotoNaam
    Else
        Me.imgAfbeelding.Picture = ""
    End If
End Sub

En op het rapport:
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)
    If Dir(Me.FotoPad & "\" & Me.FotoNaam) <> "" Then
        Me.imgAfbeelding.Picture = Me.FotoPad & "\" & Me.FotoNaam
    Else
        Me.imgAfbeelding.Picture = ""
    End If
End Sub

Zoals je ziet: heel wat korter dan de jouwe. En nooit problemen :)
 
Laatst bewerkt door een moderator:
Of zo ?

Code:
Private Sub Form_Current()
  Me.imgAfbeelding.Picture = ""
  If Dir(Me.FotoPad & "\" & Me.FotoNaam) <> "" Then Me.imgAfbeelding.Picture = Me.FotoPad & "\" & Me.FotoNaam
End Sub
 
@snb: Dan maak je nodeloos een object leeg; ik doe dat in ieder geval nooit.
 
OctaFish... Ik ga hiermee aan de slag. Het zal nu wel lukken, heel erg bedankt voor het meedenken en de code. :d
 
Laatst bewerkt door een moderator:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan