ACCESS VBA : Recordset naar historiektabel via selectie werkt niet volledig.

Status
Niet open voor verdere reacties.

fde

Gebruiker
Lid geworden
31 aug 2017
Berichten
110
Op m'n werkformulier (enkelvoudig) staan een aantal knoppen die een ander doorlopend formulier openen.
In dit geval : frm_email_communicatie bevat "ID - TYPE - OMSCHRIJVING - SELECTIEVAKJE.
De bedoeling is dat de communicatie vanuit het doorlopend formulier wordt weggeschreven naar de tabel historiek (tbl_bewegingen).

Ik gebruik hiervoor de volgende code:

Code:
Private Sub btnCommunicatieEmailSelect_Click()
Dim gsSql As String
Dim rsRecord As DAO.Recordset

If Me.chkCommunicatieEmailSelect = True Then

    gsSql = "SELECT* FROM tbl_bewegingen"
    Set rsRecord = CurrentDb.OpenRecordset(gsSql)
        With rsRecord
        .AddNew
        !ID_SOLLICITANT = Me.txtIDSollicitant
        !ID_MEDEWERKER = Me.txtIDMedewerker
        !MEDEWERKER_INITIALEN = Me.txtAangepastDoor
        !ID_COMMUNICATIE = Me.txtCommunicatieID
        !COMMUNICATIE_TYPE = Me.txtCommunicatieType
        !COMMUNICATIE_OMSCHRIJVING = Me.txtCommunicatieOmschrijving
        !DATUM_BEWEGING = Date
        '!DOCUMENT = ""
        .Update
        End With
            If Me.chkCommunicatieEmailSelect = True Then
            Me.chkCommunicatieEmailSelect = False
            End If
End If
DoCmd.Close acForm, Me.Name
End Sub

De code werkt perfect: doch als ik meerdere selectievakjes (in het doorlopend formulier) wordt er steeds maar 1 record wegeschreven naar mijn historiek tabel.
Ik veronderstel dat m'n code niet volledig is. Graag raad aub.
 
Laatst bewerkt:
Ik snap niet wat je bedoelt. In je code staat één selectievakje; waar komt de rest vandaan?
 
frm_email_communicatie bevat "ID - TYPE - OMSCHRIJVING - SELECTIEVAKJE. = een doorlopend formulier waarvan de recordbron een query is.
Als je het formulier opent worden er een zevental records weergegeven dus ook 7x een selectievakjes.
Dus als ik meer dan één mogelijkheid aanvink wordt er slechts 1 record weggeschreven in plaats van het aantal aangevinkte mogelijkheden.
 
Als je het formulier opent worden er een zevental records weergegeven dus ook 7x een selectievakjes.
Dat is dus een misverstand: er is maar één selectievakje en dat zie je op het formulier. Dat er 7 records zijn met dat selectievakje is een heel ander verhaal.
Als je wilt dat het formulier (de query dus) wordt gebruikt om alle records door te lopen, dan moet je een recordset gebruiken die op basis van het selectievakje het record wegschrijft. Een LOOP dus.
 
Do While ...... Loop.
Heb het geprobeerd en ik had ineens meer dan 7k records in m'n historiek (lees bewegings tabel) staan. Dit kan niet de bedoeling zijn.
Maar ja ik ben dan ook geen VB (VBA) specialist.
 
Tja, zonder de db erbij wordt het natuurlijk lastig maar in essentie komt het er op neer dat je de query onder het formulier moet gebruiken met het gefilterde selectievakje als criterium. En daar maak je de loop van. Iets als:

Code:
Dim rsOpen As DAO.Recordset, rsAdd As DAO.Recordset

    Set rsOpen = CurrentDb.OpenRecordset("Select * From qTemp WHERE chkCommunicatieEmailSelect = TRUE")
    Set rsAdd = CurrentDb.OpenRecordset("bewegingen")
    rsOpen.MoveFirst
    Do Until rsOpen.EOF
        With rsAdd
            .AddNew
            !ID_SOLLICITANT = rsOpen!IDSollicitant
            !ID_MEDEWERKER = rsOpen!IDMedewerker
            !MEDEWERKER_INITIALEN = rsOpen!AangepastDoor
            !ID_COMMUNICATIE = rsOpen!CommunicatieID
            !COMMUNICATIE_TYPE = rsOpen!CommunicatieType
            !COMMUNICATIE_OMSCHRIJVING = rsOpen!CommunicatieOmschrijving
            !DATUM_BEWEGING = Date
            '!DOCUMENT = ""
            .Update
        End With
        Me.chkCommunicatieEmailSelect = False
        rsOpen.MoveNext
    Loop
 
In ieder geval runt de loop niet door; dus geen duizenden record erbij in m'n historiek tabel. Dat is al positief.
Maar net zoals mijn eerdere code wordt er slechts 1 record weggeschreven naar m'n historiek tabel.
Misschien heeft het iets te maken met jou gedeelte "rsOpen! ....." ? Niet alle velden kunnen gedefinieerd worden met "rsOpen! .....)

Hierbij de jou code verder aangepast volgens mijn situatie.

Code:
Private Sub btnCommunicatieEmailSelect_Click()
Dim rsOpen As DAO.Recordset, rsAdd As DAO.Recordset

    Set rsOpen = CurrentDb.OpenRecordset("Select * From qry_communicatie_select_email WHERE COMMUNICATIE_SELECT = TRUE")
    Set rsAdd = CurrentDb.OpenRecordset("tbl_bewegingen")
    rsOpen.MoveFirst
    Do Until rsOpen.EOF
        With rsAdd
            .AddNew
            !ID_SOLLICITANT = Me.txtIDSollicitant
            !ID_MEDEWERKER = Me.txtIDMedewerker
            !MEDEWERKER_INITIALEN = Me.txtAangepastDoor
            !ID_COMMUNICATIE = rsOpen!ID_COMMUNICATIE
            !COMMUNICATIE_TYPE = rsOpen!COMMUNICATIE_TYPE
            !COMMUNICATIE_OMSCHRIJVING = rsOpen!COMMUNICATIE_OMSCHRIJVING
            !DATUM_BEWEGING = Date
            '!DOCUMENT = ""
            .Update
        End With
        Me.chkCommunicatieEmail = False
        rsOpen.MoveNext
    Loop

Even ter info: zoals je merkt in de aangepaste code heb ik een aantal velden aanpast naar "Me.txt ....." ; dit zijn de velden die niet in de recordbron van deze form aanwezig zijn maar via een expressie (vanuit de tabel "tbl_sollicitant") worden weergegeven.
 
Niet alle velden kunnen gedefinieerd worden met "rsOpen!
Wat is dát nou weer voor rare tekst? Dat moet je eens uitleggen, ik heb nog nooit gehoord dat een recordset een veld uit eigen beweging discrimineert.... Maar even ter zake: doet jouw code het nu? Het lijkt mij van niet, want deze mix van formuliergegevens en een tabel gaat vermoedelijk nooit goed werken.
 
Ik laat deze topic even openstaan zodat ik verder op onderzoek / leerfase kan.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan