Toon posts:

[VBA] Loop binnen loop draait maar 1 keer

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met het bouwen van een applicatie in Access 2003 om presentie te registreren. Een onderdeel hier van is de ziekmelding. Omdat alleen de eerste dag van de ziekte geregistreerd wordt (en dus niet de duur en het moment van beterschap) moet ik dat zelf uitzoeken. De zieke is dus afwezig tot de eerste melding van aanwezigheid. Als Jan op zich op maandag ziek meldt moet de applicatie weten dat hij (wanneer hij zich niet meldt) dinsdag ook nog ziek is. Op zich is dit niet zo'n probleem; gewoon een tabelletje met zieken bijhouden. Nu wil ik dat deze tabel dagelijks bijgewerkt wordt door de nieuwe zieken toe te voegen (en de mensen die weer aanwezig zijn te verwijderen). Hier heb ik het volgende stukje code voor gebrouwen.

VBScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    Dim DB As Database
    Dim RS1 As Recordset
    Dim RS2 As Recordset
    Dim RS3 As Recordset
    Dim Bestaat As Integer
        
    Set DB = CurrentDb
    Set RS1 = DB.OpenRecordset("dbo_ar_absence_reports")
    Set RS2 = DB.OpenRecordset("tbl_geoorloofd_afwezig")
    Set RS3 = DB.OpenRecordset("qry_rooster_stap2")
    Bestaat = 0
    
    Do Until RS1.EOF
        If RS1("REPORT_DATE").Value = RS3("fld_lesdatum").Value Then
            Do Until RS2.EOF
                If RS2("fld_student_id").Value = RS1("STUDENTID").Value Then
                    Bestaat = 1
                End If
            RS2.MoveNext
            Loop
            If Bestaat = 0 Then
                RS2.AddNew
                RS2("fld_student_id").Value = RS1("STUDENTID").Value
                RS2.Update
            End If
        End If
    Bestaat = 0
    RS1.MoveNext
    Loop
    
    RS1.Close
    RS2.Close
    RS3.Close
    DB.Close
    
    Set RS1 = Nothing
    Set RS2 = Nothing
    Set RS3 = Nothing
    Set DB = Nothing
    
    MsgBox "Klaar!", vbInformation, "Info"


De eerste keer (als te tabel tbl_geoorloofd_afwezig nog leeg is) werkt het prima. De volgende keren krijg ik de melding dat de te schrijven records al bestaan. Wat blijkt nou: Het loopje

VBScript:
1
2
3
4
5
6
            Do Until RS2.EOF
                If RS2("fld_student_id").Value = RS1("STUDENTID").Value Then
                    Bestaat = 1
                End If
            RS2.MoveNext
            Loop


wordt maar 1 keer uitgevoerd; de eerste keer. Dat wil dus zeggen dat de variabele "bestaat" dus, op de eerste keer na, altijd 0 is en er dus altijd een record toe gevoegd moet worden.

Wat doe ik fout? Waarom wordt het loopje maar 1 keer uitgevoerd? En allerbelangrijkste is: Wat doe ik er aan?

  • Daspeed
  • Registratie: Maart 2001
  • Laatst online: 09:49
Ben je niet vergeten een RS2.MoveFirst te plaatsen?

Verwijderd

Topicstarter
Doh! |:(

Misschien handig als ik weer vooraan begin met zoeken ipv aan het eind van mijn tabel.

Thnx

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 11:06

Janoz

Moderator Devschuur®

!litemod

Het lijkt me trouwens dat dit een heel stuk mooier kan door gewoon een fatsoenlijke query te gebruiken. Je hele code kan worden terug gebracht naar 2 queries. Een select om te kijken of hij bestaat en een insert wanneer er een toegevoegd moet worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'