Plaatjes in een Access report

Status
Niet open voor verdere reacties.

kiter25

Gebruiker
Lid geworden
29 nov 2011
Berichten
21
Hallo,

Ik wil graag plaatjes in een rapport Access report plaatsen, en wel op een ingewikkelde manier. Wat ik voorheen deed, is de plaatjes in het rapportontwerp naar een placeholder.jpg laten verwijzen, en vlak voor het compileren van het rapport de placeholders in visual basic code veranderen in de juiste *.jpg. Nu heb ik echter reports gebouwd die herhalende stukken bevatten ("in details"), maar dan werkt deze aanpak niet meer. Hebben jullie tips?
De plaatjes zelf staan in een map, bv "horecaplaatjes" en en bestandnamen zijn: horeca1.jpg horeca2.jpg etc.

Dank alvast! Groetjes Rudolf
 
Wat bedoel je met 'herhalende stukken'?
 
Dank voor je reactie! Heel fijn. "Met herhalende stukken" bedoel ik dat de recordsource van "details" meerdere rijen bevat, zodat het "details" stuk ook meerdere keren wordt herhaald (is ook de bedoeling). In het eindrapport zie je dan dat de "details" sectie, meerdere malen wordt geplaatst.
 
Je hebt de velden dus één keer in de detailsectie staan, neem ik aan?
 
Da's nog steeds niet heel erg ingewikkeld dan, alleen moet je de vba code die je eerst gebruikte bij de gebeurtenis <Bij opmaken> van de detailsectie neerzetten. Of had je dat al geprobeerd?
 
Nee, dat had ik nog niet geprobeerd. Al met al wordt het dan wel een heeeel omslachtige oplossing, omdat ik die code ook voor plaatjes die niet in de detail sectie staan, wil uitvoeren. Kan ik niet de plaatjes laten verwijzen naar een veld in de recordset? dan moet ik alleen nog ergens het pad ervoor klussen, want de velden bevatten nu waarden als "horeca1.jpg" enzo.
 
Plaatjes die niet in de detailsectie staan gaan meestal wel goed. Want die staan maar één keer op je rapport. Daar kun je dus rechtstreeks naar verwijzen.
 
okee, maar waar geef ik dan op naar welk plaatje het moet verwijzen? Is dat bij "besturingselementbron"? En hoe kan ik hier een string aan toevoegen? Dit moet ik doen om het totale pad te krijgen. Kan ik zoiets doen als:

"//server/db/images/" & catering.image

(eigenlijk wil ik het pad ook ophalen uit de database, dus zoiets als: settings.path & "/" & catering.image maar dit zou wel niet werken?

Dank Octafish, je hebt mij al een paar keer heeeel fijn geholpen!
 
Laatst bewerkt:
Als je een tekstveld op je rapport zet kun je met een gebeurtenis een afbeelding laden met het bijbehorende plaatje. Bijvoorbeeld zo:

Tekstveld met pad naar plaatje: txtImageName
Imageframe met afbeelding: ImageFrame
En de code voor de detailsectie:
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)
    setImagePath
End Sub

En de functie die het plaatje vult:
Code:
Function setImagePath()
    Dim strImagePath As String
    On Error GoTo PictureNotAvailable
    strImagePath = Me.txtImageName
    Me.ImageFrame.Picture = strImagePath
    Exit Function

PictureNotAvailable:
  strImagePath = ""
  Me.ImageFrame.Picture = ""

  End Function
 
Dat ga ik zeker eens zo proberen! En in plaats van dat tekstveld, kan niet gewoon direct verwijzen naar de recourdsource?

dus meer in de zin van:

Code:
 Me.ImageFrame.Picture = rs!catering.image

waarbij rs!catering.image dat deel uit de recordsource is waarin de pad van het plaatje staat.
 
Zou ik niet doen, en is ook niet nodig. Je verwijzing naar het plaatje staat in je tabel, en het veld is dus bekend in het record. Wil je het met een recordset doen, dan moet je die eerst definiëren, vervolgens openen met het specifieke record dat actief is, en daarna het plaatje toewijzen. Als je naar de buurman moet, pak je toch ook niet de auto en ga je via het werk? Wat meestal wel gedaan wordt, is het tekstveld met de padverwijzing verbergen, want je wilt uiteraard het plaatje zien, en niet die tekst.
 
Michel, ik heb toch het idee dat we langs elkaar praten (zal wel aan mij liggen ;) ) De recordset heb ik al gedefinieerd, bij het laden van de code, als volgt:
Code:
Private Sub Report_Open(Cancel As Integer)
    If IsNull(OpenArgs) = True Then
        MsgBox "Fout: geen ID meegegeven."
'        DoCmd.Close
        Exit Sub
    End If
    arg_id_string = OpenArgs
    Me.Printer.ColorMode = acPRCMColor
    Me.RecordSource = "SELECT * FROM  (((([order] " & _
    "LEFT JOIN cateringorder ON cateringorder.orderID = order.orderID) " & _
    "LEFT JOIN catering ON cateringorder.cateringID = catering.cateringID) " & _
    "LEFT JOIN event ON event.eventID=order.eventID) LEFT JOIN customer ON customer.customerID=order.customerID )" & _
    "LEFT JOIN invoice ON [order].orderID = invoice.orderID WHERE [order].orderID = " & arg_id_string

End Sub

De inhoud van het veld catering.image is de naam van een plaatje. bv. "bbq.jpg".
In het rapport zelf wil ik nu na rechtermuisklik op een afbeelding, in het "eigenschappenvenster", bij "besturingslemelentbron", iets zetten als
Code:
 ="c:\plaatjes\" & catering.image
maar dit werkt niet. Het zou zo toch moeten kunnen? De reden dat ik het graag visueel doe, is dat het in veel andere reporten ook gedaan moet worden. Thnx!!!
 
Laatst bewerkt:
Als het allemaal zo ingewikkeld gedaan wordt, dan is een (werkend, dus met records) voorbeeld een stuk handiger.... Ik sta niet te popelen om dit verhaal na te gaan bouwen ;)
 
Michel, dat is voor mij heeeeeel lastig, om dat het een grote bestand is. Het is lastig om het helemaal uit te kleden en dan nog een werkend geheel over te houden. De vraag is eigenlijk plat te slaan tot de volgende:
Bij het openen van een rapport wordt een recourdsource ingeladen in de Report_Open routine. In de recordsource staat een veld "catering.image" met de naam van een plaatje, bv "bbq.jpg". Wat moet ik nu opgeven bij de "besturingselemelentbron"?

Ik dacht zoiets als
Code:
 ="c:\plaatjes\" & catering.image

Dit toch duidelijk?
 
Waarom heb je de RecordSource niet via Recordbron gekoppeld? Dan kun je het imageveld koppelen aan het juiste veld, en ben je volgens mij gelijk (of bijna) klaar...
 
Klinkt goed...wat zou dan de syntax moeten zijn? Heb al een aantal dingen geprobeerd...moet ik dan opgeven:
Code:
 ="c:\plaatjes\"& catering.image
? Ik moet nl. een string erin plakken ivm de directory.
 
Normaal gesproken sla je de locatie en naam van de plaatjes op in een tekstveld; je koppelt de image holder dan aan dat veld.
 
Okee!! Dan ben ik er helemaal uit! Ik hoopte dat er een mooiere manier was! Ik dacht dat het niet echt consistent programmeren zou zijn door een tekstveld in te bouwen. Maar in ieder geval bedankt, Michel!!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan