Probleem met VB, Access en plaatjes

Status
Niet open voor verdere reacties.

VB noob

Gebruiker
Lid geworden
11 feb 2009
Berichten
78
Ik ben een database aan het bouwen voor een non profit NGO die in de hoek van de natuurbescherming.
Ik wil graag plaatjes van de zijkanten van wilde honden in de database laten zien. Nou wilde ik de plaatjes niet in de database zelf opslaan omdat er nogal wat plaatjes zijn (300+) en er komen er snel meer bij.
Nou had ik gevonden dat het met een VB script wel zou kunnen maar daar heb ik helemaal geen kaas van gegeten.
Heb wel een voorbeeld gevonden van hoe ik het ongeveer zou willen hebben.
Maar daarmee kom ik er dus niet uit :(

Dit voorbeeld renamed de plaatjes naar het personeelsnummer. Bij mij zou dat moeten worden de DogID en de tabel waar het form bij mij verwijst is ook DogID.
De OK-knop en de Annuleren-knop kunnen ook wel van het form af.
Ik heb het een en ander zitten vogelen (afgelopen dagen) maar ik kom er niet uit. Kan wel een beetje met access overweg maar verder ben ik vooral een bioloog.

In het voorbeeld wat ik gebruikt hebt is sprake van de tabellen 'tblGeslachen' en 'tblPersonen'.
De query 'qryfrmPersoonDetail' voor het form 'frmPersoonDetail'. Een simpele query welke details precies moeten worden vertoond, maar dat is bij mijn form niet nodig (denk ik).

Dit zou ik dus graag ombouwen voor mijn database waarbij het form alleen naar de tabel DogID verwijst en waarbij de knoppen 'OK' en 'Annuleren' niet meer op het form staan.

De code van 'mijn' voorbeeld:
Code:
Option Compare Database
Option Explicit

Private Sub cmdCancel_Click()

    If Me.Dirty = True Then
        Me.Undo
    End If
    
    DoCmd.Close acForm, Me.Name, acSaveNo
    
End Sub

Private Sub cmdInsertImage_Click()
On Error GoTo err_cmdInsertImage_Click
'Code om foto toe te voegen

    Dim dlgPicker As FileDialog
    Dim strFileName As String
    Dim strPath As String
    Dim strFile As String
    
    If IsNull(Me.txbPersoon_Personeelsnummer) Then
        MsgBox "Vul eerst een personeelsnummer in.", vbCritical + vbOKOnly, "Fout"
        Exit Sub
    End If
    
    'Open de Windows bestandenlijst, met als argument het type
    Set dlgPicker = Application.FileDialog(msoFileDialogFilePicker)
    
    With dlgPicker
        .Title = "Select a picture" 'De titel voor het venster
        '*************************************
        'Pas dit aan voor map met afbeeldingen
        '*************************************
        .InitialFileName = CurrentProject.Path 'Waar moet het venster beginnen?
        .Filters.Add "JPG", "*.jpg", 1 'Beperk de bestandstypes tot .jpg, en maak dat het eerste item in de lijst
        .AllowMultiSelect = False 'Slechts één bestand kiezen toegestaan
        .InitialView = msoFileDialogViewPreview 'Bepaal weergave
        
        If .Show = -1 Then 'Bepaal of gebruiker op OK-knop heeft geklikt.
            strFileName = .SelectedItems.Item(1) 'String wordt gevuld met geselecteerde bestand
        End If
        
    End With

    '*************************************
    'Pas dit aan voor map met afbeeldingen
    '*************************************
    strPath = CurrentProject.Path & "\"
    
    Name strFileName As strPath & Me.txbPersoon_Personeelsnummer & ".jpg"
    
    Me.chkPersoon_FotoBeschikbaar = True
    
    Me.imgFoto.Visible = True
    Me.imgFoto.Picture = strPath & Me.txbPersoon_Personeelsnummer & ".jpg"
    Me.txbFoutmelding.Visible = False

    Exit Sub

err_cmdInsertImage_Click:
    Select Case Err.Number
        Case 58 'Het bestand bestaat al.
            MsgBox "A picture of this person already exists. (" & Me.txbPersoon_Personeelsnummer & ".jpg). Choose this file or rename it.", vbCritical + vbOKOnly, "Fout"
        Case 75 'De gebruiker klikt op de knop Annuleren.
            MsgBox "You didn't select a picture.", vbOKOnly + vbInformation, "Melding"
        Case Else 'Overige gevallen
            MsgBox "Error in: " & "cmdInsertImage_Click, foutnummer:" & Err.Number & ", " & Err.Description
    End Select
    
    Exit Sub
    
End Sub

Private Sub cmdOK_Click()

    DoCmd.Close acForm, Me.Name, acSaveYes

End Sub

Private Sub Form_Open(Cancel As Integer)
On Error GoTo err_Form_Open

    If Me.chkPersoon_FotoBeschikbaar = True Then
        '*************************************
        'Pas dit aan met map voor afbeeldingen
        '*************************************
        Me.imgFoto.Picture = CurrentProject.Path & "\" & Me.txbPersoon_Personeelsnummer & ".jpg"
        Me.imgFoto.Visible = True
    
    Else
    
        Me.imgFoto.Visible = False
        Me.txbFoutmelding.Visible = False
    
    End If
    
    Exit Sub

err_Form_Open:
    
    Select Case Err.Number
    
        Case 2220 'De verwachte afbeeldingen is niet te vinden.
            Me.txbFoutmelding = "Picture is erased or has a different name."
            Me.imgFoto.Visible = False
            
        Case Else
            MsgBox Err.Number
            
    End Select
    
End Sub

Een screenshot van het 'voorbeeld' form:
2cct0yp.jpg


En een screenshot van hoe ik mijn form graag zou zien (maar dan werkend, dat doet het nu dus niet :( ):
2mmddfr.jpg


Geen idee of dit heel moeilijk is of niet, maar ik hoop dat jullie mij verder kunnen helpen.
 
Overigens bedacht ik me dat het niet handig is als de plaatjes automatisch gerenamed worden naar DogID aangezien er 2 of 3 plaatjes zijn.
Op zich zouden ze niet gerenamed hoeven worden. Zou het makkelijker moeten maken denk ik...
 
Het is me inmiddels gelukt om de plaatjes op het form te krijgen!
Met deze link is het gelukt: http://support.microsoft.com/kb/285820

Alleen moet je nu de locatie waar het plaatje staat handmatig invoeren, niet echt handig. Graag zou ik dat doen via een knop die als default opent in de directory waar de plaatjes staan (zo'n knop maken lukt me nog wel met de standaard wizard) maar ik kom niet verder dan dat ik met die knop Windows Explorer open in de juiste directory, ik kan niet vervolgens het plaatje selecteren...het is nog puur een knop om WE te openen.
Wie helpt me verder?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan