fotodatabase met filter en tumbnail

Status
Niet open voor verdere reacties.

Theo65

Gebruiker
Lid geworden
20 mrt 2023
Berichten
55
Ik probeer een soort fotodatabase te maken. Zie bijgesloten voorbeeld met fantasienamen.
Ben geen programeur, probeer alleen een database te maken en beheren voor een archief.

Heb tabel met gegevens.
Bij foto_frm komt de lijst met foto (met gegegevens) met erachter een klein voorbeeld van de foto's
Nu wilde ik op de foto's kunnen filteren, maar ... foutmelding
Ook wil ik graag op de kleine foto kunnen klikken en deze dan of in een apart formulier in groot formaat kunnen bekijken of apart openen in bv mspaint wat wel op elke windows computer staat.
Wie kan me verder helpen?
 

Bijlagen

  • Fotodatabase.zip
    78,3 KB · Weergaven: 13
Laatst bewerkt:
Ik heb je code even teruggebracht tot het noodzakelijke, dan zijn in ieder geval alle fouten er uit. Dan krijg je dit:
Code:
Private Sub Tumbnail_Click()
    Paint_OpenImage Me.Tumbnail.Picture
End Sub


Code:
Function Paint_OpenImage(Optional sImg As String, Optional lWindowStyle As VbAppWinStyle = vbNormalFocus)
    Shell "MsPaint.exe """ & IIf(sImg = "(Geen)", "", sImg) & """", lWindowStyle
End Function

Omdat er geen plaatjes in je db zitten (terecht natuurlijk, afbeeldingen sla je niet op in de database maar in een map erbuiten) kunnen we verder niet veel testen.
Dat filter probleem moet je even verder toelichten, want zo kan ik er niet veel mee.
 
Wél geconstateerd dat je filter niet correct is opgebouwd, want je baseert hem nu op je zoekvelden, niet op je databasevelden. En dan werkt het natuurlijk niet. Sowieso hou ik niet van dit soort filters, maar zo heb je geen foutmeldingen meer.
Code:
Private Sub Knop_Zoek_Foto_Click()
Dim sFilter As String
    If Me.TxtEigenNr <> "" Then
        sFilter = "EigenNr = " & Me.TxtEigenNr
    Else
        sFilter = "[Omschrijving] Like ""*" & Me.TxtOmschrijving & "*""" & _
        " AND [Soort] Like ""*" & Me.TxtSoort & "*""" & _
        " AND [Tags] Like ""*" & Me.TxtTags & "*""" & _
        " AND [EigenFilter] Like ""*" & Me.TxtEigenFilter & "*""" & _
        " AND [Origineel] Like ""*" & Me.TxtOrigineel & "*""" & _
        " AND [Bron] Like ""*" & Me.TxtBron & "*"""
    End If

    If sFilter <> "" Then
        Me.Filter = sFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If
End Sub
 
Bedankt OctaFishmm bedankt voor de verbeteringen.
Echter....
1. Als ik Filter op bijvoorbeeld omschrijving (bv Slager of Hoekstra), dan lijkt het net of de eerste 5 records niet in de filter zitten.
Een deel wordt dan wel getoond in de filter mode, maar een aantal regels missen.

2. De afbeelding opent wel in paint, maar de afbeelding is leeg.
als ik msgbox sImg doe, dan geeft dat (Geen), dus afbeelding wordt niet doorgegeven aan de function?
De afbeeldingen staan inderdaad op de schijf. de naam is het EigenNr.jpg dus 1.jpg 2.jpg etc.
In tabel FotoLoc staat het pad. Ik weet het , het verdiend niet de schoonheidsprijs, maar het werkt en wist geen betere oplossing.
Je zou het met 10 willekeurige afbeeldingen kunnen testen, als je wilt natuurlijk
 
Theo65,

Prober deze filter maar eens:

Code:
Dim sFilter As String

    If Me.TxtEigenNr <> "" Then
        sFilter = "[EigenNR] Like ""*" & Me.TxtEigenNr & "*"" and"
    End If
    If Me.TxtOmschrijving <> "" Then
        sFilter = sFilter & "[Omschrijving] Like ""*" & Me.TxtOmschrijving & "*"" and"
    End If
    If Me.TxtSoort <> "" Then
        sFilter = sFilter & "[Soort] Like ""*" & Me.TxtSoort & "*"" and"
    End If
    If Me.TxtTags <> "" Then
        sFilter = sFilter & "[Tags] Like ""*" & Me.TxtTags & "*"" and"
    End If
    If Me.TxtEigenFilter <> "" Then
        sFilter = sFilter & "[EigenFilter] Like ""*" & Me.TxtEigenFilter & "*"" and"
    End If
    If Me.TxtOrigineel <> "" Then
        sFilter = sFilter & "[Origineel] Like ""*" & Me.TxtOrigineel & "*"" and"
    End If
    If Me.TxtBron <> "" Then
        sFilter = sFilter & "[Bron] Like ""*" & Me.TxtBron & "*"""
    End If
       
sFilter = Left(sFilter, Len(sFilter) - 4)
    If sFilter <> "" Then
        Me.Filter = sFilter
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If

Groetjes,
 
De filter werkt prima, dank !

De foto openen in paint (of evt standaard fotobewerkingsprogramma) werkt helaas niet.
MSpaint opent wel, maar met leeg scherm.
Als ik een msgbox Me.Tumbnail.Picture doe, dan zie (geen)

Ik heb de code beetje aangepast via een variabele en een msgbox toegevoegd om te zien of de waarde daar nog wel goed is.
Ook dan krijg ik natuurlijk ook weer (geen)

Code:
Private Sub Tumbnail_Click()
Dim OpenImg As String
OpenImg = Me.Tumbnail.Picture
MsgBox OpenImg


    Paint_OpenImage OpenImg
End Sub


Function Paint_OpenImage(Optional sImg As String, Optional lWindowStyle As VbAppWinStyle = vbNormalFocus)
    Shell "MsPaint.exe """ & IIf(sImg = "(Geen)", "", sImg) & """", lWindowStyle


End Function

Ik vermoed dus dat het aan Me.Tumbnail.Picture ligt, maar wat zou ik dan moeten doen?
 
Iets verder, met een knop achter de tumbnail lukt het wel met de volgende code.

Code:
Private Sub Knop_Paint_Click()
    Dim OpenImg As String
    OpenImg = Forms!Fotos_Frm.PhotoPath


    Paint_OpenImage OpenImg
    
End Sub

Function Paint_OpenImage(Optional sImg As String, Optional lWindowStyle As VbAppWinStyle = vbNormalFocus)


    Shell "MsPaint.exe """ & IIf(sImg = "(Geen)", "", sImg) & """", lWindowStyle


End Function

Gebruik ik Me.Tumbnail.Picture dan krijg ik (geen). Gebruik ik dezelfde code van de knop bij de tumbnail. dan werkt het niet, dan werkt het bij de 1e foto, maar daarna niet meer
 
Ik snap niet waarom mensen code maken die fout is, zodat de code in dezelfde procedure moet worden aangepast. Doe het gelijk goed :).

Code:
Dim sFltr As String


    If Me.TxtEigenNr <> "" Then sFltr = "[EigenNR] Like ""*" & Me.TxtEigenNr & "*"""
    If Me.TxtOmschrijving <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[Omschrijving] Like ""*" & Me.TxtOmschrijving & "*"""
    End If
    If Me.TxtSoort <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[Soort] Like ""*" & Me.TxtSoort & "*"""
    End If
    If Me.TxtTags <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[Tags] Like ""*" & Me.TxtTags & "*"""
    End If
    If Me.TxtEigenFilter <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[EigenFilter] Like ""*" & Me.TxtEigenFilter & "*"""
    End If
    If Me.TxtOrigineel <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[Origineel] Like ""*" & Me.TxtOrigineel & "*"""
    End If
    If Me.TxtBron <> "" Then
        sFltr = sFltr & IIf(sFltr <> "", " And ", "") & "[Bron] Like ""*" & Me.TxtBron & "*"""
    End If
       
    If sFltr <> "" Then
        Me.Filter = sFltr
        Me.FilterOn = True
    Else
        Me.Filter = ""
        Me.FilterOn = False
    End If


Je werkwijze kan echt korter:


Code:
Private Sub Tumbnail_Click()
    Paint_OpenImage Me.PhotoPath.Value
End Sub


Private Sub Knop_Paint_Click()
    Paint_OpenImage Me.PhotoPath.Value
End Sub


Function Paint_OpenImage(Optional sImg As String, Optional lWindowStyle As VbAppWinStyle = vbNormalFocus)
    Shell "MsPaint.exe """ & IIf(sImg = "(Geen)", "", sImg) & """", lWindowStyle
End Function

Als thumbnail (ja, er hoort een 'h; in ;)) en de knop Paint op het formulier Fotos_Frm staan, kun je beter Me. gebruiken. Sowieso is de punt beter als het uitroepteken, omdat je dan IntelliSense hebt. En waarom zou je jezelf die luxe ontzetten?
 
Heb de h in thumbnail toegevoegd.


Maar ook bij
Paint_OpenImage Me.PhotoPath.Value wordt niet de geselecteerde foto weergegeven in paint, maar of de 1e of de laatste geopende via de knop
Maar het gebruikt het pad niet.

Zal de laatste versie van het bestand bijvoegen.


 

Bijlagen

  • Fotodatabase.zip
    198,8 KB · Weergaven: 9
Laatst bewerkt:
Zal er vanavond naar kijken. Ik hoop dat er plaatjes bij zitten deze keer, ik sta niet te popelen om eerst alles zelf in elkaar te moeten knutselen :).
 
Nee zitten geen afbeeldingen bij. Maar je kunt 10 willekeurige afbeeldingen hernoemen naar 1.jpg 2.jpg .. etc.
In tabel FotoLoc staat het pad.

Maar als het teveel werk is laat dan maar. Ik red me wel met aparte knop, dat werkt ook.
Ik kan me er wel mee redden.
Als het niet kan zoals het moet, dan moet het maar zoals het kan.
In ieder geval bedankt en fijn weekend.
 
Nee zitten geen afbeeldingen bij. Maar je kunt 10 willekeurige afbeeldingen hernoemen naar 1.jpg 2.jpg .. etc.
Kijk, en dát hoort nou dus bij de forum etiquette: je wilt toch niet (althans: je zou dat niet moeten willen) dat helpers eerst allerlei andere zaken moeten regelen (dat kost hún namelijk extra tijd) voordat de zaak goed werkt? Als helper wil ik mijn tijd steken in het vinden van een antwoord, niet in het op orde maken van de database. Dat je daar enigszins negatief op reageert, is dus jammer in mijn ogen. Al wil ik dat voor één keer best doen. Maar zorg de volgende keer dus gewoon voor een omgeving waarin we gelijk aan de slag kunnen. Dat is, vind ik, wel zo netjes.
 
Je hebt gelijk. Je helpt me en zou het jou zo gemakkelijk mogelijk moeten maken.
Bijgesloten het access bestand met 10 afbeeldingen. Ik heb het als zip in de C:\ directory. Als het ergens anders uitgepact wordt moet het pad waar afbeeldingen staan even aangepast in tabel FotoLoc
 

Bijlagen

  • Fotodatabase.zip
    525,6 KB · Weergaven: 14
Zal er snel naar kijken. Vandaag nog niet aan toegekomen, want soms wachten er andere klussen ;).
 
Ik heb wat aanpassingen aan je db gedaan, zodat je kunt zien hoe je het werkend kan krijgen. Zo is het queryveld [PhotoPath] uit het formulier verwijderd, en vervangen door een niet-afhnakelijk tekstveld. Dat krijgt een waarde op basis van een formule die wordt bepaald bij de gebeurtenis <Bij Aanwijzen>.
Code:
    Me.Thumbnail.Picture = CurrentProject.Path & "\Fotodatabase\" & Me.EigenNr & "." & Me.Extensie
Hiermee ben je niet (meer) afhankelijk van waar de database staat, en werkt het formulier dus overal. Ik zou zelf voor de naam van de foto één veld hebben gebruikt, dus niet een veld [EigenNr] met de waarde 1, maar de waarde " 1.jpg" Dan heb je maar een veld nodig voor de naam van de foto. Ik zie eerlijk gezegd geen enkel voordeel van het loskoppelen van de extensie. Jij misschien wel :).

De Thumbnail werkt dan zo (2 varianten):
Code:
Private Sub Thumbnail_Click()
    ''Paint_OpenImage CurrentProject.Path & "\Fotodatabase\" & Me.EigenNr & "." & Me.Extensie
    Paint_OpenImage Me.PhotoPath.Value
End Sub
 

Bijlagen

  • Fotodatabase.zip
    525,6 KB · Weergaven: 12
Zo is het queryveld [PhotoPath] uit het formulier verwijderd, en vervangen door een niet-afhnakelijk tekstveld. Dat krijgt een waarde op basis van een formule die wordt bepaald bij de gebeurtenis <Bij Aanwijzen>.

Ik ben erg nieuwsgiering naar jou oplossing, want dat queryveld is inderdaad niet fraai. (ik kon echter geen betere oplossing bedenken).
Dus ben erg geinteresseerd, want ik zou dit dan ook in een andere database willen toepassen en wil dit graag leren.

Alleen als ik heb bestand van jou download dan krijg ik mijn eigen oude database zonder jou aanpassing? Klopt dat of doe ik iets fout?
 
Laatst bewerkt:
Wellicht de verkeerde database gepost, maar ik heb het aangepast in jouw database en formulier. Dus je zou het moeten kunnen zien. Ik post hem nog wel een keer, zónder typefout :).
 
Hierbij de nieuwe versie, met een extra aanpassing. Er zit nu een functie in (Fotopad) die dynamisch het pad ophaalt van de foto's, gebaseerd dus op de locatie van de database. Als je de map met de database verplaatst, blijft alles dus werken. Beide foto formulieren (thumbnail en groot) werken nu met de foto's. De grote wat beter, omdat dat een enkelvoudig formulier is. Maar dat zie je gauw genoeg :).
 

Bijlagen

  • Fotodatabase.zip
    51,1 KB · Weergaven: 16
Ik zie de aanpassing. Leerzaam en intessant.
Maar als ik in het formulier, dus alle foto's onder elkaar hebt zie je de afbeeldingen niet meer. Nou ja, je ziet 1 afbeelding, op alle regels staat dezelfde afbeelding.
De bedoeling was juist een thumbnail van de foto met een omschrijving om een foto te selecteren. Dan wil je liefst een regel met de thumbnail afbeelding van de regel er achter.
kan ik dat dynamisch adres dan ook in query gebruiken om de foto er weer bij te krijgen?
 
Dat laatste is een beetje lastig omdat je het hier hebt over een doorlopend formulier. Als je in het ontwerp van dat formulier kijkt, zie je maar één object staan, geen 10 (dat is het aantal records dat je hebt). Ergo: als er maar één object is, kan dat object maar één afbeelding laten zien. Is logisch, niet? En welk object dat is, is dus afhankelijk van het actieve record. Ook dat lijkt mij logisch. Vandaar dat ik schreef dat het formulier FotoGroot_Frm beter werkt, omdat dat een Enkelvoudig formulier is. Daarmee heb je in beginsel hetzelfde probleem (één object, dus alle records laten hetzelfde plaatje zien) maar hier zie je het niet, omdat je altijd maar één record bekijkt. Zodra je naar het volgende record schakelt, wordt het plaatje ververst. Wat dus óók gebeurt bij een doorlopend formulier.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan