mit der CopyFromRecordset-Methode kann man sehr effizient große Datenmengen in ein Tabellenblatt "schaufeln". Gibt es eine vergleichbare Methode auch zum Füllen eines Arrays?
Grüße aus Dresden
Jan
mit der CopyFromRecordset-Methode kann man sehr effizient große Datenmengen in ein Tabellenblatt "schaufeln". Gibt es eine vergleichbare Methode auch zum Füllen eines Arrays?
Grüße aus Dresden
Jan
der einfachste Weg: Füge die Daten in ein - temporäres - Tabellenblatt ein und lies sie von dort in ein Array - also eine Variant-Variable - ein.
hans
das habe ich auch schon überlegt, dachte es gibt vielleicht einen direkten und ebenso schnellen Weg.
Jan
Um Daten aus einem Recordset in ein Array zu übertragen, kannst Du die CopyFromRecordset
-Methode verwenden, um die Daten zunächst in ein Tabellenblatt einzufügen und sie anschließend in ein Array zu lesen. Hier ist eine Schritt-für-Schritt-Anleitung:
Erstelle ein neues Arbeitsblatt: Füge ein temporäres Arbeitsblatt hinzu, um die Daten zwischenzuspeichern.
Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets.Add
Öffne eine Verbindung zur Datenbank: Verwende ADO, um eine Verbindung zu Deiner Datenquelle herzustellen.
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
conn.Open "DeineVerbindungszeichenfolge"
Erstelle ein Recordset und fülle es: Führe eine SQL-Abfrage aus, um die Daten in das Recordset zu laden.
Dim rs As Object
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM DeineTabelle", conn
Nutze CopyFromRecordset: Übertrage die Daten in das temporäre Arbeitsblatt.
ws.Range("A1").CopyFromRecordset rs
Lese die Daten in ein Array: Konvertiere die Daten im Arbeitsblatt in ein Array.
Dim myArray As Variant
myArray = ws.UsedRange.Value
Bereinige: Schließe das Recordset und die Verbindung und lösche das temporäre Arbeitsblatt.
rs.Close
conn.Close
Application.DisplayAlerts = False
ws.Delete
Application.DisplayAlerts = True
Fehler: "Typ nicht übereinstimmend": Dieser Fehler tritt auf, wenn Du versuchst, einen Datentyp in ein Array zu übertragen, der nicht kompatibel ist. Stelle sicher, dass die Daten im Recordset den richtigen Typ haben.
Lösung: Verwende CStr
, CInt
usw., um die Datentypen im Array korrekt zu formatieren, bevor Du sie weiterverarbeitest.
Fehler: "Objekt nicht gefunden": Dieser Fehler kann auftreten, wenn das Arbeitsblatt nicht korrekt erstellt wurde.
Lösung: Überprüfe, ob das Arbeitsblatt tatsächlich erstellt wurde und dass der Name des Arbeitsblatts nicht bereits existiert.
Anstatt Daten über ein temporäres Arbeitsblatt zu übertragen, kannst Du auch direkt ein Array mit GetRows
aus dem Recordset erstellen:
Dim myArray As Variant
myArray = rs.GetRows
Diese Methode ist oft schneller, da sie die Notwendigkeit eines temporären Arbeitsblatts vermeidet.
Hier ist ein einfaches Beispiel, um Daten aus einer Excel-Datenbank direkt in ein Array zu laden:
Sub LoadDataIntoArray()
Dim conn As Object, rs As Object, myArray As Variant
Set conn = CreateObject("ADODB.Connection")
conn.Open "DeineVerbindungszeichenfolge"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM DeineTabelle", conn
myArray = rs.GetRows
' Verarbeitung des Arrays
Dim i As Long
For i = LBound(myArray, 2) To UBound(myArray, 2)
Debug.Print myArray(0, i) ' Beispielweise die erste Spalte
Next i
rs.Close
conn.Close
End Sub
Verwende Error Handling: Implementiere On Error Resume Next
, um potenzielle Laufzeitfehler zu behandeln und die Stabilität Deines Codes zu erhöhen.
Datenbankverbindungen optimieren: Halte die Verbindung so kurz wie möglich und öffne sie nur, wenn Du sie benötigst.
Cache die Daten: Wenn Du häufig auf dieselben Daten zugreifen musst, ziehe in Betracht, sie im Speicher zu halten, um die Leistung zu verbessern.
1. Wie kann ich die Größe des Arrays bestimmen?
Du kannst die Funktionen UBound
und LBound
verwenden, um die Dimensionen des Arrays zu ermitteln.
2. Kann ich CopyFromRecordset
ohne ein Arbeitsblatt verwenden?
Nein, CopyFromRecordset
erfordert ein Ziel, in das die Daten kopiert werden. Eine direkte Übertragung in ein Array ist nicht möglich, ohne zuvor ein Arbeitsblatt zu verwenden oder GetRows
zu nutzen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen