Supportnet / Forum / Datenbanken
Datensatznummer
Frage
Mein Name ist Paul, und arbeite mich gerade in ASP ein.
Früher habe ich Datenbankprogramme in Clipper / DBASE geschrieben.
Dort gabe es eine Datensatzfunktion -RECNO()
Mit
satznr : =RECNO()
wurde der Variable " satznr " automatisch der aktuelle Stand des Datensatzzeigers zugewiesen.
Nun Versuche ich dies unter ODBC - Verbindung auf eine ACCESS 2.0 Datenbank-Tabelle.
Ich doktere nun jetzt schon einen Tag damit rum, und bekomme einfach die Datensatznummer
nicht auf den Bildschirm !
mit
-Respons.Write obRS.MoveLast
bekomme ich eine Fehlermeldung, "kann Daten nicht von hinten holen" anstatt die Nummer des
letzten Datensatzes auszugeben.
mit
-Respons.Write obRS.Move 125
bekomme ich statt der Zahl 125 auch kein Ergebnis
mit
-Response.Write obRS.AbsolutePosition
funktioniert auch nicht !
Mir geht es nicht darum die Feldinhalte des Datensatzes auzugeben, das funktioniert, sondern
die aktuelle Datensatz-Nummer auf dem Bildschirm !
Was mache ich grundsätzlich falsch ??
Antwort 1 von Sir_Hilly
Du gibst die Datensätze doch sicher in einer Schleife aus. Setz doch in der Schleife einfach ne variable die bei jedem widerholen hochzählt.
Dann kannst diesen Wert auf den Bildschirm schreiben:
x=1
Do While Not obRS.EOF
Response.write x
obRS.movenext
x=x+1
loop
das mit absolute position geht sicher auch nur muss das der cursor unterstützen ich glaub cursortype muss
adOpenKeyset o. adOpenStatic sein und cursorlocation: aduseclient
das du auf absoluteposition zugreifen kannst
Gruß
Dann kannst diesen Wert auf den Bildschirm schreiben:
x=1
Do While Not obRS.EOF
Response.write x
obRS.movenext
x=x+1
loop
das mit absolute position geht sicher auch nur muss das der cursor unterstützen ich glaub cursortype muss
adOpenKeyset o. adOpenStatic sein und cursorlocation: aduseclient
das du auf absoluteposition zugreifen kannst
Gruß
Antwort 2 von Marie
hilly, vielleicht hat er ja nur immer bei response das e vergessen ;-)))
Und danke für die Mail vom letzten Freitag :-)
Aber mal im ernst, wenn du mit x durchzählen willst, musst Du da nicht zuerst mit move first auf den ersten Datensatz gehen??? Sonst fängst am Ende in der Mitte an. Aber ich glaub das hilft ihm nicht, er will ja die Nummer des aktuellen Datensatzes ermitteln, da bin ich auch schon mal dran gescheitert. Weiss nimmer wie ich das gelöst hab.
Also in der Hilfe von A97 steht, dass Du zuerst moveLast, dann move first und dann erst anfangen sollst runterzuzählen, ich blick das auch net.
Sub AbsolutePositionX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Set dbsNorthwind = OpenDatabase("Nordwind.mdb")
' AbsolutePosition funktioniert nur mit
' Dynaset oder Snapshot.
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Personal", _
dbOpenSnapshot)
With rstEmployees
' Recordset auffüllen.
.MoveLast
.MoveFirst
' Recordset durchlaufen.
Do While Not .EOF
' Informationen zum aktuellen Datensatz
' anzeigen. 1 zum Wert von AbsolutePosition
' addieren, da die Werte mit Null beginnen.
strMessage = "Personal: " & !Nachname & vbCr & _
"(Datensatz " & (.AbsolutePosition + 1) & _
" von " & .RecordCount & ")"
If MsgBox(strMessage, vbOKCancel) = vbCancel _
Then Exit Do
.MoveNext
Loop
.Close
End With
dbsNorthwind.Close
End Sub
Gruß und schlaf gut
Marie
Und danke für die Mail vom letzten Freitag :-)
Aber mal im ernst, wenn du mit x durchzählen willst, musst Du da nicht zuerst mit move first auf den ersten Datensatz gehen??? Sonst fängst am Ende in der Mitte an. Aber ich glaub das hilft ihm nicht, er will ja die Nummer des aktuellen Datensatzes ermitteln, da bin ich auch schon mal dran gescheitert. Weiss nimmer wie ich das gelöst hab.
Also in der Hilfe von A97 steht, dass Du zuerst moveLast, dann move first und dann erst anfangen sollst runterzuzählen, ich blick das auch net.
Sub AbsolutePositionX()
Dim dbsNorthwind As Database
Dim rstEmployees As Recordset
Dim strMessage As String
Set dbsNorthwind = OpenDatabase("Nordwind.mdb")
' AbsolutePosition funktioniert nur mit
' Dynaset oder Snapshot.
Set rstEmployees = _
dbsNorthwind.OpenRecordset("Personal", _
dbOpenSnapshot)
With rstEmployees
' Recordset auffüllen.
.MoveLast
.MoveFirst
' Recordset durchlaufen.
Do While Not .EOF
' Informationen zum aktuellen Datensatz
' anzeigen. 1 zum Wert von AbsolutePosition
' addieren, da die Werte mit Null beginnen.
strMessage = "Personal: " & !Nachname & vbCr & _
"(Datensatz " & (.AbsolutePosition + 1) & _
" von " & .RecordCount & ")"
If MsgBox(strMessage, vbOKCancel) = vbCancel _
Then Exit Do
.MoveNext
Loop
.Close
End With
dbsNorthwind.Close
End Sub
Gruß und schlaf gut
Marie