Plaatje in bijlage met FileDialog

Status
Niet open voor verdere reacties.

Gaijin66

Gebruiker
Lid geworden
25 aug 2007
Berichten
37
Hallo mensen,

Ik heb een formulier waarop ik een plaatje wil laten zien. Daarvoor heb ik het gegevenstype bijlage. Verder zijn er ook een aantal vereiste velden. Met dit formulier kan ik alleen een nieuw record toevoegen. Door te klikken op het plaatje wordt een dialoogvenster getoond. Ik gebruik de volgende code:

Code:
Public Function GeselecteerdPlaatje() As String
                               
  Dim fDialoogvenster As Office.FileDialog
  
  ' Initieer Dialoogvenster bestanden.
  Set fDialoogvenster = Application.FileDialog(msoFileDialogFilePicker)

  With fDialoogvenster
  
     ' Gebruiker kan maar een bestand selecteren.
     .AllowMultiSelect = False
  
     ' Titel voor dialoogvenster.
     .Title = "Afbeelding invoegen"
  
     ' Verwijder huidige filters en creëer eigen.
     .Filters.Clear
     .Filters.Add "Afbeeldingen", "*.bmp; *.gif; *.jpg; *.jpeg; *.png"
     .Filters.Add "Alle bestanden", "*.*"

     ' Toon dialoogvenster. Als de .Show methode Waar teruggeeft, de
     ' gebruiker heeft een bestand geselecteerd.
     If .Show = True Then
         GeselecteerdPlaatje = .SelectedItems(1)
     Else
         ' Gebruiker klikte op annuleren.
     End If
  End With
End Function

Code:
Private Sub Portret_Click()
    Dim curDatabase As DAO.Database
    Dim tblAgents As DAO.Recordset
    
    ' Haal een verwijzing op naar de huidige Database
    Set curDatabase = CurrentDb
    ' Open tabel Agents.
    Set tblAgents = curDatabase.OpenRecordset("Agents")
    
    With tblAgents
       .AddNew
    
       ' Laad plaatje in bijlage
       Set rsAfbeelding = .Fields("Portret").Value
       rsAfbeelding.AddNew
       rsAfbeelding.Fields("FileData").LoadFromFile GeselecteerdPlaatje
       rsAfbeelding.Update
    End With
        
    Set tblAgents = Nothing
    Set curDatabase = Nothing
End Sub

Ik kan wel een plaatje selekteren, maar dit komt niet op het formulier. Wat moet ik toevoegen?
 
Laatst bewerkt:
Eerst maar even de opmaak: gebruik de volgende keer de knop Tag (#) om je code op te maken. Dat leest toch een stuk makkelijker...

Je functie leest niks terug; probeer het eens met zoiets:

Code:
Public Function KiesFoto() As String
Dim fDialoogvenster As Office.FileDialog

Set fDialoogvenster = Application.FileDialog(msoFileDialogFilePicker)
With fDialoogvenster
    .AllowMultiSelect = False
    .Title = "Afbeelding invoegen"
    .Filters.Clear
    .Filters.Add "Afbeeldingen", "*.bmp; *.gif; *.jpg; *.jpeg; *.png"
    .Filters.Add "Alle bestanden", "*.*"
    If .Show = True Then KiesFoto = .SelectedItems(1)
End With
End Function

Aan te roepen met:
Code:
Private Sub Plaatje()
Dim sFoto As String

    sFoto = KiesFoto
    Me.foto = sFoto
End Sub
 
Ik heb dit geprobeerd:
Code:
Private Sub Portret_Click()
  Dim fldPortret As String
  
  fldPortret = GeselecteerdPlaatje
  Me.Portret = fldPortret
End Sub

Ik kreeg foutmelding:

Fout 438 tijdens uitvoering:

Deze eigenschap of methode wordt niet ondersteund door dit object

Bij Foutopsporing sprong hij naar:
Code:
  Me.Portret = fldPortret
Even voor de goede orde: Portret is van het gegenstype bijlage.

Je functie leest niks terug;
Je hebt gelijk. Ik was vergeten om de funktie te definiëren.
Code:
Public Function GeselecteerdPlaatje() As String
 
Laatst bewerkt:
Zoek je zoiets soms:

Code:
    Me.Image1.Picture = Loadpicture(GeselecteerdPlaatje)
 
Dat zou dan het volgende moeten worden:

Code:
Me.Portret.Picture = LoadPicture(GeselecteerdPlaatje)

Ik krijg dan foutmelding:

Compileerfout:

Kan de methode of het gegevenslid niet vinden

Foutopsporing springt dan naar:
Code:
.Picture
 
Dat betekent dat Portret geen eigenschap heeft die ".Picture" heet en dat mijn suggestie dus fout was :P
 
En dat roept dan weer de vraag op: wat voor veld is Portret?
 
ff Off-Topic
@ OctaFish
Gefeliciteerd met je nieuwe job :cool:
 
Portret:

Code:
Veldnaam:            Gegevenstype:
Portret              Bijlage

BTW ik wil ieder bedanken voor het meedenken.
 
Laatst bewerkt:
Werkt nog steeds niet.

De funktie GeselecteerdPlaatje werkt nu wel, maar ik krijg nog steeds geen plaatje in de bijlage "Portret".
 
Bij een bestaand record werkt het wel:
Code:
Private Sub Portret_Click()
    Dim curDatabase As DAO.Database
    Dim tblAgents As DAO.Recordset
    Dim fldAgentId As Object
    Dim rsAfbeelding As DAO.Recordset2
    Dim strNaamPlaatje As String
    
    ' Haal een verwijzing op naar de huidige Database
    Set curDatabase = CurrentDb
    ' Open tabel Agents.
    Set tblAgents = curDatabase.OpenRecordset("Agents")
    
    With tblAgents
        Do Until .EOF
            For Each fldAgentId In .Fields
                If fldAgentId.Name = "AgentId" Then
                    If fldAgentId.Value = CInt(AgentId) Then
                        Debug.Print fldAgentId.Value
                        ' Het te wijzigen record is gevonden
                        .Edit
                        ' Open dialoogvenster voor afbeelding
                        strNaamPlaatje = GeselecteerdPlaatje
                        Debug.Print strNaamPlaatje
                        Set rsAfbeelding = .Fields("Portret").Value
                        rsAfbeelding.AddNew
                        rsAfbeelding.Fields("FileData").LoadFromFile strNaamPlaatje
                        rsAfbeelding.Update
                        .Update
                        Exit For
                    End If
                End If
            Next
            .MoveNext
        Loop
    End With
        
    Set tblAgents = Nothing
    Set curDatabase = Nothing

End Sub
Het zit hem volgens mij in het recordset.update. Maar bij het bovenstaande kan ik het niet gebruiken, omdat er vereiste velden zijn.
 
Vraag nog niet opgelost

Er is helaas nog steeds geen oplossing. Kan iemand mij a.u.b. helpen?
 
Ik snap (na lang turen...) deze constructie nog steeds niet:
Code:
     Set rsAfbeelding = .Fields("Portret").Value
     rsAfbeelding.AddNew
     rsAfbeelding.Fields("FileData").LoadFromFile strNaamPlaatje
     rsAfbeelding.Update
     .Update
Je leest toch de afbeelding uit de tabel Agents? Of maak je voor elk plaatje een aparte tabel?
 
Klopt. Afbeelding met naam "Portret" staat in tabel Agents. Deze code heb ik van de Microsoft site:
Code:
   '  Instantiate the parent recordset. 
   Set rsEmployees = db.OpenRecordset("Employees")
 
   … Code to move to desired employee
 
   ' Activate edit mode.
   rsEmployees.Edit
 
   ' Instantiate the child recordset.
   Set rsPictures = rsEmployees.Fields("Pictures").Value 
 
   ' Add a new attachment.
   rsPictures.AddNew
   rsPictures.Fields("FileData").LoadFromFile "EmpPhoto39392.jpg"
   rsPictures.Update
 
   ' Update the parent record
   rsEmployees.Update

Een bijlage is een Multi Valued Field (MVF), een soort record binnen een record. Daarom wordt hier een object (rsPictures) voor de bijlage aangemaakt.
 
Laatst bewerkt:
Weet iemand hoe ik een plaatje kan toewijzen aan het besturingselement bijlage?
 
Laatst bewerkt:
Maak eens een voorbeeldje, dan kijk ik daar wel even naar.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan