![]() |
Datenbank: MSSQL,DBISAM4, ElevateDB, Paradox, Oracle • Version: 0 • Zugriff über: Verschieden
BOF und EOF nach Locate
Hallo,
ich habe einen eigenen TDataset Nachfahren betrachtet ihn als TQuery ähnlich. Es könnte sein das ich da eine Randbedingung nicht beachtet habe.... Folgendes Szenario 1. öffnen der Datenmenge (ein SQL) 2. das Resultset hat danach genau einen Datensatz 3. ausführen eines Locate('ID',genau der eine Datensatz,[]). Wie sollte EOF und BOF nach 3. aussehen? (darum geht es eigentlich) Wie sollte EOF und BOF nach 2. aussehen ? (nur zur Sicherheit) |
Re: BOF und EOF nach Locate
Hallo,
nimm eine TQuery diener Wahl und probiere es einfach mal aus. Bei 2. und 3. sollten BoF und EoF aber True sein, weil ein Open den Satzzeiger auf den 1. Datensatz setzt. Heiko |
Re: BOF und EOF nach Locate
bist du sicher das das für 2. gilt ?
Weil dann funktionieren ja etliche While not eof do schleifen nicht bei nur einem Datensatz. |
Re: BOF und EOF nach Locate
Delphi-Quellcode:
Hm, komisch! Hat jemand was anderes?
Procedure TForm1.Buuton1Click(Sender:Tobject);
begin If not assigned(q) then q := tQuery.create(self); q.Databasename := 'MeineDb'; q.SQL.Text := 'Select * from MeineTabelle Order By ID'; q.open; Showmessage('offen! BOF:'+Booltostr(q.Bof,true)+' EOF:'+Booltostr(q.Eof, true)); // Mein Ergebnis= offen! BOF:True EOF:False If Locate('ID',1,[]) then Showmessage('gefunden! BOF:'+Booltostr(q.Bof,true)+' EOF:'+Booltostr(q.Eof, true)); // Mein Ergebnis= gefunden! BOF:False EOF:False q.close; end; procedure TForm1.Button2Click(Sender: TObject); var Bm:Pointer; begin if not assigned(q) then q := Tquery.create(self); q.DatabaseName := 'MeineDb'; q.SQL.text :='SELECT * FROM MeineTabelle ORDER BY ID'; q.Open; BM := q.GetBookmark; q.Close; q.Open; q.GotoBookmark(bm); Showmessage('bm! BOF:' + Booltostr(q.Bof,True) + ' EOF:' + Booltostr(q.Eof,True)); //Mein Ergebnis= bm! BOF:False EOF:False q.Close; end; |
Re: BOF und EOF nach Locate
Code:
Wird eine Query geöffnet, steht der Datensatzzeiger normalerweise auf dem ersten Datensatz:
BOF = False -> Satz1 Satz2 Satz3 EOF = False Ein erfolgreiches Locate verschiebt nur den Datensatzzeiger auf ein anders Element: BOF = False Satz1 -> Satz2 Satz3 EOF = False Wird der Datensatzzeiger durch Next über den letzten Datensatz hinaus bewegt: BOF = False Satz1 Satz2 Satz3 -> EOF = True Wird der Datensatzzeiger durch Prior vor den ersten Datensatz bewegt: -> BOF = True Satz1 Satz2 Satz3 EOF = False Enthält die Datenmenge überhaupt keine Daten: -> BOF = EOF = True |
Re: BOF und EOF nach Locate
wieso stimmt dein erstes beispiel dann nicht mit dem hier
Delphi-Quellcode:
überein?
If not assigned(q) then
q := tQuery.create(self); q.Databasename := 'MeineDb'; q.SQL.Text := 'Select * from MeineTabelle Order By ID'; q.open; Showmessage('offen! BOF:'+Booltostr(q.Bof,true)+' EOF:'+Booltostr(q.Eof, true)); // Mein Ergebnis= offen! BOF:True EOF:False Nebenbei Die Datenmenge hat nur einen Datensatz es ist eine normale Paradox Datenbank! Ich habe das selbe mit ElevateDB gemacht die reagiert genauso! Nach OPEN ist BOF = TRUE EOF = FALSE Mit welcher Datenbank hast du das gemacht? Das wäre relativ wichtig für mich! |
Re: BOF und EOF nach Locate
Zitat:
Im Prinzip können die Datensätze so vorwärts oder rückwärts geparst werden.
Delphi-Quellcode:
First;
while not Eof do begin Next; end; Close; Last; while not Bof do begin Prior; end; Close; |
Re: BOF und EOF nach Locate
Zitat:
|
Re: BOF und EOF nach Locate
Also bei mir liefern alle datenbanken
Paradox, DBISAM, Elevatedb nach dem OPEN BOF = True EOF = False machen die das falsch? Habt ihr das mit einer Datenmenge die nur einen Datensatz enthält getestet? |
Re: BOF und EOF nach Locate
Advantage 10 auf Delphi 2010 mit ADT-Tabellen:
1) leere Tabelle öffnen, EOF=BOF=TRUE 2) Tabelle mit einem Datensatz öffnen: BOF=TRUE 3) next: eof=TRUE 4) Tabelle mit mehreren Datensätzen öffnen: BOF=TRUE 5) next bis zum letzten: kein Flag gesetzt 6) next: Zeiger auf dem letzten, EOF=TRUE 7) first: Zeiger auf dem ersten, BOF=true 8) next: Zeiger auf dem zweiten, kein Flag 9) prior: Zeiger auf dem ersten, kein Flag 10) prior: Zeiger auf dem ersten, BOF=true HTH Joachim |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz