Probleme mit BOF
Mannix
- asp.net
0 Viennamade0 Mannix0 Viennamade0 Mannix0 Viennamade0 Mannix
0 Mannix
Hallo zusammen,
ich habe folgendes Problem: ich lese Daten aus einer Datenbank und speichere sie in einem Recordset (die DB-Verbindung Con ist dabei schon früher erstellt). Dann will ich die Daten mittels einer While-Schleife ausgeben. Das klappt soweit, bis auf eine Sache: einen Teil der Daten will ich nur für den ersten Datensatz im Recordset ausgeben, für die restlichen Datensätze nicht. Das habe ich mit einer If-Anweisung gemacht, die überprüft ob der Recordset-Zeiger auf den ersten Datensatz zeigt (RSet.BOF). Dieser müsste sich ja zu Beginn der Ausgabe auf dem ersten Datensatz befinden, aber wenn ich mir die Seite anschaue, wird immer der Zweig der If-Anweisung durchlaufen, in den das Programm gehen soll, wenn der Zeiger nicht auf den ersten Datensatz zeigt. Aber warum nur? Kann mir jemand helfen?
Code-Ausschnitt:
Set RSet = Server.CreateObject( "ADODB.Recordset")
RSet.ActiveConnection = Con
RSet.Open "SELECT * FROM ... WHERE ...
While Not RSet.EOF
If Not RSet.BOF Then
'irgendeine Ausgabe, wenn Zeiger nicht auf 1. Datensatz zeigt
Else
'Datenausgabe, wenn Recordset-Zeiger auf 1. Datensatz zeigt
End If
...
RSet.MoveNext
WEnd
RSet.Close
Con.Close
Viele Grüße und danke im Voraus
Mannix
Hallo!
Dieser müsste sich ja zu Beginn der Ausgabe auf dem ersten Datensatz befinden, aber wenn ich mir die Seite anschaue, wird immer der Zweig der If-Anweisung durchlaufen, in den das Programm gehen soll, wenn der Zeiger nicht auf den ersten Datensatz zeigt.
Und wenn Du die AbsolutePosition-Eigenschaft des Recordset verwendest?
Beste Grüße
Viennamade
Und wenn Du die AbsolutePosition-Eigenschaft des Recordset verwendest?
Ich hab mal probiert, die AbsolutePosition-Eigenschaft nach der If-Anweisung auszugeben, da kommt (in jedem Schleifendurchlauf) -1. Warum weiß ich auch nicht, hängt aber bestimmt mit meinem Problem zusammen.
Hallo!
Und wenn Du die AbsolutePosition-Eigenschaft des Recordset verwendest?
Ich hab mal probiert, die AbsolutePosition-Eigenschaft nach der If-Anweisung auszugeben, da kommt (in jedem Schleifendurchlauf) -1. Warum weiß ich auch nicht, hängt aber bestimmt mit meinem Problem zusammen.
Nein, hängt nicht damit zusammen. BOF bedeutet "_vor_ dem ersten Datensatz" und EOF "_nach_ ...". Also kannst Du BOF dafür nicht verwenden.
Das mit der AbsolutePosition ist aber kurios, auf welche DB greifst Du denn zu? Auf ganz altes DAO?
Beste Grüße
Viennamade
Nein, hängt nicht damit zusammen. BOF bedeutet "_vor_ dem ersten Datensatz" und EOF "_nach_ ...". Also kannst Du BOF dafür nicht verwenden.
Wie kann ich dann abfragen, ob in der Schleife gerade der erste Datensatz an der Reihe ist?
Das mit der AbsolutePosition ist aber kurios, auf welche DB greifst Du denn zu? Auf ganz altes DAO?
Ist ne Access 2002-Tabelle.
Hallo!
Ist ne Access 2002-Tabelle.
Wenn Du _vor_ dem Öffnen der Verbindung client-seitigen Cursor einstellst?
conn.CursorLocation=aduseclient
Beste Grüße
Viennamade
Ich hab eine Lösung gefunden. Da ja dummerweise die RecordCount-Eigenschaft nicht funktioniert hat, hab ich selber die Datensätze gezählt (while-Schleife), dann mit ner for-Schleife (i = 1 To anzahlDS) das Recordset durchlaufen (immer am Ende jedes Durchlaufs RSet.MoveNext) und innerhalb dieser Schleife eine if-Abfrage, ob i gleich 1 ist (anstatt der BOF-Abfrage).
Danke für Deine Tipps
Wenn ich RecordCount ausgeben, kommt ebenfalls nur -1.
Hi,
der Grund dafür ist, dass du die Abfrage als Firehose Cursor
Wenn du eine Navigation im Recordset benötigst, solltest du einen
anderen Cursor verwenden: z.b. adOpenStatic, was einen Snapshot von
den Ergebnissen erstellt. Verbraucht mehr Ressourcen, bietet dafür
aber mehr Möglichkeiten.
ein
SET myRecordset = ADODBconnection.execute(sqlStatement) führt immer
zu einem Firehose Cursor - das als zusätzliche Info
HTH, ciao, Frank