Bijwerk query middels VBA

Status
Niet open voor verdere reacties.

LauravT

Gebruiker
Lid geworden
14 jun 2012
Berichten
156
Hallo,

Adhv een formulier dient er in de database alles met deze waarde omgezet te worden naar de nieuw opgegeven waarde.
Als ik dit middels een bijwerkquery doe werkt dit prima, echter moet dit adhv de opgegeven waarden op het formulier gebeuren.

Nu heb ik onderstaande code:

Code:
Dim SQL As String
Dim RST As DAO.Recordset

SQL = "SELECT [Taaknummer], [Afdeling], [Naam], [Maatwerk] FROM [Totaal] WHERE [Taaknummer] = " & Forms![Test].Form![TXT_Taaknummer]

Set RST = CurrentDb.OpenRecordset(SQL)
With RST
    .Edit
    .Fields("Afdeling") = [TXT_Afdeling]
    .Fields("Naam") = [TXT_Naam]
    .Fields("Maatwerk") = [TXT_Maatwerk]
    .Update
    .Close
    .Save
End With

Deze werkt, echter alleen maar voor 1 gevonden taaknummer.
Indien er meer taaknummers te vinden zijn, wordt alleen de eerste in de lijst aangepast!

Weet iemand toevallig wat ik fout doe?
 
Inmiddels heb ik zelf al een manier gevonden hoe het lukt, zie hieronder.

Code:
Dim SQL As String
Dim SQL1 As String
Dim SQL2 As String

SQL = "UPDATE Totaal SET Totaal.[Afdeling] = '" & Forms![Test].Form![TXT_Afdeling] & "' WHERE Totaal.Taaknummer= " & Forms![Test].Form![TXT_Taaknummer]
SQL1 = "UPDATE Totaal SET Totaal.[Naam] = '" & Forms![Test].Form![TXT_Naam] & "' WHERE Totaal.Taaknummer= " & Forms![Test].Form![TXT_Taaknummer]
SQL2 = "UPDATE Totaal SET Totaal.[Maatwerk] = '" & Forms![Test].Form![TXT_Maatwerk] & "' WHERE Totaal.Taaknummer= " & Forms![Test].Form![TXT_Taaknummer]

CurrentDb.Execute SQL, dbFailOnError
CurrentDb.Execute SQL1, dbFailOnError
CurrentDb.Execute SQL2, dbFailOnError

Vast niet de meest nette manier, maar het werkt!
 
Er zitten inderdaad nogal wat onhandige uitvoeringsacties in jouw code. Om te beginnen: waarom niet één query gemaakt waarin je alle handelingen in één keer uitvoert? Kan makkelijk. Maar je oorspronkelijke code werkt uiteraard perfect met een kleine aanpassing. En die is eigenlijk logisch: je doet niks met de recordset behalve hem openen. Je moet er echter ook nog eens doorheen lopen om bij het laatste record uit te komen. En dat doe je zo:
Code:
Dim strSQL As String
Dim rst As DAO.Recordset

    strSQL = "SELECT [Taaknummer], [Afdeling], [Naam], [Maatwerk] FROM [Totaal] " _
        & "WHERE [Taaknummer] = " & Me.TXT_Taaknummer
    Set rst = CurrentDb.OpenRecordset(strSQL)
    With rst
        Do While Not .EOF
            .Edit
            !Afdeling = Me.TXT_Afdeling
            !Naam = Me.TXT_Naam
            !Maatwerk = Me.TXT_Maatwerk
            .Update
        Loop
        .Close
    End With
Ik heb, zoals je ziet, ook nog wat andere verbeteringen aangebracht. Zo is het niet nodig om de formulierverwijzing te gebruiken, als de code vanaf datzelfde formulier wordt gestart. Bovendien heb je dan IntelliSense, en die heb je nu niet. Access helpt je waar mogelijk om je het schrijven van code makkelijker te maken. Negeer die hulp niet :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan