Path en bestandsnaam samenvoegen

  • Onderwerp starter Onderwerp starter fmeca
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

fmeca

Gebruiker
Lid geworden
7 sep 2009
Berichten
95
Hoi mede forummers,

Ik wil foto's in een rapport plaatsen.
Onderstaande code werkt.

Code:
Function setImagePath()
    Dim strImagePath As String  'Locatie van de foto's

    
On Error GoTo PictureNotAvailable
    
    strImagePath = "D:\Foto's K1\" + Vis_LijstFotoA     'Pad en bestandsnaam
    Me.ImageFrame.Picture = strImagePath     
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function

In een database wil ik nu een standaard pad invullen waardoor de foto locatie niet afhankelijk wordt van de VBA-code.
Het volgende heb ik geprobeerd maar werkt niet.

Code:
Function setImagePath()
    Dim strImagePath As String       'Locatie van de foto's
    
On Error GoTo PictureNotAvailable
    
    strImagePath = Vis_LijstPath + Vis_LijstFotoA ' Vis_LijstPath is de fotolocatie = D:\Foto's K1\
    Me.ImageFrame.Picture = strImagePath     
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function
of
Code:
Function setImagePath()
    Dim strImagePath As String  'Locatie van de foto's
    Dim strImageName As String 'Naam van het fotobestand incl. extensie
    
On Error GoTo PictureNotAvailable
    
    strImagePath = Vis_LijstPath
    strImageName = Vis_LijstFotoA
    Me.ImageFrame.Picture = strImagePath + strImageName
    
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function

Waar kan ik mijn beperkte kennis mee uitbreiden?

Vriendelijke groet
Eric
 
Hoi mede forummers,

Ik wil foto's in een rapport plaatsen.
Onderstaande code werkt.

Code:
Function setImagePath()
    Dim strImagePath As String  'Locatie van de foto's

    
On Error GoTo PictureNotAvailable
    
    strImagePath = "D:\Foto's K1\" + Vis_LijstFotoA     'Pad en bestandsnaam
    Me.ImageFrame.Picture = strImagePath     
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function

In een database wil ik nu een standaard pad invullen waardoor de foto locatie niet afhankelijk wordt van de VBA-code.
Het volgende heb ik geprobeerd maar werkt niet.

Code:
Function setImagePath()
    Dim strImagePath As String       'Locatie van de foto's
    
On Error GoTo PictureNotAvailable
    
    strImagePath = Vis_LijstPath + Vis_LijstFotoA ' Vis_LijstPath is de fotolocatie = D:\Foto's K1\
    Me.ImageFrame.Picture = strImagePath     
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function
of
Code:
Function setImagePath()
    Dim strImagePath As String  'Locatie van de foto's
    Dim strImageName As String 'Naam van het fotobestand incl. extensie
    
On Error GoTo PictureNotAvailable
    
    strImagePath = Vis_LijstPath
    strImageName = Vis_LijstFotoA
    Me.ImageFrame.Picture = strImagePath + strImageName
    
Exit Function

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Function

Waar kan ik mijn beperkte kennis mee uitbreiden?

Vriendelijke groet
Eric
Hi,
ik denk het is de sinqle-quote in D:\Foto's K1\ die problemen geeft.
Dat is mijn antwoord, met hieronder een toelichting:

Omdat je het verkeer met de database niet aangeeft is dat niet met zekerheid te zeggen. However, een single-quote en SQL zal problemen geven bij queries. Dan moet je altijd al met " \' " werken of met " '' " om al dat veilig te doen.

Tot slot: concatenatie van strings is beter met de ampersand(&) dan met de "+"-teken.
 
Bedankt voor je reactie;

Je hebt gelijk m.b.t. de single quote.

Deze heb ik verwijderd.
In de bovenste code werkt het nu kompleet.

Echter hier staat het pad in de code, dat is wat ik niet wil.
Het pad of fotolocatie wil ik zelf kunnen bepalen m.b.v. een veld uit de database (Vis_LijstPath, in mijn geval).

In de onderste twee code heb ik geprobeerd echter zonder resultaat.
De quotes heb ik ook uit de fotolocatie verwijderd. (Vis_LijstPath = D:\FotoK1)
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)

    Dim strImagePath As String      'Locatie van de foto's
    Dim strImageName As String      'Naam van het fotobestand incl. extensie
    
On Error GoTo PictureNotAvailable

    Me.ImageFrame.Height = 3600
    strImagePath = Vis_LijstPath & "\" & Vis_LijstFotoA
    Me.ImageFrame.Picture = strImagePath
 Exit Sub

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Sub
 
Bedankt voor je reactie;

Je hebt gelijk m.b.t. de single quote.

Deze heb ik verwijderd.
In de bovenste code werkt het nu kompleet.

Echter hier staat het pad in de code, dat is wat ik niet wil.
Het pad of fotolocatie wil ik zelf kunnen bepalen m.b.v. een veld uit de database (Vis_LijstPath, in mijn geval).

In de onderste twee code heb ik geprobeerd echter zonder resultaat.
De quotes heb ik ook uit de fotolocatie verwijderd. (Vis_LijstPath = D:\FotoK1)
Code:
Private Sub Details_Format(Cancel As Integer, FormatCount As Integer)

    Dim strImagePath As String      'Locatie van de foto's
    Dim strImageName As String      'Naam van het fotobestand incl. extensie
    
On Error GoTo PictureNotAvailable

    Me.ImageFrame.Height = 3600
    strImagePath = Vis_LijstPath & "\" & Vis_LijstFotoA
    Me.ImageFrame.Picture = strImagePath
 Exit Sub

PictureNotAvailable:
    Me.ImageFrame.Height = 0
End Sub

hoe en waar krijgt Vis_LijstPath zijn waarde? (EDIT: LAAT MAAR, VERKEERDE VRAAG)

TWEEDE EDIT: vervolgantwoord

ik ga ervan uit dat jij deze module in jouw database plaatst. En, hoewel ik niet veel met "ingebouwde" modules heb gewerkt valt mij op dat ik nergens een verwijzing naar een tabel zie, wat voor mij aangeeft dat je misschien in de module geen recordset tot je beschikking hebt een om een databaseveld uit te lezen.
Ik denk ook dat je een NULL-waarde ziet als je Vis_LijstPath print.
M.i. moet de volgorde worden:

database connectie maken
recordset maken
veld uitlezen

een meer ervaren access-kenner kan hier misschien wat informatiever over zijn
 
Laatst bewerkt:
Wat is het probleem precies? Je hebt blijkbaar twee velden, één voor het pad, en één voor de bestandsnaam. Die koppel je nu aan elkaar met een backslash, die je overigens ook in de padnaam kunt opnemen, maar dit terzijde.
Het samenvoegen van de twee met het +-teken zou ik zeker niet doen, omdat je pad leeg blijft als één van de twee niet gevuld is. Altijd dus koppelen met &. Ik zou hooguit nog een extra check toepassen op de laatste backslash, want die moet je uiteraard wel hebben.
 
Wat is het probleem precies? Je hebt blijkbaar twee velden, één voor het pad, en één voor de bestandsnaam. Die koppel je nu aan elkaar met een backslash, die je overigens ook in de padnaam kunt opnemen, maar dit terzijde.
Het samenvoegen van de twee met het +-teken zou ik zeker niet doen, omdat je pad leeg blijft als één van de twee niet gevuld is. Altijd dus koppelen met &. Ik zou hooguit nog een extra check toepassen op de laatste backslash, want die moet je uiteraard wel hebben.

Hi Octafish

het samenvoegprobleem hadden we al opgelost. Het resterende probleem is volgens mij dat hij, vermoedelijk databaseveld, Vis_LijstPath niet gevuld krijgt. Zie mijn laatste reactie voor het overige.
 
@C.G.
Je meldt dat er geen tabelverwijzing is in de code. Dat hoeft ook niet, omdat de code is geplaatst op een rapport, waarop de velden ongetwijfeld zijn te vinden. Zo niet, dan gaat het inderdaad niet werken zonder recordset. Maar Eric hoeft dat dus niet te doen. Overigens hoef je geen complete teksten te quoten, want ze staan er netjes boven. Door al het gequoot wordt de draad op het scherm nodeloos lang, en scroll ik mijzelf alsnog een tennisarm ;)

@Eric:
Heb je helemaal geen plaatjes, en zie je ze bijvoorbeeld wel op een formulier?
 
Onderstaande code werkt perfect. Plaatjes zijn zichtbaar op het rapport.
Code:
    strImageNameA = Vis_LijstFotoA
    strImagePath = "D:\Temp\FotoK1\" + strImageNameA
    Me.ImageFrameA.Picture = strImagePath '+ strImageName

Ik wil echter "D:\Temp\FotoK1" vervangen door een variabele 'Vis_LijstPath' die uiteraard ook is opgeslagen in de tabel. In het formulier geef je dan alleen het pad, eenmalig, op en bij betreffende records alleen nog maar het fotobestand.
Volgens mij zou het met onderstaande moeten werken.

Code:
    strImagePath = Vis_LijstPath & "\" & Vis_LijstFotoA
    Me.ImageFrameA.Picture = strImagePath '+ strImageName

Maar helaas. De samenvoeging van pad en bestand is het probleem. (Sorry, City Guy)

En Yes Michel;je hebt gelijk over het toevoegen van de "/". Reden hiervoor is dat je het pad gelijk uit je verkenner kunt Copy & Paste. Hier staat de laatste "/" niet in.
 
Als je een msgbox opvraagt van pad+fotonaaam, wat geeft hij dan?
Dus:
strImagePath = Vis_LijstPath & "\" & Vis_LijstFotoA
msgbox strImagePath
 
Bij de werkende code verschijnt de msgBox met het pad en bestandsnaam.

Bij de samengevoegde code kan hij blijkbaar Vis_LijstPath niet vinden????
Deze staat wel in dezelfde tabel en deze tabel is ook de gegevensdatabase voor dit rapport.
 
En wat geeft: Msgbox Me.Vis_LijstPath.Value ?
 
Hoi Michel,

Hij vindt 'm niet, dus ook geen waarde.
Ik snap het niet meer :(

Ik ga eens proberen met de code die Microsoft opgeeft voor als je de foto map in dezelfde map zet als de de access applicatie. Kijken of dat lukt.
We houden mekaar op de hoogte

Nognmaals bedankt voor de moeite :thumb:

De link naar de MS site:
http://support.microsoft.com/kb/210100/nl
 
Laatst bewerkt:
Het lijkt erop, dat de tabel niet aan je formulier of rapport is gekoppeld. Dat zou ik nog eens controleren.
 
:eek:
Hoi Michel,

Ik heb het volgende gecontroleerd:
- Tabel is gekoppeld

Echter na het pad (= veld Vis_LijstPath) daadwerkelijk in het rapport op te nemen werkt alles perfect.
Het veld met het pad heb ik nu visible = false gezet. O.K.

Wie kan me dat verklaren?

Bedankt voor jullie input. Ik ben geholpen.:thumb:
 
Die verklaring is wel simpel: je formulier/rapport gebruikt de data die op het formulier of rapport staat. Een veld dat wel in de tabel staat, maar niet op het rapport kun je dus niet gebruiken. Inderdaad is onzichtbaar maken de meest gebruikte truc.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan