Verhalten von BOF und EOF in ADO

Zurzeit habe ich die Aufgabe ein Microsoft-Access-VBScript-Projekt in eine moderne Ajax-ASP.NET-4.0-C#-Anwendung zu migrieren.

Dabei stoße ich auf zahlreiche „seltsame“ Sachen die mit VBScript so möglich sind.

Recordset.BOF und Recordset.EOF

Eines davon ist die Logik der Eigenschaften „BOF“ und „EOF“ eines Recordsets.

Laut Dokumentation gilt:

BOF: Indicates that the current record position is before the first record in a Recordset object.
EOF: Indicates that the current record position is after the last record in a Recordset object.

Der Programmcode durch den ich mich arbeite verwendet die BOF-Eigenschaft häufig zum Prüfen ob Datensätze vorhanden sind oder nicht.

Selbsttest

Leider widersprechen sich Programmlogik und Kommentare manchmal, deshalb habe ich eine kleine Access-Datenbank mit einem Modul erstellt, das die verschiedenen Fälle durchspielt.

Das Ergebnis ist wie folgt:

=========================
Test-Beginn

—————
SQL-Abfrage die einen Datensatz liefert (Count: 1)
BOF: Falsch
EOF: Falsch

—————
SQL-Abfrage die mehrere Datensätze liefert (Count: 2)
BOF: Falsch
EOF: Falsch

—————
SQL-Abfrage die keine Datensätze liefert (Count: 0)
BOF: Wahr
EOF: Wahr

Test-Ende
=========================

D.h. sobald ein Datensatz vorhanden ist, sind sowohl BOF als auch EOF „false“, sonst jeweils „true“.

Somit bedeuten folgende Prüfungen:

If Recordset.BOF = False then –> Daten sind vorhanden
If Recordset.BOF = True then –> Daten sind nicht vorhanden

Download

Damit Ihr es bei Interesse selbst mal ausprobieren könnt, gibt es hier die Access-Datei zum Download.

2 Gedanken zu „Verhalten von BOF und EOF in ADO

  1. Rainer sagt:

    Wenn Datensätze vorhanden sind, sind beide Werte False, denn du stehst ja auf Satz 1. Machst du jetzt ein MovePrevious bekommst du BOF = true, denn du stehst VOR dem Satz 1. EOF bleibt aber false, denn es folgt ja noch ein Satz.

    Die ’normale‘ Schleife durch einen Recordset ist:
    While not RS.EOF
    xxx
    RS.MoveNext
    Wend

    Gruß
    Rainer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.