Records verwijderen met een code

Status
Niet open voor verdere reacties.

Basbrommer

Gebruiker
Lid geworden
3 mei 2005
Berichten
101
Aan deze onderstaande code wil graag op het eind nog een opdracht toevoegen. De bedoeling is dat alle rocords verwijderd worden met de volgende voorwaarde ((Presentie.Datum)<Date()-7) AND ((Presentie.Code) Is Null). Alleen weet ik niet hoe ik dat moet opschrijven.
Kan iemand mij hierbij helpen?

Groeten Bas

Code:
Option Compare Database
Public Sub aanvullen()
    Dim dtehdatum   As Date 'Variabele waar andere variabelen, gebaseerd op een dag, gebruik van maken
    dtehdatum = Format(DMax("datum", "presentie", "dagdnr=21"), "dd/mm/yyyy")
    If dtehdatum < Date + 14 Then
    'Variabelen aanmaken.
        Dim strSql      As String 'Variabele voor gegevens uit Rooster
        Dim dteMAdatum  As Date 'Variabele voor de maandag
        Dim dteDIdatum  As Date 'Variabele voor de dinsdag
        Dim dteWOdatum  As Date 'Variabele voor de woensdag
        Dim dteDOdatum  As Date 'Variabele voor de donderdag
        Dim dteVRdatum  As Date 'Variabele voor de vrijdag
        Dim dteZAdatum  As Date 'Variabele voor de zaterdag
        Dim dteZOdatum  As Date 'Variabele voor de zondag
    'Variabelen voorzien van de juiste informatie.
        strSql = "INSERT INTO presentie (rooster, dagdnr, cursist, werkplek)SELECT rooster.id, dagdeel.dagdnr, rooster.cursist, rooster.werkplek FROM roosterafwezig WHERE (((rooster.einddatum)is null))"
                                                           
        dteMAdatum = Format(dtehdatum + 7, "mm/dd/yyyy")
        dteDIdatum = Format(dtehdatum + 8, "mm/dd/yyyy")
        dteWOdatum = Format(dtehdatum + 9, "mm/dd/yyyy")
        dteDOdatum = Format(dtehdatum + 10, "mm/dd/yyyy")
        dteVRdatum = Format(dtehdatum + 11, "mm/dd/yyyy")
        dteZAdatum = Format(dtehdatum + 12, "mm/dd/yyyy")
        dteZOdatum = Format(dtehdatum + 13, "mm/dd/yyyy")
    'Records toevoegen aan het bestand presentie
        CurrentDb.Execute strSql
    'Pas gekopieerde records voorzien van datum. Zij maken gebruik van de hierboven aangemaakte variabelen.
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteZOdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 1))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteMAdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 2))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteDIdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 3))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteWOdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 4))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteDOdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 5))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteVRdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 6))"
        CurrentDb.Execute "UPDATE presentie SET presentie.datum = #" & Format(dteZAdatum, "dd/mm/yyyy") & "# WHERE (((presentie.datum) Is Null) And (left((presentie.dagdnr), 1) = 7))"
    End If
End Sub
 
Laatst bewerkt:
Kun je om te beginnen die lap code opmaken met de Code tag (Knop met # er op). Kijk ik ondertussen of ik iets kan verzinnen...
 
Bovendien vraag ik me af of de Insert query wel werkt, want je gebruikt velden uit tabellen die niet in de FROM worden vermeld. En er is ook geen join tussen die tabellen...
 
Je hele code zou je bijvoorbeeld kunnen vervangen door:
Code:
Public Sub aanvullen()
Dim dtehdatum As Date 'Datumvariabele
Dim strSql As String
Dim i As Integer
dtehdatum = CDate(DMax("datum", "presentie", "dagdnr=21"))
If dtehdatum < Date + 14 Then
    strSql = "INSERT INTO presentie (rooster, dagdnr, cursist, werkplek) " _
        & "SELECT rooster.id, dagdeel.dagdnr, rooster.cursist, rooster.werkplek " _
        & "FROM roosterafwezig INNER JOIN rooster INNER JOIN dagdeel " _
        & "ON roosterafwezig.id = rooster.id ON roosterafwezig.dagnr = dagdeel.dagnr " _
        & "INNER JOIN " _
        & "WHERE (rooster.einddatum is null)"
    CurrentDb.Execute strSql
    'Met een loopje de tabel Presentie bijwerken
    'Hierbij wordt met Cdbl en Cdate de datum geconverteerd naar een getal, en weer terug naar een datum.
    For i = 7 To 13
        strSql = "UPDATE presentie SET datum = Cdate(" & CDbl(dtehdatum) + i & ") WHERE (datum Is Null AND Left(dagdnr, 1) = 1)"
        CurrentDb.Execute strSql, dbFailOnError
    Next i
End If
End Sub
Daarbij heb ik dus een slag geslagen naar de joins tussen de tabellen, want ik weet niet hoe de tabellen zijn gekoppeld. Als je alle velden uit [roosterafwezig] haalt, dan heb je uiteraard geen joins nodig.
 
De code werkt zoals het nu geschreven staat. Verder gaat het mij om records te verwijderen die aan deze voorwaarde voldoet. Als het anders geschreven moet worden dan is dat prima. Deze voorwaarde heb ik met Query gemaakt om de voorwaarde kort te kunnen omschrijven. Ik hoopte dat het niet te ingewikkeld hoeft te zijn.

Fijn dat je wilt helpen.

Groeten Bas
 
Ik ga kijken of het werkt. Wat ik vergeten ben te vermelden, is dat het 2 verschillende opdrachten zijn. De eerste met het toevoegen van records en die bewerken. De tweede gaat over het verwijderen. Ik dacht deze 2 samen te voegen omdat beiden het zelfde tabel gebruiken.
 
Laatst bewerkt:
Hij geeft een foutmelding bij het uitvoeren
Code:
CurrentDb.Execute strSql
Als het makkerlijker is om de opdracht te splitsen dan mag dat ook.
 
Dan zou dit alles moeten doen:
Code:
Public Sub aanvullen()
Dim dtehdatum As Date 'Datumvariabele
Dim strSql As String
Dim i As Integer
    dtehdatum = CDate(DMax("datum", "presentie", "dagdnr=21"))
    If dtehdatum < Date + 14 Then
        strSql = "INSERT INTO Presentie (rooster, dagdnr, cursist, werkplek) " _
            & "SELECT id, dagdnr, cursist, werkplek " _
            & "FROM roosterafwezig " _
            & "WHERE (einddatum Is Null)"
        CurrentDb.Execute strSql
        'Met een loopje de tabel Presentie bijwerken
        'Hierbij wordt met Cdbl en Cdate de datum geconverteerd naar een getal, en weer terug naar een datum.
        For i = 7 To 13
            strSql = "UPDATE presentie SET datum = Cdate(" & CDbl(dtehdatum) + i & ") WHERE (datum Is Null AND Left(dagdnr, 1) = 1)"
            CurrentDb.Execute strSql, dbFailOnError
        Next i
    End If
    strSql = "DELETE presentie.* FROM presentie " _
        & "WHERE ((Datum<Date()-7) AND (Code Is Null));"
    CurrentDb.Execute strSql
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan