Afbeeldingen in formulieren Access 2013 laden soms niet

Status
Niet open voor verdere reacties.

Lacaes

Gebruiker
Lid geworden
20 apr 2013
Berichten
35
Ik heb een database waarbij ik in de formulieren ook afbeeldingen gebruik. Deze afbeeldingen zijn afkomstig uit een aparte map Images die in dezelfde map staat als de database zelf. In Access 2010 werkte alles prima, maar nu ik naar Access 2013 ben overgegaan, worden de afbeeldingen niet meer geladen in de formulieren. Het probleem doet zich alleen voor als ik de database open via de lijst Recent in Access 2013, of direct vanuit de verkenner, of via een snelkoppeling op het bureaublad. Ik heb het probleem niet als ik Access 2013 opstart, vervolgens kies voor de optie "andere bestanden openen" en dan via "Openen", "Computer" en "Bladeren" de database open. Dan werkt alles nog als vanouds. Ik vind de laatste manier van werken echter vrij omslachtig. Het liefst druk ik natuurlijk op 1 knop om de database te openen en ga ik niet elke keer een heel menu door.

Vraag: Weet iemand hoe dit komt? Mis ik iets, is het een bepaalde instelling in Access 213 of gewoon een bug. Ik gebruik Windows 7.

Eric
 
Mijn database weer uitgeprobeerd onder Access 2010 en daar doet hetzelfde probleem zich nu ook voor. Ik begrijp het niet meer. Mogelijk dat het iets te maken heeft met het relatieve pad dat ik gebruik om bij de afbeeldingen te komen. Als ik het volledige pad gebruik van de afbeeldingen, doet het probleem zich niet voor, maar dat lijkt me weer onhandig mocht ik de database ooit willen verplaatsen.
 
Dan lijkt het mij dat er ergens iets niet jofel zit in de procedures die je gebruikt. Wellicht gebruik je een macro die niet helemaal juist is. Overigens zou een eerder geopende db natuurlijk gewoon in je lijst met Recente bestanden moeten staan, en van daaruit met de gewenste éénklik te openen moeten zijn... Ik zou zeggen: voorbeeldje!
 
Ik heb mijn database weer werkend gekregen door het volledige pad van de afbeeldingen op te nemen in de afbeeldingentabel. Ik kan de database nu ook weer openen vanuit het menu, vanuit snelkoppelingen, lijsten etc. en alles werkt. Ik dacht dat het mogelijk was om een verkort pad op te nemen als de map met afbeeldingen in dezelfde map staat als de database zelf, maar blijkbaar is dat niet zo of ik doe het verkeerd?

Er is wel een ander punt waar ik tegenaan loop en dat ik niet kan oplossen ondanks van alles geprobeerd te hebben. Het heeft ook met het laden van afbeeldingen in formulieren te maken en omdat mijn database nu nog niet zo groot is zou ik het het liefst aanpassen.

Ik heb nu een tabel Afbeeldingen(Images) met twee velden. Een indexveld met het volledige pad naar de afbeelding (ImageID) en een veld met de naam van de afbeelding (ImageName). Het lijkt mij echter veel logischer dat het veld ImageName het indexveld wordt en dat de waarde van dit veld ook wordt opgeslagen in de gerelateerde hoofdtabel (en dus niet het volledige pad). Ik heb al geprobeerd om het veld ImageName het indexveld te maken en dat geeft geen probleem voor zover het het formulier op basis van deze enkele tabel betreft. Ik heb echter ook een uitgebreider (hoofd)formulier en daar loop ik dan tegen het probleem aan dat de afbeeldingen niet meer zichtbaar zijn.

Nu is het zo dat ik op dit hoofdformulier een keuzelijst met invoervak heb gemaakt. In deze lijst kan ik de ImageName kiezen en wordt de onderliggend waarde (ImageID) opgeslagen in mijn tabel. Vervolgens heb ik onder dit object een "besturingselement afbeelding" gemaakt waarbij ik als "besturingselement bron" het veld ImageID (het volledige pad) heb opgenomen. Dit resulteert er in dat daar waar ik een ImageName in het invoervak opneem daaronder de betreffende afbeelding zichtbaar wordt.

Ik begrijp dat dit niet werkt als de ImageName het indexveld wordt omdat het pad naar de afbeelding niet is opgenomen in dit veld, maar ik weet dus niet hoe ik dit wel werkend moet krijgen. Het lijkt mij dat in het "besturingselement afbeelding" ergens moet worden aangegeven dat naar de waarde van het (bovenliggende) ImageName veld moet worden gekeken en dat vervolgens de afbeelding moet worden weergegeven die te vinden is op het bestandspad dat dat hoort bij deze ImageName. Maar ja, hoe doe ik dat? Elke hulp is welkom en als het nodig is wil ik ook wel een lege kopie van mijn database plaatsen.

Eric
 
Elke hulp is welkom en als het nodig is wil ik ook wel een lege kopie van mijn database plaatsen.
Zou ik zeker doen, want het duizelt mij behoorlijk. Maak 'm niet helemaal leeg, maar doe er een paar afbeeldingen bij. Het is wel zo handig als de db werkt...
 
Bijgaand de database met enkele voorbeeld records. Drie opmerkingen:
- in mijn database heb ik in tblImages bij het veld ImageID het volledige pad naar de afbeeldingen opgenomen. Dit volledige pad is uiteraard ook zichtbaar in de gerelateerde tabel tblRegistrationDetails.
- het liefst zou ik in tblImage de velden omdraaien zodat het veld ImageName de primaire sleutel wordt en dat dit veld opgeslagen wordt in tblRegistrationDetails (dus niet het volledige pad naar de afbeeldingen). Dit lukt me wel om te veranderen, maar dan krijg ik geen afbeeldingen meer te zien in frmRegistrationDetails, het formulier dat is gebaseerd op deze tabel. Ik weet niet hoe ik dat kan oplossen.
- tot 2 maanden geleden had ik alleen nog maar van Access gehoord, dus ik ben nog "lerende".

Bekijk bijlage Images.rarBekijk bijlage IPdatabase(helpmij).rar
 
Waarom zou je het veld ImageName als sleutel willen? Wat mankeert er aan een autonummerveld? Voor hetzelfde geld krijg je afbeeldingen die in verschillende (sub)mappen staan en die dezelfde naam hebben. Daar kun je dan niks meer mee. Bovendien is het met alle verwijzingen in andere tabellen een crime om alles aan te passen, nog afgezien van het feit dat je db veel groter gaat worden, omdat een numeriek veld veel kleiner zal zijn dan een waarde uit een tekstveld. Ik zie geen meerwaarde...
 
Ik maak al gebruik van veel nummers als sleutel in tabellen dus het leek mij wel handig om af en toe een waarde te kunnen zien in de hoofdtabel tblRegistrationDetails waar ik iets aan kan herkennen. Heeft inderdaad geen meerwaarde omdat je op zich toch niet veel met de tabel zelf werkt en de waarde altijd kunt herleiden.

Als ik het nu goed begrijp, adviseer je om een autonummerveld op te nemen als sleutel in tblImages. Dat heb ik gedaan. Ik loop dan alleen tegen twee dingen aan:
1) In mijn formulier frmRegistrationDetails wordt nu het volledige pad opgenomen naar de afbeelding. Kan dit niet korter? Het liefst heb ik hier alleen de naam van de afbeelding staan (bijv. HELPMIJ.jpg) of een verkort pad naar de afbeelding. De map Images staat in dezelfde tabel als de database. Dan moet dit laatste toch mogelijk zijn?
2) De afbeeldingen zijn nu niet meer zichtbaar in mijn formulier frmRegistrationDetails. Dit komt omdat het sleutelveld nu een autonummer veld is en niet meer het veld dat naar het volledige pad van de afbeelding verwijst. Daar zit bij het probleem. Ik weet niet hoe ik dat moet aanpassen om de afbeeldingen toch op dit formulier te zien.

Bedankt voor alle hulp zover.

Eric
Bekijk bijlage IPdatabase(helpmij)_1.rar
 
Ik kan je db nu niet openen (geen 2003) dus ik kan niet goed zien waar het probleem zit. Doorgaans kun je, zeker als de (sub)mappen met afbeeldingen in dezelfde map als de db beginnen met
Code:
Application.CurrentProject.Path
de startlocatie uitlezen. Die verbind je dan met het subpad dat je uiteraard wèl moet opslaan. En dan werkt het prima. Je hoeft dus niet het volledige pad op te slaan, al is dat uiteraard niet fout.
 
Dat van het pad ga ik proberen. Punt 2 is eigenlijk veel belangrijker voor mij. Ik gebruik Access 2013 dus apart je hem niet kan openen. Hoe nu verder?
 
Ik heb thuis 2010, dus dat zou geen probleem hoeven te zijn. Maar een tipje van de sluier is deze functie:
Code:
Function FotoLaden()
Dim sFoto As String
    sFoto = DLookup("[Fotopad]", "[tblPersonen]", "[intPersoon_Personeelsnummer] =" & Me.txbPersoon_Personeelsnummer)
    If Me.chkPersoon_FotoBeschikbaar = True Then
        Me.imgFoto.Picture = CurrentProject.Path & "\" & sFoto
        Me.imgFoto.Visible = True
    Else
        Me.imgFoto.Visible = False
        Me.txbFoutmelding.Visible = False
        FotoKiezen
    End If

End Function
Hierbij sla je de foto dus in de map van de db op, en bewaar je alleen het deelpad. Met DLookup haal je dat pad weer op, en hang je het aan de rest van het pad.
 
Bedankt voor het tipje van de sluier. Zelf code schrijven heb ik me nog niet echt aan gewaagd maar meer zelfstudie kan geen kwaad. Het zal wel eventjes gaan duren denk ik.


Eric
 
Ik heb het voorbeeldje van hierboven aangepast naar jouw formulier, dus dat zou je simpel moeten kunnen plakken.

Code:
Private Sub Form_Current()
    Call FotoLaden
End Sub

Code:
Function FotoLaden()
Dim sFoto As String, tmp As String
    On Error Resume Next
    sFoto = DLookup("[txtImageName]", "[tblImages]", "[ImageID] =" & Me.ImageID)
    tmp = Dir(sFoto)
    If tmp = vbNullString Then
        Me.ImageFrame.Visible = False
        Me.txtImageNote.Visible = True
    Else
        Me.ImageFrame.Picture = CurrentProject.Path & "\" & sFoto
        Me.ImageFrame.Visible = True
        Me.txtImageNote.Visible = False
    End If
    Me.Repaint

End Function

Enige aanpassing: ik heb het tekstvak met de melding van een vaste tekst voorzien, en maak die zichtbaar of onzichtbaar. Maar die kun je a.d.h.v. dit voorbeeld vast wel aanpassen.
 
Bedankt voor de hulp, maar ik ben bang dat ik me er eerst toch iets verder in moet verdiepen. Ik ben wel aan een boek begonnen waar uitleg wordt gegeven over code, maar op dit moment weet ik nog niet eens waar ik de door jouw opgegeven codes precies moet plaatsen. Zoals ik het nu heb gedaan werkt het in ieder geval niet. De code komt nu bij mij onder elkaar te voorschijn onder ImageFrame - Click. Ook zie ik dat er in de code wordt verwezen naar txtImageNote. Dit veld komt echter niet voor in mijn frmRegistrationDetails waarvoor de code bestemd is. Kortom ik snap het nog niet en ga vanavond maar eens verder met de zelfstudie. Al doende leert men maar soms is het wel frustrerend.
 
Dus je bent eigenlijk aan het programmeren zonder dat je weet wat je aan het doen bent? Ik hoop niet dat je in je vrije tijd ook open hart operaties doet omdat je best wel goed een biefstukje kunt snijden (je zult vast wel ergens een scherp mes hebben liggen ;) ). Programmeren is namelijk iets heel anders dan code van de ene database plukken en plakken in een andere... Ik heb je voorbeeldje aangepast.
 

Bijlagen

Sterker nog. Ik wilde dat programmeren het liefst vermijden, maar blijkbaar ontkom ik er niet helemaal aan. Ik probeer me er verder in te verdiepen en soms probeer ik ook gewoon wat uit om het beter te leren begrijpen. Dat gaat inderdaad niet altijd goed en dat het niet eenvoudig is, wist ik al. Gelukkig is er dan nog een hartchirurg op dit forum die probeert te helpen en daar ben ik ook heel blij mee :thumb:. Het voorbeeldje krijg ik echter nog niet aan de gang. In mijn frmRegistrationDetails komen de afbeeldingen niet te voorschijn.
 
Wat vreemd is, want de map met afbeeldingen zit er bij. Geeft de code een foutmelding? Zo nee: als je in de Stapmodus door de code loopt, worden de variabelen wel gevuld? En loopt hij door de goede lussen? Ik heb bewust één verkeerde afbeelding, en één goede afbeelding gebruikt, zodat je kunt zien dat hij de goede takken doorloopt.
 
Als ik de database uitpak en samen met de map “images” in een map zet krijg ik bij het openen van frmImages de volgende foutmelding:
"Het bestand E:\Documents\_Helpmij\Ms Access\lacaes\IPDatabase(helpmij)_1\Images\Lijst Sectoren.jpg kan niet door Microsoft Access worden geopend".
Dit is naar ik aanneem het lokale pad waar bij jou de afbeeldingen staan opgeslagen. De afbeeldingen zijn bij doorklikken uiteraard niet zichtbaar in dit formulier.
In frmRegistrationDetails krijg ik geen foutmelding maar de afbeeldingen zijn ook niet zichtbaar bij het record waar dat de bedoeling is (record 3).

Dit zijn de stappen die ik heb genomen:
1) In tblImages het volledige pad naar de afbeeldingen op mijn pc opgenomen.
Dit geeft geen foutmelding in meer in frmImages, maar er is nog steeds geen afbeelding zichtbaar
2) In tblImages bij het besturingselement van de afbeelding onder “besturingselementbron” de veldnaam txtImageName opgenomen.
Dit lost alles op in frmImages. De afbeelding Lijst Sectoren.jpg wordt nu keurig weergegeven en de afbeelding Google.jpg niet.

Het frmImages is ook niet het echte probleem bij mij. Dat is het frmRegistrationDetails. Het derde record zou daar ook de afbeeldingen Lijst Sectoren.jpg moeten weergeven onder het veld “keuzelijst 1165” waar het pad naar deze afbeelding wordt weergegeven. Ik heb daar ook een apart besturingselement voor de afbeelding opgenomen zoals te zien is in de ontwerpweergave
Ik denk ook wel te snappen waardoor het niet lukt. Eerst was mijn primaire sleutel in de tblImages het pad naar de afbeelding en door in het besturingselement afbeelding te verwijzen naar dit sleutelveld kwam de afbeelding tevoorschijn. Nu hebben wij in tblImages een autonummerveld als primaire sleutel opgenomen wat is op zich beter is. Alleen als ik dan in mijn frmRegistrationDetails naar dit veld verwijs komt de afbeelding niet tevoorschijn omdat de onderliggende waarde een autonummerveld is en niet meer het pad naar de afbeeldingen. Daar gaat het volgens mij fout en daar kom ik gewoon niet goed uit.
 
Ik kan het probleem reproduceren als ik de db verplaats; dan kijkt hij eerst nog naar het oude pad. Oveigens zijn de afbeeldingen daarna gewoon te zien, want het dynamische pad is nog steeds correct. Na Comprimeren van de db doet hij dat niet meer, en krijg je de melding dus ook niet. Dus blijkbaar heeft Access dat nodig om de gegevens te initialiseren.
 
Als ik de db en map images verplaats en tussen allerlei andere bestanden zet blijf ik de foutmelding houden maar zijn de afbeeldingen wel zichtbaar in mijn frmImages. Ook het comprimeren van de db lost dat niet op. Als ik vervolgens een aparte map maak voor de db en de map images en deze daar in plaats, krijg ik en de foutmelding en ook geen afbeeldingen meer te zien. Vreemd.

Het frmImages zou ik nog kunnen oplossen door de stappen te nemen uit mijn eerdere bericht van vandaag. Dan blijf ik nog zitten met het frmRegistrationDetails waar geen enkele afbeelding zichtbaar komt. Kan je me daar nog mee op weg helpen?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan