Drag and Drop Attachment

Status
Niet open voor verdere reacties.

ongenae

Gebruiker
Lid geworden
20 okt 2010
Berichten
124
Hallo

Hopelijk kan iemand mij helpen.
Ik ben een Access database aan het maken en het zou moeten mogelijk zijn om bestanden (bv word documenten) vanuit outlook te kunnen verslepen naar een record in mijn database zodat hij het bestand koppelt en opslaat samen met de record.

Ik heb al een veld aangemaakt met als Dataype Attachment. Maar het probleem daarmee is dat ik moet zoeken in de Windows verkenner om zo een bestand te selecteren.

Bedankt
 
Ik gebruik voorlopig een gewoon formulier. maar als ik records wil toevoegen krijg ik een foutmelding op mijn attachment file.

Dit is de code die ik momenteel heb:

Code:
Dim db As Database
Dim rs As DAO.Recordset
Dim strsql As String

strsql = "SELECT t_bestellingenwanden.bestelid, t_bestellingenwanden.klantnr, t_bestellingenwanden.typewand, t_bestellingenwanden.zp," & vbCrLf _
& "t_bestellingenwanden.mp , t_bestellingenwanden.hswg, t_bestellingenwanden.hswgp, t_bestellingenwanden.hswr, t_bestellingenwanden.hswiso," & vbCrLf _
& "t_bestellingenwanden.hswmr , t_bestellingenwanden.fswg, t_bestellingenwanden.fswc, t_bestellingenwanden.bswr, t_bestellingenwanden.bswg," & vbCrLf _
& "t_bestellingenwanden.dossiernr , t_bestellingenwanden.dossiernrde, t_bestellingenwanden.artomschrijving, t_bestellingenwanden.klantref," & vbCrLf _
& "t_bestellingenwanden.leverdatum , t_bestellingenwanden.levernaam, t_bestellingenwanden.leverstraat, t_bestellingenwanden.leverhuisnr," & vbCrLf _
& "t_bestellingenwanden.leverpostcode , t_bestellingenwanden.levergemeente, t_bestellingenwanden.leverland, t_bestellingenwanden.fabrieknr," & vbCrLf _
& "t_bestellingenwanden.groep , t_bestellingenwanden.eenheden, t_bestellingenwanden.klantorder, t_bestellingenwanden.leverorder," & vbCrLf _
& "t_bestellingenwanden.akprijs , t_bestellingenwanden.vkprijs, t_bestellingenwanden.abnummer, t_bestellingenwanden.datumorderbevkl ," & vbCrLf _
& "t_bestellingenwanden.afhalingnaam, t_bestellingenwanden.afhalingdatum," & vbCrLf _
& "t_bestellingenwanden.afhalingdeok , t_bestellingenwanden.afhalingplaat, t_bestellingenwanden.opmerkingen, t_bestellingenwanden.bijlagen" & vbCrLf _
& "FROM t_bestellingenwanden;"

Set db = CurrentDb
Set rs = db.OpenRecordset(strsql)
rs.AddNew

rs("klantnr") = Me![klantnr]
rs("typewand") = Me![typewand]
rs("zp") = Me![zp]
rs("mp") = Me![mp]

rs("dossiernr") = Me![dossiernr]

rs("bijlagen") = Me![bijlagen]

rs.Update
MsgBox ("NIEUWE BESTELLING IS TOEGEVOEGD" & vbCrLf & Me![dossiernr] & "  met klantnummer: " & Me![klantnr])
rs.Close

De andere velden voegt hij goed toe.

De foutmelding is de volgende "Deze eigenschap of methode wordt niet ondersteund door dit object"
 
Je code kun je terugbrengen tot dit:

Code:
With CurrentDb.OpenRecordset("t_bestellingenwanden")
    .AddNew
    .Fields("klantnr") = Me.klantnr
    .Fields("typewand") = Me.typewand
    .Fields("zp") = Me.zp
    .Fields("mp") = Me.mp
    .Fields("dossiernr") = Me.dossiernr
    .Fields("bijlagen") = Me.bijlagen
    .Update
    .Close
End With
MsgBox ("NIEUWE BESTELLING IS TOEGEVOEGD" & vbCrLf & Me.[dossiernr] & "  met klantnummer: " & Me.[klantnr])

Scheelt allicht een hoop typwerk de volgende keer ;)
Als de bijlage niet wordt opgeslagen, dan heb je een verkeerd type in de bijlage op je formulier staan. Daarvoor hebben we toch een voorbeeldje nodig.... Maar ik vermoed dat het veld [Bijlage] een tekstveld is, en je tabelveld nog steeds een bijlageveld.
 
Bekijk bijlage voorbeeldadmin2.zip

Het is de bedoeling om hetzelfde formulier te gebruiken bij zowel toevoegen, opzoeken, aanpassen van opgezochte en verwijderen van records. Maar zover zit ik nog niet, enkel het toevoegen :P

daarom heb ik gekozen voor niet-gerelateerde records.
Enkel bij de bijlage had ik daar problemen, daarom heb ik dat veld gerelateerd gemaakt.

Andere en betere methoden zijn altijd welkom
 
Hier ben ik terug :D

Heb je al even tijd gehad voor mijn probleem?

Zou je onderstaande code ook kunnen gebruiken voor het oproepen van gegevens en ze weer te geven in een formulier? juist andersom dan, dan met .Edit ofzo:

Code:
With CurrentDb.OpenRecordset("t_bestellingenwanden")
    .AddNew
    .Fields("klantnr") = Me.klantnr
    .Fields("typewand") = Me.typewand
    .Fields("zp") = Me.zp
    .Fields("mp") = Me.mp
    .Fields("dossiernr") = Me.dossiernr
    .Fields("bijlagen") = Me.bijlagen
    .Update
    .Close
End With
MsgBox ("NIEUWE BESTELLING IS TOEGEVOEGD" & vbCrLf & Me.[dossiernr] & "  met klantnummer: " & Me.[klantnr])
 
Ik heb er nog geen tijd voor gehad, maar zal er vanavond eens naar kijken... Als je met een recordset gegevens terugleest, kun je de recordset gewoon openen; je loopt dan met een lus door de records heen. Overigens vraag ik me af of dat nu zinvol is, omdat je waarschijnlijk maar één record wilt zien. Die je overigens dan wel weer kunt filteren door de query aan te passen.
 
Voorlopig mag je alles laten vallen ivm die bijlagen, ik werk nu via een andere weg, rechtstreeks via windows verkenner.

Het enige wat ik momenteel nog moet kunnen is een record opzoeken in access en weergeven in mijn formulier (hetzelfde formulier) en die gegevens kunnen wijzigen of verwijderen.
 
Dat is toch simpel een kwestie van het formulier koppelen aan de tabel met RecordBron?
 
Eigenlijk wil ik het niet echt koppelen.
Want dan kan ik niet meer toevoegen vanuit mijn vba.
kan ik de velden in mijn formulier niet invullen via vba?

Er opent dus een schermpje waarin de mensen 2 waarden invullen (klantnr en dossier) om zo een unieke record uit mijn tabel te halen, dit zou hij dan moeten weergeven in het formulier.

Ik heb zitten denken aan het maken van een query die dat unieke record opzoekt, dan de SQL kopieren naar vba en dan zou ik zo mijn velden moeten kunnen invullen.
 
Ik weet niet of er al iemand zin heeft gehad om mij een voorbeeldje te bezorgen van een recordset zodat ik via vba mijn gegevens kan opvragen en weergeven in een formulier.
 
Met queries doe je niks; als je een niet-gebonden formulier wilt gebruiken zul je de dataset via een recordset moeten vullen. Ik heb er een voorbeeldje bijgedaan met twee varianten: een die nog wel gekoppelt aan een tabel, en een variant die helemaal zelfstandig werkt. Kijk maar eens of je er uit komt.
 

Bijlagen

Ik heb eens gekeken naar de vba van het doorgestuurde bestandje.
Bedankt trouwens

maar ik vind niet direct waar je de recordset vult; volgens mij is het dit dat ik nodig heb:

Code:
Sub VulScherm()

On Error Resume Next
    'Formulier vullen met gegevens uit lokale recordset
    If Not rs.BOF And Not rs.EOF Then
        Me.intContactId = rs!intContactId
        Me.txtLastName = rs!txtLastName
        Me.txtFirstName = rs!txtFirstName
        Me.txtMiddleName = rs!txtMiddleName
        Me.txtTitle = rs!txtTitle
        Me.txtAddress1 = rs!txtAddress1
        Me.txtAddress2 = rs!txtAddress2
        Me.txtCity = rs!txtCity
        Me.txtState = rs!txtState
        Me.txtZip = rs!txtZip
        Me.txtWorkPhone = rs!txtWorkPhone
        Me.txtHomePhone = rs!txtHomePhone
        Me.txtCellPhone = rs!txtCellPhone
    ElseIf rs.BOF Then
        rs.MoveNext
    ElseIf rs.EOF Then
        rs.MovePrevious
    End If

End Sub
 
Je hebt wel wat meer nodig :D Op de module Connecties bijvoorbeeld vind je de code die wordt gebruikt voor het feitenlijke aanmaken van de noodzakelijke verbindingen. Deze routine werkt bij een reeds geopende recordset. Vandaar dat er gelijk wordt begonnen met het vullen van de tekstvelden.
 
Ik raak er niet echt aan uit sorry :confused:

ik heb het volgende:
- een tabel met alle bestellingen (t_bestellingenwanden)
- een query die de resultaten weergeeft waarop gezocht wordt in het formulier f_opzoeken (q_zoekenvolledigewanden)
- een formulier waarin de 2 waarden ingegeven worden waarop gezocht wordt (f_opzoeken): naam veld 1 = klantnrzoeken; naam veld 2 = dossiernrzoeken
- een formulier waar de gezocht resultaten moeten in weergegeven worden (f_volledigewanden)

Dus eigenlijk wil ik gewoon het resultaat van mijn query in mijn formulier weergeven, met de mogelijkeheid om deze gegevens aan te passen.

Dit is wat ik heb, maar raak er niet aan uit als ik geen sql mag gebruiken om de waarden te selecteren:

Code:
Public db As Database
Public rs As Recordset
Public strsql As String

Private Sub btnzoeken2_Click()

'query die zoekt op het gene ik ingegeven heb in mijn formulier
DoCmd.OpenQuery ("q_zoekenvolledigewanden")

Dim klantnr As Integer
Dim dossiernr As String

klantnr = Me.klantnrzoeken
dossiernr = Me.dossiernrzoeken



Set db = CurrentDb
Set rs = db.OpenRecordset("f_volledigewanden")

End Sub
 
Kan ik met het volgende niets doen?

Code:
Dim klantnr As Integer
Dim dossiernr As String

klantnr = Me.klantnrzoeken
dossiernr = Me.dossiernrzoeken

strsql = "SELECT t_bestellingenwanden.klantnr, t_bestellingenwanden.typewand, t_bestellingenwanden.zp, t_bestellingenwanden.mp, t_bestellingenwanden.hswg," & vbCrLf _
& "t_bestellingenwanden.hswgp, t_bestellingenwanden.hswr, t_bestellingenwanden.hswiso, t_bestellingenwanden.hswmr, t_bestellingenwanden.fswg," & vbCrLf _
& "t_bestellingenwanden.fswc, t_bestellingenwanden.bswr, t_bestellingenwanden.bswg, t_bestellingenwanden.dossiernr, t_bestellingenwanden.dossiernrde," & vbCrLf _
& "t_bestellingenwanden.artomschrijving, t_bestellingenwanden.klantref, t_bestellingenwanden.leverdatum, t_bestellingenwanden.levernaam," & vbCrLf _
& "t_bestellingenwanden.leverstraat, t_bestellingenwanden.leverhuisnr, t_bestellingenwanden.leverpostcode, t_bestellingenwanden.levergemeente," & vbCrLf _
& "t_bestellingenwanden.leverland, t_bestellingenwanden.fabrieknr, t_bestellingenwanden.groep, t_bestellingenwanden.eenheden," & vbCrLf _
& "t_bestellingenwanden.klantorder, t_bestellingenwanden.leverorder, t_bestellingenwanden.akprijs, t_bestellingenwanden.vkprijs," & vbCrLf _
& "t_bestellingenwanden.abnummer, t_bestellingenwanden.datumorderbevkl," & vbCrLf _
& "t_bestellingenwanden.afhalingnaam , t_bestellingenwanden.afhalingdatum, t_bestellingenwanden.afhalingdeok, t_bestellingenwanden.afhalingplaat," & vbCrLf _
& "t_bestellingenwanden.opmerkingen , t_bestellingenwanden.bijlagen, t_bestellingenwanden.artcreatiefoxpro, t_bestellingenwanden.orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE (((t_bestellingenwanden.klantnr) Like [Formulieren]![f_opzoeken]![klantnrzoeken]) AND ((t_bestellingenwanden.dossiernr) Like " * " & [Formulieren]![f_opzoeken]![dossiernrzoeken] & " * "));"


Set db = CurrentDb
Set rs = db.OpenRecordset("strsql")

Form_f_volledigewanden.klantnr.Value =
 
Zoiets?

Code:
Dim klantnr As Integer
Dim dossiernr As String

klantnr = Me.klantnrzoeken
dossiernr = Me.dossiernrzoeken

strSQL = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE ((klantnr ='" & klantnr & "') AND (dossiernr ='" & dossiernr & "'));"

With CurrentDb.OpenRecordset("strsql")
    If .RecordCount = 1 Then
        Me.klantnr.Value = .Fields("klantnr")
        Me.typewand.Value = .Fields("typewand")
    End If
    .Close
End With
 
ziet er veel belevond uit :thumb:

Alleen nog ga ik eens moeten kijken voor het opslaan dan van de gegevens.



-edit-

het opvragen van de gegevens werkt allesinds al bedankt.
 
Laatst bewerkt:
Geef ook nog even je oplossing; da's wel zo leerzaam!
 
Voor het wijzigen van mijn ingeladen gegevens:

Code:
Dim klantnr As Integer
Dim dossiernr As String
Dim strsql As String

klantnr = Nz(Form_f_opzoeken.klantnrzoeken.Value)
dossiernr = Nz(Form_f_opzoeken.dossiernrzoeken.Value)


strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE ((klantnr ='" & klantnr & "') AND (dossiernr ='" & dossiernr & "'));"

With CurrentDb.OpenRecordset("t_bestellingenwanden")
.Edit

    .Fields("klantnr") = Me.klantnr
    .Fields("typewand") = Me.typewand
    .Fields("dossiernr") = Me.dossiernr
    .Fields("dossiernrde") = Me.dossiernrde
    .Fields("zp") = Me.zp
    .Fields("mp") = Me.mp
    .Fields("hswg") = Me.hswg
    .Fields("hswgp") = Me.hswgp
    .Fields("hswr") = Me.hswr
    .Fields("hswiso") = Me.hswiso
    .Fields("hswmr") = Me.hswmr
    .Fields("fswg") = Me.fswg
    .Fields("fswc") = Me.fswc
    .Fields("bswr") = Me.bswr
    .Fields("bswg") = Me.bswg
    .Fields("artomschrijving") = Me.artomschrijving
    
    .Fields("klantref") = Me.klantref
    .Fields("groep") = Me.groep
    .Fields("eenheden") = Me.eenheden
    .Fields("fabrieknr") = Me.fabrieknr
    .Fields("klantorder") = Me.klantorder
    .Fields("leverorder") = Me.leverorder
    .Fields("akprijs") = Me.akprijs
    .Fields("vkprijs") = Me.vkprijs
    .Fields("abnummer") = Me.abnummer
    .Fields("fabrieknr") = Me.fabrieknr
    .Fields("levernaam") = Me.levernaam
    .Fields("leverstraat") = Me.leverstraat
    .Fields("leverhuisnr") = Me.leverhuisnr
    .Fields("leverpostcode") = Me.leverpostcode
    .Fields("levergemeente") = Me.levergemeente
    .Fields("leverland") = Me.leverland
        
    .Fields("leverdatum") = Me.leverdatum
    .Fields("datumorderbevkl") = Me.datumorderbevkl
    .Fields("afhalingnaam") = Me.afhalingnaam
    .Fields("afhalingdatum") = Me.afhalingdatum
    .Fields("afhalingdeok") = Me.afhalingdeok
    .Fields("afhalingplaat") = Me.afhalingplaat
    .Fields("opmerkingen") = Me.opmerkingen
    
    .Fields("artcreatiefoxpro") = Me.artcreatiefoxpro
    .Fields("orderbevklontvangen") = Me.orderbevklontvangen

.Update
.Close
End With



Voor het verwijderen van de geselecteerde record:

Code:
Dim klantnr As Integer
Dim dossiernr As String
Dim strsql As String

klantnr = Nz(Form_f_opzoeken.klantnrzoeken.Value)
dossiernr = Nz(Form_f_opzoeken.dossiernrzoeken.Value)


strsql = "SELECT klantnr, typewand, zp, mp, hswg, hswgp, hswr, hswiso, hswmr, fswg, fswc, bswr, bswg, dossiernr, dossiernrde," _
& "artomschrijving, klantref, leverdatum, levernaam, leverstraat, leverhuisnr, leverpostcode, levergemeente, leverland, fabrieknr, groep, " _
& "eenheden, klantorder, leverorder, akprijs, vkprijs, abnummer, datumorderbevkl, afhalingnaam , afhalingdatum, afhalingdeok, afhalingplaat, " _
& "opmerkingen , bijlagen, artcreatiefoxpro, orderbevklontvangen" & vbCrLf _
& "FROM t_bestellingenwanden" & vbCrLf _
& "WHERE ((klantnr ='" & klantnr & "') AND (dossiernr ='" & dossiernr & "'));"

With CurrentDb.OpenRecordset("t_bestellingenwanden")
    If .RecordCount = 1 Then
    .Delete
        
    End If
    .Close
End With


Het is waarschijnlijk niet de ideale mannier maar het werkt ook zo.
De database is te groot om hem door te sturen, het gene waar ik hier problemen mee had is maar een heel klein deel van mijn access programma.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan