Office: (Office 2010) rs.eof wird nicht erreicht.

Helfe beim Thema rs.eof wird nicht erreicht. in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Moin zusammen, ich steh beim Durchlauf einer Schleife grad vor dem für mich nicht nachvollziehbaren Phänomen, dass .EOF "nicht erreicht" wird. Ich... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Andre.Heisig, 27. August 2019.

  1. rs.eof wird nicht erreicht.


    Moin zusammen,

    ich steh beim Durchlauf einer Schleife grad vor dem für mich nicht nachvollziehbaren Phänomen, dass .EOF "nicht erreicht" wird.

    Ich baue hiermit ...

    Code:
    eine Art Packschein als Textstring zusammen. Der wird auch korrekt erzeugt: Das RecordSet liefert die richtigen Daten; die Schleife erzeugt laut rot markiertem "debug.print" inhaltlich den richtigen String.

    Problem: rs.eof springt nicht auf TRUE, wenn die Schleife laut Daten abgearbeitet sein sollte, sondern beginnt von vorne. String leer, und wird neu zusammengesetzt. Endlos.

    Problem Level 2: Passiert nicht immer. Aber inzwischen oft genug, dass ich es abstellen möchte. Ich erkenne aber ums Verr...en nicht, warum rs.eof nicht erkannt / ausgelöst wird, wenn es denn passiert.

    Klingt wirr, isses auch. ;-)

    Jemand eine entwirrende Idee?

    Danke!
    Andre.

    :)
     
    Andre.Heisig, 27. August 2019
    #1
  2. Was macht Debug.Print rs.EOF, wenn Du es NACH dem MoveNext setzt?
     
    fraeser, 29. August 2019
    #2
  3. Code:
    So lautet Deine Abbruchbedingung. Sie kann nur bei leerem Recordset oder nach einem MoveNext erreicht werden.

    Für einen Fortgeschrittenen wie Dich ist das ein chaotischer Code. Neu und ordentlich schreiben.

    Code:
    Alles unnötig. Beim Neuöffnen eines Recordsets steht der Datenzeiger auf dem ersten Datensatz oder auf EOF (wenn rs leer).
    DLookup in Schleife ist schlimm. Verwende eine richtige SQL-Anweisung als Datenbasis für das Recordset.
    Inhalt HAVING sollte WHERE sein.
    Recordset schließen nicht vergessen.
     
  4. rs.eof wird nicht erreicht.

    Ja, die Position von "debug.print" war tatsächlich blöd gesetzt. Dann wird an der erwarteten Stelle ein WAHR draus ... die Schleife beginnt aber dennoch von neuem.


    So lautet Deine Abbruchbedingung. Sie kann nur bei leerem Recordset oder nach einem MoveNext erreicht werden.

    Das ist ja genau mein Problem: Ich erreiche nach Anzahl X von MoveNext meinen .EOF, die Schleife beendet aber nicht.
    Oder verstehe ich den Hinweis nicht/falsch?


    Alles unnötig. Beim Neuöffnen eines Recordsets steht der Datenzeiger auf dem ersten Datensatz oder auf EOF (wenn rs leer).
    DLookup in Schleife ist schlimm. Verwende eine richtige SQL-Anweisung als Datenbasis für das Recordset.
    Inhalt HAVING sollte WHERE sein.
    Recordset schließen nicht vergessen.

    Da ist einiges an "Debug-Resten" drin, und das ist mir bewusst. Und für Ablaufoptimierungen hab ich immer ein offenes Ohr. Ich würde das Putzen und Rundschleifen aber aufschieben wollen, bis der eigentliche Fehler gefunden ist, der den (meinetwegen suboptimalen) Ablauf gerade mehr behindert, als die genannten Suboptimalitäten. Einverstanden? ;-)
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Andre.Heisig, 29. August 2019
    #4
  5. Also, überarbeitet ....

    Code:
    Mehr Hintergrund: Die Routine erzeugt pro Lieferschein einen Textstring aus allen Prüfmitteln, die Stand aktueller Lieferschein noch nicht bearbeitet wurden.

    Mich verwirrt dabei: Ab und zu hab ich einen Lieferschein (aktuell einen aus 14 des gleichen Auftrags), wo der identische Ablauf in eine Endlosschleife geht. Bei den 13 anderen Lieferscheinen läufts. Aus 100 Aufträgen hab ich 2, wo das Problem überhaupt auftritt.

    Ich erkenne den Grund nicht.
     
    Andre.Heisig, 29. August 2019
    #5
  6. Du kommst nie nach dem Loop an? Das kann eigentlich nur sein, wenn in der Schleife das MoveNext fehlt (Endlosschleife).

    Eventuell könnte es sein, dass der Code durch die DLookups (Externe Abfrage) irgendwohin stiften geht. Daher würde ich wie gesagt die zu ermittelnden Werte gleich in die SQL-Anweisung bringen, mit der das Recordset erzeugt wird, dann braucht man nur eine kommagetrennte liste (SQLListe) erzeugen.
     
  7. Nicht "nie". Aber ab und an. Ich kanns leider nicht besser erklären.

    Der erzeugte SQL-String ist in korrekt, und an der jetzt richtigen Stelle wirft "Debug.Print rs.EOF" ein "Wahr" aus, wo es zu erwarten wäre.

    Aber die Schleife beginnt trotzdem von vorn, ich sehe per "Debug.Print strPMListeNochOffen", dass die Liste neu zusammengesetzt wird. Von vorne, wieder komplett, und wieder von vorne.
     
    Andre.Heisig, 29. August 2019
    #7
  8. rs.eof wird nicht erreicht.

    Das klang sexy ...

    Code:
    ... Ergebnis ist unverändert: Schleife baut den String auf, geht an .EOF=Wahr vorbei und in die nächste Runde, usw.
     
    Zuletzt von einem Moderator bearbeitet: 7. Januar 2021
    Andre.Heisig, 29. August 2019
    #8
  9. Code:
    Verwende testhalber statt des DLookups den Recordsetwert selber, bzw. irgendeine Konstante.

    Ich kann mir nicht wirklich vorstellen, wie die Schleife ohne zusätzliche Maßnahme von vorne beginnen sollte.
    Aber, schon aus Prinzip und hier vielleicht extra hilfreich:
    Code:
    Als Standard wird Dynaset verwendet. Recordset muss neben Lese- uauch Schreibvorgänge verwalten, ist damit das aufwändigste und langsamste.
    Code:
    Code:
    Diese Prüfung ist etwas sinnfrei, weil Du der Variablen in jedem Fall einen Inhalt zuweist, es sei denn das Recordset ist leer.
    Hier kann das Recordset nur einmal von vorne vorwärts durchlaufen werden. Das wäre schon wegen der Nutzung des Recordsets die logische und schlanke Variante. Optimierung trifft Funktionalität, und zwar gleich und nicht irgendwann später.
     
  10. Das ist genau hier reproduzierbar?
    => Demo-DB
     
  11. Ich glaube, wir bewegen uns drauf zu:

    Wenn ich auf die "Auflösung" der PM-ID in die PM-Nummer ganz verzichte, egal ob in der SQL des Recordsets, oder in der Zusammensetzung des Strings, funktioniert die Schleife scheinbar.

    Ich hab gerade mal den Dlookup in den SQL-String des Recordsets verlegt: Problem wieder da.
    Auflösung, ebenfalls im SQL-String des Recordsets, aber per Join auf die entsprechende Tabelle: Problem auch wieder da.

    Teste das noch weiter.
     
    Andre.Heisig, 29. August 2019
    #11
  12. Und jetzt steige ich mit meinem begrenzten Sachverstand endgültig aus:
    Ich hab jetzt das Reordset auf 3 unterschiedliche Arten zusammengebaut:

    Code:
    ... alle 3 Varianten funktionieren, bis ich beim Auswerten des Recordsets hier ...
    Code:
    ... etwas anders ausgeben will als "[APM_PruefmittelID]": Endlos-Schleife.
    Mit Ausgabe "[APM_PruefmittelID]": Sauberes Schleifen-Ende.

    Nach wie vor in 1 von 14 Belegen eines Auftrags.
     
    Andre.Heisig, 29. August 2019
    #12
  13. rs.eof wird nicht erreicht.

    => #10

    Das Feld sollte aber schon in der SQL-Anweisung vorkommen.
     
  14. Schon klar. Hab es auch nur eingetragen, wenn vorhanden. Andernfalls ensteht auch keine Endlos-Schleife, sondern eine deutliche Abbruch-Meldung.
     
    Andre.Heisig, 29. August 2019
    #14
  15. Man kann ja nur beurteilen, was Du vorlegst.

    In der dritten und verwendeten SQL-Anweisung fehlen trennende Leerzeichen.
    Wenn beim Testen wechselnd zusätzliche Fehler eingebaut werden, wird es nicht einfacher und übersichtlicher.
     
Thema:

rs.eof wird nicht erreicht.

Die Seite wird geladen...
  1. rs.eof wird nicht erreicht. - Similar Threads - eof erreicht

  2. Mail senden maximale Textlänge erreicht ?

    in Microsoft Excel Hilfe
    Mail senden maximale Textlänge erreicht ?: Guten Tag liebes Forum Ich hätte eine Frage an der ich mich ein wenig herumärgere. Habe ich hier einfach die 255 erlaubten Zeichen Überschritten ? Wenn ich den Text kürze dann verschwindet der...
  3. Summewenns erst, wenn bestimmter Wert erreicht

    in Microsoft Excel Hilfe
    Summewenns erst, wenn bestimmter Wert erreicht: Hallo zusammen, ich komme mit meinen eingeschränkten Excel-Kenntnissen nicht weiter. Ich muss die Daten in der angehängten Tabelle auswerten. Ich möchte jetzt gerne wissen, wie oft eine...
  4. Wenn Datum 1 Monat in der Zu

    in Microsoft Excel Hilfe
    Wenn Datum 1 Monat in der Zu: Hallo liebe Profis, ich bin am verzweifeln! Ich muss eine Liste mit Mitarbeitern erstellen, deren Arbeitserlaubnis beschränkt ist und möchte, dass sich in der Spalte "gültig bis", das Datum gelb...
  5. Zellen per VBA sperren wenn Datum erreicht

    in Microsoft Excel Hilfe
    Zellen per VBA sperren wenn Datum erreicht: Hallo, ich benötige Hilfe bei einer Erstellung eines VBA Codes (Excel). Ich würde gerne das die Zellen B5:AF33 automatisch gesperrt werden, wenn das Datum in Zelle B1 größer wie in Zelle AO30...
  6. Wenn Datum erreicht Wert aus anderer Spalte angeben

    in Microsoft Excel Hilfe
    Wenn Datum erreicht Wert aus anderer Spalte angeben: Hallo allerseits, ich hoffe auf eure Expertise. Es geht um eine chronologische Liste mit nicht kontinuierlichem Zeitverlauf, sprich es sind immer die letzten Tag des Monats (Spalte A). In...
  7. Verwendung von EOF

    in Microsoft Access Hilfe
    Verwendung von EOF: Moin, ich möchte meine If Anweisung nur solange ausführen, bis meine Datensätze am Ende angekommen sind. Ich gebe in einem Formular eine Menge in ein Textfeld ein, drücke auf Bestätigen, die Menge...
  8. EOF-Funktion

    in Microsoft Access Tutorials
    EOF-Funktion: EOF-Funktion Access für Microsoft 365 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Mehr... Weniger...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden