Ein Recordset ist ein Objekt, bei dem es sich um eine Sammlung von Datensätzen aus einer Datenbank handelt. In Excel VBA können Sie ein Recordset verwenden, um Daten aus einer Tabelle zu lesen und verschiedene Vorgänge wie Filtern, Sortieren und Berechnen durchzuführen.
Eine der häufigsten Aufgaben bei der Arbeit mit einem Recordset besteht darin, die Anzahl der darin enthaltenen Datensätze zu zählen. Diese Informationen können beispielsweise nützlich sein, wenn Sie die Gesamtzahl der Datensätze auf der Benutzeroberfläche anzeigen oder eine bestimmte Logik basierend auf der Anzahl der Datensätze ausführen.
In Excel VBA gibt es mehrere Möglichkeiten, die Anzahl der Datensätze in einem Recordset abzurufen. Eine der einfachsten Möglichkeiten besteht darin, eine Eigenschaft zu verwenden RecordCount. Bevor Sie diese Eigenschaft verwenden, müssen Sie jedoch sicherstellen, dass das recordset nicht leer ist, andernfalls kann der RecordCount -1 zurückgeben.
Wenn das Recordset leer ist oder nicht verfügbar ist RecordCount. Sie können eine andere Methode verwenden, indem Sie alle Datensätze durchlaufen und in einer Schleife zählen. Dazu können Sie die Eigenschaft verwenden EOF (End Of File), das True zurückgibt, wenn alle Einträge beendet sind.
Grundbegriff
Anzahl der Einträge ein Recordset stellt die Anzahl der Datensätze dar, die in einem Dataset enthalten sind. Die Bestimmung der Anzahl der Datensätze kann nützlich sein, wenn Sie die Daten analysieren und verschiedene Operationen an ihnen durchführen.
EOF (End of File) - Dies ist eine Recordset-Eigenschaft, mit der Sie überprüfen können, ob das Ende des Datensatzes erreicht ist. Wenn die EOF-Eigenschaft True ist, bedeutet dies, dass alle Datensätze verarbeitet wurden und keine Daten mehr gelesen werden können.
BOF (Beginning of File) - Dies ist eine Recordset-Eigenschaft, die auf den Anfang des Datensatzes verweist. Wenn die BOF-Eigenschaft True ist, bedeutet dies, dass das Dataset noch nicht gestartet wurde.
MoveNext - Dies ist eine Recordset-Methode, mit der Sie zum nächsten Datensatz in einem Satz springen können. Nachdem die MoveNext-Methode erfolgreich ausgeführt wurde, wird der aktuelle Datensatz zum nächsten Datensatz im Satz.
AbsolutePosition - Dies ist eine Recordset-Eigenschaft, die auf die aktuelle Position im Dataset verweist. Die Startposition ist -1, was bedeutet, dass noch kein Datensatz ausgewählt oder verarbeitet wurde.
Count ist eine Recordset-Eigenschaft, die die Anzahl der Datensätze in einem Datensatz zurückgibt.
Mit diesen grundlegenden Konzepten können Sie effektiv mit einem Recordset in Excel VBA arbeiten und verschiedene Operationen mit Datensatzdaten durchführen.
Erstellen eines Recordset in Excel VBA
Befolgen Sie die folgenden Schritte, um ein Recordset in Excel VBA zu erstellen:
- Deklarieren Sie eine Variable vom Typ Recordset .
- Erstellen Sie mit dem Operator New eine Instanz des Recordset-Objekts.
- Legen Sie die Recordset-Eigenschaften wie die Datenquelle und den Cursortyp fest.
- Öffnen Sie das Recordset mit der Open-Methode.
Beispiel zum Erstellen eines Recordset aus einem Datenbereich in Excel:
Dim rs As ADODB.RecordsetSet rs = New ADODB.Recordset' Установка свойств recordsetrs.CursorLocation = adUseClientrs.CursorType = adOpenStaticrs.LockType = adLockReadOnly' Установка источника данныхrs.Source = "SELECT * FROM [Sheet1$A1:B10]"' Открытие recordsetrs.Open
Im obigen Beispiel wird ein Recordset erstellt, das alle Datensätze aus dem Bereich A1:B10 in "Sheet1" enthält.
Nachdem Sie das Recordset geöffnet haben, können Sie damit auf Daten zugreifen, Abfragen durchführen und Informationen analysieren. Wenn Sie das Recordset beendet haben, schließen Sie es mit der Close-Methode und geben Sie die zugewiesenen Ressourcen mit dem Befehl Set rs = Nothing frei.
Das Recordset mit Daten füllen
Bevor Sie die Anzahl der Datensätze in einem Recordset berechnen können, müssen Sie es mit Daten füllen. In der Regel können die Daten in einem Recordset aus Quellen wie Datenbanken, Text- oder CSV-Dateien stammen.
Um das Recordset mit Daten in VBA zu füllen, können Sie verschiedene Methoden verwenden:
1. Verwenden einer SQL-Abfrage:
Um Daten aus einer Datenbank abzurufen, können Sie SQL-Abfragen verwenden, einschließlich SELECT, INSERT, UPDATE und DELETE. Beispiel für die Verwendung einer SQL-Abfrage zum Auffüllen eines Recordset:
Dim conn As ObjectDim rs As ObjectSet conn = CreateObject("ADODB.Connection")Set rs = CreateObject("ADODB.recordset")conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\example.accdb"rs.Open "SELECT * FROM table", conn' Проход по записям в recordsetIf Not rs.EOF Thenrs.MoveFirstDo Until rs.EOF' Ваши действия с записьюrs.MoveNextLoopEnd Ifrs.Closeconn.CloseSet rs = NothingSet conn = Nothing
2. Lesen von Daten aus einer Textdatei:
Sie können die OpenTextFile-Methode des FileSystemObject-Objekts verwenden, um Daten aus einer Textdatei zu lesen. Beispiel für das Lesen von Daten aus einer Textdatei und das Ausfüllen eines Recordset:
Dim fso As ObjectDim file As ObjectDim text As StringDim lines() As StringDim i As LongSet fso = CreateObject("Scripting.FileSystemObject")Set file = fso.OpenTextFile("C:\example.txt")text = file.ReadAlllines() = Split(text, vbNewLine)rs.OpenFor i = LBound(lines) To UBound(lines)rs.AddNewrs.Fields(0).Value = lines(i)rs.UpdateNext irs.MoveFirstDebug.Print "Количество записей в recordset: " & rs.RecordCountrs.CloseSet rs = NothingSet file = NothingSet fso = Nothing
3. Laden von Daten aus einem Array:
Das Laden von Daten aus einem Array in ein Recordset ist eine schnelle Möglichkeit, ein Recordset zu füllen. Beispiel für die Verwendung eines Arrays zum Füllen eines Recordset:
Dim arr() As VariantDim i As Long' Заполнение массива даннымиarr = Array("Запись 1", "Запись 2", "Запись 3")rs.OpenFor i = LBound(arr) To UBound(arr)rs.AddNewrs.Fields(0).Value = arr(i)rs.UpdateNext irs.MoveFirstDebug.Print "Количество записей в recordset: " & rs.RecordCountrs.CloseSet rs = Nothing
Nachdem Sie das Recordset mit Daten gefüllt haben, können Sie die RecordCount-Methode verwenden, um die Anzahl der Datensätze im Recordset zu zählen.
Zählen der Anzahl der Datensätze in einem Recordset
Methode RecordCount gibt die Anzahl der Datensätze im Recordset zurück. Bevor Sie diese Methode verwenden, müssen Sie jedoch sicherstellen, dass das Recordset bereits geöffnet ist.
Sie können ein Objekt verwenden, um das Recordset zu öffnen ADODB.Connection und das Objekt ADODB.Recordset. Hier ist ein Beispielcode, der ein Recordset basierend auf einer Datenbankverbindung öffnet:
Dim conn As New ADODB.ConnectionDim rs As New ADODB.Recordsetconn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\database.accdb"rs.Open "SELECT * FROM myTable", conn
Nachdem wir das recordset erhalten haben, können wir die Methode verwenden RecordCount zum Zählen von Datensätzen:
Dim recordCount As IntegerrecordCount = rs.RecordCount
Beachten Sie, dass die Methode RecordCount gibt -1 zurück, wenn das Recordset leer ist. Daher wird empfohlen, vor der Verwendung dieser Methode zu überprüfen, ob das Recordset die Daten mithilfe der Methode enthält BOF und EOF:
If Not(rs.BOF And rs.EOF) ThenrecordCount = rs.RecordCountElserecordCount = 0End If
Jetzt haben wir eine Variable recordCount, die die Anzahl der Datensätze im Recordset enthält. Wir können diese Informationen zur weiteren Verarbeitung der Daten verwenden.
Anwendungsbeispiel
Hier ist ein Beispielcode, der veranschaulicht, wie die Funktion zum Zählen der Anzahl der Datensätze in einem Recordset in Excel VBA verwendet wird:
Sub CountRecordsExample()Dim rs As ObjectDim rowCount As Integer' Создание recordsetSet rs = CreateObject("ADODB.Recordset")' Открытие соединения с базой данныхrs.Open "SELECT * FROM Employees", _"Provider=Microsoft.Jet.OLEDB.4.0;" & _"Data Source=C:\path\to\database.mdb;" & _"Persist Security Info=False"' Подсчет количества записейrowCount = RecordCount(rs)' Вывод результатаMsgBox "Количество записей: " & rowCount' Закрытие соединения и очистка ресурсовrs.CloseSet rs = NothingEnd SubFunction RecordCount(rs As Object) As IntegerIf Not rs.EOF And Not rs.BOF Thenrs.MoveLastrs.MoveFirstRecordCount = rs.RecordCountElseRecordCount = 0End IfEnd Function
In diesem Beispiel erstellt die CountRecordsExample-Funktion ein Recordset-Objekt, öffnet eine Datenbankverbindung und führt eine SQL-Abfrage aus, um Daten aus der Employees-Tabelle abzurufen. Die RecordCount-Funktion wird dann verwendet, um die Anzahl der Datensätze im Recordset zu zählen. Das Ergebnis wird in einer Nachricht angezeigt.