Navigation

Recordsets

Was ist eigentlich ein Recordset?


Ein Recordset stellt eigentlich nichts weiteres als eine Datensatzgruppe dar.

Also z.B. der Inhalt einer Tabelle oder das Ergebnis einer Abfrage. Man kann
sich auch einen Recordset direkt auf eine Abfrage öffnen oder den Recordsets
eines Formulars verweden.

Es gibt 2 Arten von Recordset's. ADO und DAO. Diese beiden unterscheiden sich in der Programmierung und der Zugriffsart.

DAO ist in der Regel schneller geschrieben und z.B. die FindFirst-Methode (DAO) ist sehr viel komfortabler als die Find-Methode (ADO).

Beide haben ihre Vor- und Nachteile. Für welche man sich entscheidet ist eigentlich
egal, wenn man sich vorher überlegt, was man damit machen will.



In beiden Fällen kann man einen Recordset als Abfrageergebniss oder auf eine
Tabelle direkt öffnen.

Um ihn vom 1. bis zum letzten Datensatz zu durchlaufen kann man eine entweder ein Do...Loop oder ein While...Wend verwenden.

Welche Schleife man verwendet ist eigentlich egal, aber nur in einer Do Schleife kann man ein Exit Do verwenden.

Um einen Recordset von der 1. bis zur letzten Spalte zu durchlaufen kann man die Fields-Auflistung verwenden und eine For-Schleife.

Das With verkürzt nur die Programmierung und man kann sich vor jedem "." oder "!" ein
rs vorstellen.

ADO-Recordset mit Do...Loop-Schleife und einer Tabelle:

Dim rs As ADODB.Recordset
Dim i  As Long
Set rs = New ADODB.Recordset

With rs
	.ActiveConnection = CurrentProject.Connection
	.CursorType = adOpenStatic
	.LockType = adLockOptimistic
	.Open "DeineTabelle"

	Do Until .EOF
	    For i = 0 To .Fields.Count - 1
	        Debug.Print .Fields(i)
		Next i
		.MoveNext
	Loop
End With

rs.Close
Set rs = Nohting




DAO-Recorset mit While...Wend-Schleife und einer Abfrage:

Dim rs As DAO.Recordset
Dim strSQL As String

strSQL = "SELECT * FROM Tabelle WHERE Tabellenfeld ='xyz'"
Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenDynaset)

With rs
	While Not .EOF
	    For i = 0 To .Fields.Count -1
	        Debug.Print .Fields(i)
		Next i
		.MoveNext
	Wend
End With

rs.Close
Set rs = Nothing




Einen neuen Datensatz kann man mit .AddNew anfügen und einen bestehenden mit .Edit aktualisieren.