Fehlermeldung bei RecordSet
Hallo zusammen =),
hoffe es kann mir jemand hierbei helfen.
Und zwar habe ich eine Datenbank, in der ich jetzt einen RecordSet mit ein paar zusätzlichen IF Abfragen programmiert habe, bei dessen Ausführung allerdings der Fehler "LOOP WITHOUT DO" angezeigt wird. Wenn ich dann alles bis auf den RecordSet per ' ausblende funktioniert der RS einwandfrei.
Ich weiß es sieht sehr viel und kompliziert aus aber das ist es eigentlich gar nicht. Kurz zur Erklärung:
1. Es wird geschaut ist ein bestimmtes File offen oder nicht? -Falls JA, dann wird abgebrochen, ansonsten weiter gemacht.
2. Der Benutzter wird gefragt ob alles gedruckt werden soll, oder einzeln. Falls Alles (Jes), dann wird der RecordSet gestarten, falls einzeln der Report geöffnet
3. Hat der User mit JA geantwortet wird wie gesagt der RS mit einem qry gestartet und dann soll der Inhalt des RS in eine tbl geschrieben werden. Wenn der schreibvorgang erfolgt ist, soll der Benutzter gefragt werden ob weiter gemacht wird, oder ein Abbruch erfolgen soll.
Das wars auch schon. Falls es noch Fragen gibt, bitte kurz melden.
Vielen Dank für eure Hilfe!
Liebe Grüße,
Robert
Hier der Code:
hoffe es kann mir jemand hierbei helfen.
Und zwar habe ich eine Datenbank, in der ich jetzt einen RecordSet mit ein paar zusätzlichen IF Abfragen programmiert habe, bei dessen Ausführung allerdings der Fehler "LOOP WITHOUT DO" angezeigt wird. Wenn ich dann alles bis auf den RecordSet per ' ausblende funktioniert der RS einwandfrei.
Ich weiß es sieht sehr viel und kompliziert aus aber das ist es eigentlich gar nicht. Kurz zur Erklärung:
1. Es wird geschaut ist ein bestimmtes File offen oder nicht? -Falls JA, dann wird abgebrochen, ansonsten weiter gemacht.
2. Der Benutzter wird gefragt ob alles gedruckt werden soll, oder einzeln. Falls Alles (Jes), dann wird der RecordSet gestarten, falls einzeln der Report geöffnet
3. Hat der User mit JA geantwortet wird wie gesagt der RS mit einem qry gestartet und dann soll der Inhalt des RS in eine tbl geschrieben werden. Wenn der schreibvorgang erfolgt ist, soll der Benutzter gefragt werden ob weiter gemacht wird, oder ein Abbruch erfolgen soll.
Das wars auch schon. Falls es noch Fragen gibt, bitte kurz melden.
Vielen Dank für eure Hilfe!
Liebe Grüße,
Robert
Hier der Code:
Private Sub cmdReport_Click()
Dim AbfrageAuto As Integer
'Hier frage ich ab ob ein bestimmtes File nicht geöffnet ist - FUNKTIONIERT!
Const sPath As String = "M:\Central\EU-Operations\Administration\Finance_Controlling_Invoicing\SA Attachments\"
Const sFile As String = "Sammlung_SA.xls"
If DateiIstFrei(sPath & sFile) Then
'Wenn das File frei ist DANN
'Wird die Frage gestellt ob Ja oder Nein
AbfrageAuto = MsgBox("Print all?", vbYesNo)
'JA
If AbfrageAuto = 6 Then
'Hier muss noch etwas hin aber da bin ich noch am basten
Dim rs As ADODB.Recordset
Dim AbfrageRecord As Integer
Set rs = New ADODB.Recordset
rs.Open "qrySAvoll_nnFaktSum_Auto", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
'Jetzt soll vom Recordset ein Wert in eine andere Tabelle geschrieben werden, dies mache ich durch ein Formular im Hintergrund
DoCmd.OpenForm "frmTempAuto", acNormal, , , acFormAdd, acIcon
Forms!frmTempAuto!Study = rs!Kundenauftrag
DoCmd.Close acForm, "frmTempAuto"
'Damit ist das Schreiben der Daten beendet
'Jetzt soll eine Frage gestellt werden ob der nächste Record im Recordset geschrieben werden soll oder nicht, wenn ja dann soll es zum LOOP kommen
AbrageRecord = MsgBox("Next study?", vbOKCancel)
If AbfrageRecord = 1 Then
rs.MoveNext
Loop
'Ansonsten wird geschlossen
Else
rs.Close
End Sub
End If
rs.Close
End Sub
'Wenn alle durch sind DONE
'Sollte jemand oben bei der Frage "Print all" nein sagen
Else
DoCmd.OpenReport "rptSAvoll_nnFakt_neu", acViewPreview
'SOllte das File nicht frei sein
Else
MsgBox "The file 'Sammlung_SA.xls' is already opened. Please close it first!"
End If
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 99730
Url: https://administrator.de/forum/fehlermeldung-bei-recordset-99730.html
Ausgedruckt am: 16.04.2025 um 13:04 Uhr
4 Kommentare
Neuester Kommentar

Hallo,
1. auf die Schnelle betrachtet fehlt wenigstens ein End If (Zeile 56 ist ein ELSE, Zeile 60 ist ein ELSE, aber Zeile 63 ist nur ein End IF).
2. nicht zwischendurch ein "End Sub" sondern ein "Exit Sub" benutzen (End Sub nur als letzte Anweisung).
3. den Loop (also das Ende von Do Until) nicht in einem If .. Then .. End If platzieren sondern wenn die Schleife nicht weiter durchlaufen werden soll ein "Exit Do" benutzen.
Gruß - René
1. auf die Schnelle betrachtet fehlt wenigstens ein End If (Zeile 56 ist ein ELSE, Zeile 60 ist ein ELSE, aber Zeile 63 ist nur ein End IF).
2. nicht zwischendurch ein "End Sub" sondern ein "Exit Sub" benutzen (End Sub nur als letzte Anweisung).
3. den Loop (also das Ende von Do Until) nicht in einem If .. Then .. End If platzieren sondern wenn die Schleife nicht weiter durchlaufen werden soll ein "Exit Do" benutzen.
Gruß - René

Hallo,
also der klassische Ablauf einer/deiner Schleife wäre folgendermaßen:
Auszug:
rs.Open "qrySAvoll_nnFaktSum_Auto", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
'Jetzt soll vom Recordset ...
DoCmd.OpenForm "frmTempAuto", acNormal, , , acFormAdd, acIcon
Forms!frmTempAuto!Study = rs!Kundenauftrag
DoCmd.Close acForm, "frmTempAuto"
'Damit ist das Schreiben der Daten beendet
'Jetzt soll eine Frage gestellt ...
AbrageRecord = MsgBox("Next study?", vbOKCancel)
If AbfrageRecord = 1 Then
rs.MoveNext
Else
Exit Do
End If
Loop
rs.Close
Gruß - René
also der klassische Ablauf einer/deiner Schleife wäre folgendermaßen:
Auszug:
rs.Open "qrySAvoll_nnFaktSum_Auto", CurrentProject.Connection, adOpenKeyset, adLockOptimistic
rs.MoveFirst
Do Until rs.EOF
'Jetzt soll vom Recordset ...
DoCmd.OpenForm "frmTempAuto", acNormal, , , acFormAdd, acIcon
Forms!frmTempAuto!Study = rs!Kundenauftrag
DoCmd.Close acForm, "frmTempAuto"
'Damit ist das Schreiben der Daten beendet
'Jetzt soll eine Frage gestellt ...
AbrageRecord = MsgBox("Next study?", vbOKCancel)
If AbfrageRecord = 1 Then
rs.MoveNext
Else
Exit Do
End If
Loop
rs.Close
Gruß - René