Do While ... Loop

Status
Niet open voor verdere reacties.
Code:
dim rst as recordset

set rst = currentdb.openrecordset("table1")

do while not rst.eof
'
'     do your thing
'
    rst.movenext
loop
record voor record wordt de set doorlopen tot het einde. rst.eof is dan true

HTH:D
 
Beste, Alvast bedankt voor uw snelle reactie
toch lukt het me nog niet om het correct uit te voeren
De situatie is als volgt:
In het eerste deel van de code wordt een query uitgevoerd om een aantal record toe te voegen dit zijn de onderdelen van een test die gekoppeld zijn aan ��n bepaalde hond.
Dat werkt goed en is dus geen probleem.

In het tweede deel wil ik opnieuw een query uitvoeren die dan de subonderdelen toevoegd. Dit gebeurt dan in een subformulier.
Dit werkt ook alleen krijg ik op laatste een foutmelding dat er een fout in de code staat, omdat hij niet naar een volgdend record kan gaan om dat het het laatste is. Die foutmelding wil ik ontlopen.

Hier de code die er momenteel staat.

Code:
Private Sub Knop135_Click()
Dim Msg, Style, Title, Response, MyString, QueryName
Dim Check, Counter
Dim rst As Recordset


If IsNull(Me![GTOnderdeel]) Then
    'Msg = "Wilt u Query uitvoeren?"
    'Style = vbOKOnly + vbInformation + vbDefaultButton2
    'Title = "Let op!"
    'Response = MsgBox(Msg, Style, Title)
    QueryName = "Gedragstest Onderdelen Toevoegen"
    DoCmd.OpenQuery QueryName, acViewNormal, acEdit
    DoCmd.Requery
    
        
Else
    Msg = "Reeds uitgevoerd"
    Style = vbOKOnly + vbCritical + vbDefaultButton2
    Title = "Let op!"

    Response = MsgBox(Msg, Style, Title)
End If


Set rst = CurrentDb.OpenRecordset("Qry GT Honden")

If IsNull(Me![Subform GT Honden2]![GTSubOnderdeel]) Then
    Do
        Do While Not rst.EOF

        'Do While Counter < 20
            Counter = Counter + 1
            'Msg = rst
            'Style = vbOKOnly + vbInformation + vbDefaultButton2
            'Title = "Let op!"
            'Response = MsgBox(Msg, Style, Title)
            QueryName = "Gedragstest SubOnderdelen Toevoegen"
            DoCmd.OpenQuery QueryName, acViewNormal, acEdit
            DoCmd.GoToRecord , , acNext
            'rst.MoveNext
                                   
            'If Counter = 10 Then
            
             '   Check = False
             '   Exit Do
            'End If
        Loop
    Loop
 DoCmd.GoToRecord , , acFirst
    
        
Else
    Msg = "Reeds uitgevoerd"
    Style = vbOKOnly + vbCritical + vbDefaultButton2
    Title = "Let op!"

    Response = MsgBox(Msg, Style, Title)
End If

End Sub
 
Laatst bewerkt:
Leg eens uit wat je eigenlijk wilt doen.... Je hebt zo te zien een bijwerkquery die je laat lopen ("Gedragstest Onderdelen Toevoegen"). Daarna open je een Recordset ("Qry GT Honden") waar je vervolgens niks mee doet.... I.p.v. daar iets te doen, voer je weer een bijwerkquery uit 9"Gedragstest SubOnderdelen Toevoegen") die geen enkele relatie heeft met de geopende recordset. En dan ga je ook nog eens naar het volgende record op het formulier! Dus ik ben een beetje verbaasd...

(p.s.) kun je (liefst me terugwerkende kracht) je code opmaken met de Code tag (knop #)?
 
Je hebt in je code het Do statement gevolgd door een Do While not rst.eof.
Verderop gevolgd door tweemaal een Loop statement. Waar je vervolgens nooit meer uitkomt.
Dit gaat niet helemaal goed.

Wat probeer je te doen?
 
(p.s.) kun je (liefst me terugwerkende kracht) je code opmaken met de Code tag (knop #)?

Code:
Private Sub Knop135_Click()
Dim Msg, Style, Title, Response, MyString, QueryName
Dim Check, Counter
Dim rst As Recordset


If IsNull(Me![GTOnderdeel]) Then
'Msg = "Wilt u Query uitvoeren?"
'Style = vbOKOnly + vbInformation + vbDefaultButton2
'Title = "Let op!"
'Response = MsgBox(Msg, Style, Title)
QueryName = "Gedragstest Onderdelen Toevoegen"
DoCmd.OpenQuery QueryName, acViewNormal, acEdit
DoCmd.Requery


Else
Msg = "Reeds uitgevoerd"
Style = vbOKOnly + vbCritical + vbDefaultButton2
Title = "Let op!"

Response = MsgBox(Msg, Style, Title)
End If


Set rst = CurrentDb.OpenRecordset("Qry GT Honden")

If IsNull(Me![Subform GT Honden2]![GTSubOnderdeel]) Then
Do
Do While Not rst.EOF

'Do While Counter < 20
Counter = Counter + 1
'Msg = rst
'Style = vbOKOnly + vbInformation + vbDefaultButton2
'Title = "Let op!"
'Response = MsgBox(Msg, Style, Title)
QueryName = "Gedragstest SubOnderdelen Toevoegen"
DoCmd.OpenQuery QueryName, acViewNormal, acEdit
DoCmd.GoToRecord , , acNext
'rst.MoveNext

'If Counter = 10 Then

' Check = False
' Exit Do
'End If
Loop
Loop
DoCmd.GoToRecord , , acFirst


Else
Msg = "Reeds uitgevoerd"
Style = vbOKOnly + vbCritical + vbDefaultButton2
Title = "Let op!"

Response = MsgBox(Msg, Style, Title)
End If

End Sub
 
Ik bedoelde eigenlijk de code uit je vorige post; die kun je bewerken en alsnog opmaken met de CODE tag ;)
Ik mis eigenlijk nog antwoord op de vraag die Guus heeft gesteld...
 
Wat ik probeer te doen is het volgende:
Ik heb een aantal honden waarmee ik een gedragstest doe, dat is elke maand opnieuw.
Die gedragstesten bestaan uit een aantal onderdelen, dit kan verschillend zijn afhankelijk welke gedragstest ik doe.
Per onderdeel zijn er enkele criteria's (subonderdelen) die ik noteer om tot een eindbesluit te komen.

Als ik de volgende code gebruik loopt het goed, maar het aantal is niet altijd 7, dit is afhankelijk van het aantal records dat in het eerste deel is toegevoegd.

Code:
Private Sub Knop135_Click()
Dim Msg, Style, Title, Response, MyString, QueryName
Dim Check, Counter

If IsNull(Me![GTOnderdeel]) Then
    'Msg = "Wilt u Query uitvoeren?"
    'Style = vbOKOnly + vbInformation + vbDefaultButton2
    'Title = "Let op!"
    'Response = MsgBox(Msg, Style, Title)
    QueryName = "Gedragstest Onderdelen Toevoegen"
    DoCmd.OpenQuery QueryName, acViewNormal, acEdit
    DoCmd.Requery
    
        
Else
    Msg = "Reeds uitgevoerd"
    Style = vbOKOnly + vbCritical + vbDefaultButton2
    Title = "Let op!"

    Response = MsgBox(Msg, Style, Title)
End If

If IsNull(Me![Subform GT Honden2]![GTSubOnderdeel]) Then
    Do
        Do While Counter < 20
            Counter = Counter + 1
            'Msg = Counter
            'Style = vbOKOnly + vbInformation + vbDefaultButton2
            Title = "Let op!"
            'Response = MsgBox(Msg, Style, Title)
            QueryName = "Gedragstest SubOnderdelen Toevoegen"
            DoCmd.OpenQuery QueryName, acViewNormal, acEdit
            DoCmd.GoToRecord , , acNext
                                    
            If Counter = 7 Then
                Check = False
                Exit Do
            End If
        Loop
    Loop Until Check = False
 DoCmd.GoToRecord , , acFirst
    
        
Else
    Msg = "Reeds uitgevoerd"
    Style = vbOKOnly + vbCritical + vbDefaultButton2
    Title = "Let op!"

    Response = MsgBox(Msg, Style, Title)
End If
End Sub
 
Ik snap nog steeds niet wat je aan het doen bent.... er zitten ook opdrachten in die volgens mij overbodig zijn. Of niks doen?
Wat doet bijvoorbeeld de tweede opdracht?
Code:
    DoCmd.OpenQuery QueryName, acViewNormal, acEdit
    DoCmd.Requery
Wil je de query tweemaal uitvoeren?
En hier?
Code:
    DoCmd.OpenQuery QueryName, acViewNormal, acEdit
    DoCmd.GoToRecord , , acNext

Verder laat je een teller doorlopen naar 20, maar stop je de procedure bij 7??
Kun je niet een voorbeeldje voor ons maken?
 
Beste,

Ik heb een voorbeeld database gemaakt maar krijg het niet geupload daar het 148 groot is en slechts 100 toegelaten is.
Hoe kan ik dit oplossen?
PS het is reeds gezipt
 
Je kunt met Winrar het bestand opsplitsen in brokken van 100kb. Die kun je dan wel uploaden. In de eerste post staat hoe je dat moet doen, als je er zelf niet uitkomt.
 
Beste,

Ik probeer het bestand kleinder te maken met WinRar, maar hij blijft het op een grootte van 105.251 kb zetten, ook al zet ik het op een grootte van 100 mb, wat nog steeds te groot is om als bijlagen in te geven.
Wat kan ik nog meer doen?
 
De grootte van het deelbestand moet 102400 kb zijn. Waarschijnlijk heb je wat nulletjes teveel getypt...
 
Hoi,

Ik heb een voorbeeld database online kunnen zetten. Als je naar het formulier Gedragstest gaan staat er een knop met vermelidng 'Knop 135'.
Het is dus de bedoeling als de loop gedaan is of wordt gestopt door een foutmelding dat ik die foutmelding kan voorkomen of niet zichtbaar mag worden.
 
Hoi,

Is het mischien mogelijk om er een 'On error' functie in te verwerken? Zodanig dat er gewoon een melding komt die je zelf kan bepalen.
Alvast bedankt
 
Dat moet in beginsel altijd wel kunnen.... Ik doe een poging!
 
Beste OctaFish,

Heb je toevallig al een keer kunnen kijken of er een mogelijke oplossing is voor mijn vraag?
Alvast bedankt voor uw hulp ;-)

Isabelle
 
Nog niet; ik moet mijn tijd altijd verdelen tussen Access 2003 en/of 2010 want je kunt ze niet tegelijkertijd draaien. Maar vanavond doe ik wel een 2010 avondje ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan