Die Eigenschaften EOF und BOF
Nach oben zu Durch Datenmengen navigieren
Mit den beiden Nur-Lese-Eigenschaften EOF (End-of-file, Dateiende) und BOF (Beginning-of-file, Dateianfang) können Sie zur Laufzeit alle Datensätze in einer Datenmenge nacheinander durchgehen.
Eof
Wenn EOF auf True gesetzt ist, gibt dies an, dass der Cursor sich eindeutig in der letzten Zeile der Datenmenge befindet. EOF ist True, wenn eine Anwendung
- Eine leere Datenmenge wird geöffnet.
- für eine Datenmenge die Methode Last aufruft;
- die Methode Next einer Datenmenge aufruft und die Methode fehlschlägt (weil sich der Cursor in der letzten Zeile der Datenmenge befindet);
- die Methode SetRange für einen leeren Bereich oder eine leere Datenmenge aufruft.
In allen anderen Fällen können Sie davon ausgehen, dass EOF False ist.
EOF wird häufig in Schleifen abgefragt, um die iterative Bearbeitung aller Datensätze einer Datenmenge zu kontrollieren. Wenn Sie eine Datenmenge öffnen, die Datensätze enthält (oder die Methode First aufrufen), ist EOF auf False gesetzt. Erstellen Sie zum Durchgehen aller Datensätze einer Datenmenge eine Schleife, indem Sie Next aufrufen. Die Schleife endet, wenn EOF auf True gesetzt ist. EOF bleibt so lange auf False gesetzt, bis Sie Next aufrufen und der Cursor sich bereits auf dem letzten Datensatz befindet.
Der folgende Quelltext zeigt eine Bearbeitungsschleife für eine Datenmenge namens CustTable:
CustTable.DisableControls;
try
CustTable.First; { Auf ersten Datensatz positionieren, EOF wird dadurch auf False gesetzt }
while not CustTable.Eof do { Schleife durchlaufen, bis EOF True ist. }
begin
{ Datensatzverarbeitung }
.
.
.
CustTable.Next; { EOF ist True, wenn Next scheitert, da dann der letzte Datensatz erreicht wurde }
end;
finally
CustTable.EnableControls;
end;
CustTable->DisableControls(); // Verarbeitung beschleunigen; verhindert Bildschirmflackern
try
{
while (!CustTable->Bof) // Schleife durchlaufen, bis Bof true ist
(
// Jeden Datensatz hier bearbeiten
.
.
.
CustTable->Prior();
// Bof false bei Erfolg und true, wenn Prior für ersten Datensatz fehlschlägt
}
}
__finally
{
CustTable->EnableControls();
}
CustTable->DisableControls();
try
{
for (CustTable->First(); !CustTable->Eof; CustTable->Next())
(
// Jeden Datensatz hier bearbeiten
.
.
.
}
}
__finally
{
CustTable->EnableControls();
}
Tip: Dieses Beispiel zeigt außerdem, wie datensensitive grafische Steuerelemente während der Iteration in der Datenmenge deaktiviert und anschließend wieder aktiviert werden. Wenn Sie während der Iteration durch die Datenmenge die visuellen Steuerelemente deaktivieren, erhöht sich die Bearbeitungsgeschwindigkeit. Ihre Anwendung muss in diesem Fall nämlich nicht den Inhalt des Steuerelements aktualisieren, wenn sich der aktuelle Datensatz ändert. Nach Beendigung der Iteration sollten die Steuerelemente wieder aktiviert werden, damit sie die Werte des neuen aktuellen Datensatzes anzeigen können. Beachten Sie, dass das Aktivieren der visuellen Steuerelemente in der finally-Klausel einer try...finally-Anweisung stattfindet. Dies garantiert, dass die Steuerelemente auch dann wieder aktiviert werden, wenn die Schleifenbearbeitung durch eine Exception abgebrochen wird.
BOF
Wenn BOF auf True gesetzt ist, gibt dies an, dass der Cursor sich eindeutig in der ersten Zeile der Datenmenge befindet. BOF ist True, wenn eine Anwendung
- Eine Datenmenge wird geöffnet.
- die Methode First einer Datenmenge aufruft.
- die Methode Prior aufruft und die Methode fehlschlägt (weil der Cursor bereits auf den ersten Datensatz zeigt).
- die Methode SetRange für einen leeren Bereich oder eine leere Datenmenge aufruft.
In allen anderen Fällen können Sie davon ausgehen, dass BOF False ist.
Ebenso wie mit EOF kann auch mit BOF in einer Schleife die iterative Bearbeitung von Datensätzen gesteuert werden. Der folgende Quelltext zeigt eine Bearbeitungsschleife für eine Datenmenge namens CustTable:
CustTable.DisableControls; { Verarbeitungsgeschwindigkeit erhöhen und Bildschirmflackern verhindern.
try
while not CustTable.Bof do { Schleife durchlaufen, bis BOF True ist. }
begin
{ Datensatzverarbeitung }
.
.
.
CustTable.Prior; { BOF ist False bei Erfolg und True, wenn Prior für ersten Datensatz fehlschlägt }
end;
finally
CustTable.EnableControls; { Neuen aktuellen Datensatz in Steuerelementen anzeigen.
end;