Wat gaat hier niet goed

Status
Niet open voor verdere reacties.

BartSr

Gebruiker
Lid geworden
26 aug 2008
Berichten
240
HTML:
Sub Comprimeren()
gstr1 = "Deze functie maakt de huidige administratie kleiner, door de boekingen van elke rekening tot 1 regel terug te brengen."
gstr1 = gstr1 + vbNewLine & "Daardoor geven de functies REKENINGKAARTEN weinig informatie meer."
gstr1 = gstr1 + vbNewLine & "Wil je dit?"
If MsgBox(gstr1, vbYesNo, "Comprimeren") = 7 Then Exit Sub
jaar = Contact("Haal", "mmo", "SELECT * FROM H_Pointers WHERE id=2")
If Val(jaar) < 2000 Then MsgBox "Ga eerst naar parameters en voer het huidig boekjaar in ": Exit Sub
    Set Tabel1 = CurrentDb.OpenRecordset("select * from t_grootboek where reknr<10000"): Gint2 = 0
    Tabel1.MoveFirst
    Do Until Tabel1.EOF
        gstr1 = "SELECT T_Boekingen.*, T_Grootboek.RekNr, T_Grootboek.Groepsrekening"
        gstr1 = gstr1 & " FROM T_Boekingen INNER JOIN T_Grootboek ON T_Boekingen.RekNr = T_Grootboek.RekNr WHERE (T_Grootboek.RekNr)=" & Tabel1!RekNr & ";"
        Set tabel2 = CurrentDb.OpenRecordset(gstr1):
        Set tabel3 = CurrentDb.OpenRecordset("T_Boekingen")
        If tabel2.RecordCount = 0 Then GoTo Verder
            Gcur1 = 0: tabel2.MoveFirst
            For Gint1 = 1 To tabel2.RecordCount
                If tabel2!DC = "D" Then Gcur1 = Gcur1 + tabel2!Bedrag Else Gcur1 = Gcur1 - tabel2!Bedrag
                gstr1 = "delete T_Boekingen.* From T_Boekingen WHERE T_Boekingen.RekNr = " & Tabel1!RekNr & " and T_Boekingen.boekstuk = " & fnInQuotes(tabel2!Boekstuk)
                DoCmd.SetWarnings False
                DoCmd.RunSQL gstr1
                DoCmd.SetWarnings True
                
            Next Gint1

            
            tabel3.AddNew
            If Gcur1 >= 0 Then tabel3!DC = "D": tabel3!Bedrag = Gcur1
            If Gcur1 < 0 Then tabel3!DC = "C": tabel3!Bedrag = Gcur1
            tabel3!Omschrijving = "Verdichte boeking"
            tabel3!Datum = "31-12-" & jaar
            tabel3!RekNr = Tabel1!RekNr
            Gcur1 = 0: Gint2 = Gint2 + 1
            tabel3.Update
            tabel2.Close
Verder:
    Tabel1.MoveNext
    Loop
    Tabel1.Close
    If Gint2 > 0 Then
        
        
        MsgBox "Het aantal gecomprimeerde rekeningen is " & Gint2
    End If


End Sub
De bedoeling is om in de regels 19-22 een boekingsregel te verwijderen maar dat gebeurt niet!
 
na regel 12: gstr1 = .... kan je de regel debug.print gstr1 toevoegen. Stap voor stap de code uitvoeren en het resultaat uit de immediate pane kopiëren en in een query SQL venster plakken, uitvoeren en kijken of dit een resultaat geeft.
Ik ken access SQL niet zo goed als T-SQL, maar normaal schrijf je een delete query als Delete from [tabelnaam] where [criteria] zonder de T_Boekingen.* tussen de delete en from instructies.
 
Ik zie zat problemen; om te beginnen: je hebt de tabel t_Boekingen wel een paar keer opengezet. In de variabele gstr1 (gelinkt aan T_Grootboek), in tabel3... Nota bene heb je tabel3 ook in gebruik om nieuwe records toe te voegen; waarom gebruik je die recordset dan niet om het gekozen record te verwijderen? Lijkt mij een stuk simpeler.
 
Octafish zegt
Code:
waarom gebruik je die recordset dan niet om het gekozen record te verwijderen? Lijkt mij een stuk simpeler.
Dat deed ik eerder al maar dat werkte ook niet.
 
'Wat gaat hier niet goed' is nogal een pakkende titel. Code hoort tussen codetags. Je bent hier vandaag toch niet voor het eerst?
 
Ik heb het opgelost en wel op deze manier
Code:
Sub Comprimeren()
gstr1 = "Deze functie maakt de huidige administratie kleiner, door de boekingen van elke rekening tot 1 regel terug te brengen."
gstr1 = gstr1 + vbNewLine & "Daardoor geven de functies REKENINGKAARTEN weinig informatie meer."
gstr1 = gstr1 + vbNewLine & "Wil je dit?"
If MsgBox(gstr1, vbYesNo, "Comprimeren") = 7 Then Exit Sub
jaar = Contact("Haal", "mmo", "SELECT * FROM H_Pointers WHERE id=2")
If Val(jaar) < 2000 Then MsgBox "Ga eerst naar parameters en voer het huidig boekjaar in ": Exit Sub
    Set Tabel1 = CurrentDb.OpenRecordset("t_grootboek"): Gint2 = 0
    Tabel1.MoveFirst
    Do Until Tabel1.EOF
        gstr1 = "SELECT T_Boekingen.*, T_Grootboek.RekNr, T_Grootboek.Groepsrekening"
        gstr1 = gstr1 & " FROM T_Boekingen INNER JOIN T_Grootboek ON T_Boekingen.RekNr = T_Grootboek.RekNr WHERE (T_Grootboek.RekNr)=" & Tabel1!RekNr & ";"
        Set tabel2 = CurrentDb.OpenRecordset(gstr1):
        If tabel2.RecordCount > 0 Then tabel2.MoveLast
        If tabel2.RecordCount < 2 Then GoTo Verder
            Gcur1 = 0: tabel2.MoveFirst
            For Gint1 = 1 To tabel2.RecordCount
            If Gint1 > 1 Then tabel2.MoveNext
                If tabel2!DC = "D" Then Gcur1 = Gcur1 + tabel2!Bedrag Else Gcur1 = Gcur1 - tabel2!Bedrag
                tabel2.Edit: tabel2!Datum = 0: tabel2.Update
            Next Gint1

            tabel2.MoveFirst
            tabel2.Edit:
            If Gcur1 >= 0 Then tabel2!DC = "D": tabel2!Bedrag = Gcur1:
            If Gcur1 < 0 Then tabel2!DC = "C": tabel2!Bedrag = Gcur1
            tabel2!Omschrijving = "Verdichte boeking"
            tabel2!Datum = "31-12-" & jaar
            Gcur1 = 0: Gint2 = Gint2 + 1
            tabel2.Update
            tabel2.Close
Verder:
    Tabel1.MoveNext
    Loop
    Tabel1.Close
    If Gint2 > 0 Then
        
        gstr1 = "DELETE FROM T_boekingen WHERE T_Boekingen!datum = 0; "
        DoCmd.SetWarnings False
        CurrentDb.Execute gstr1, dbFailOnError
        DoCmd.SetWarnings True
        MsgBox "Het aantal gecomprimeerde rekeningen is " & Gint2
    End If


End Sub
Iedereen bedankt voor het meedenken !
Bart
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan