Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ADO Recordset Spalten ansprechen

Forumthread: ADO Recordset Spalten ansprechen

ADO Recordset Spalten ansprechen
23.04.2009 12:55:42
Boris
Hallo,
habe 2 Fragen bzgl. des "Befüllens" eines Recordsets:
1) kann man anstelle von RS!Vorname = "Klaus" eine variable Spaltennummer einbauen? also: RS!(3. Spalte) = "Klaus", soll heißen: schreibe Klaus in die 3. Spalte.
2) kann man ein Recordset-Feld immer nur einzeln befüllen oder ist es auch möglich eine ganze Zeile mit einem Befehl zuzuweisen, also z.B.: RS!(Spalte 1 bis Spalte 3) = wksExcel.Range("A3:C3")
Es handelt sich um den Datenaustausch von Excel nach Access, die Tabellen haben teilweise bis zu 160 Spalten. Nach meinen bisherigen Kenntnissen müsste ich also für jede Zeile alle 160 Spalten einzeln definieren:
For Zeile = 1 to x
RS!Vorname = wksExcel.Cells(Zeile, 1).Value
Rs!Name = wksExcel.Cells(Zeile, 2).Value
usw.
Next Zeile
Lieber wäre mir natürlich eine Lösung wie (siehe Frage 1):
For Zeile = 1 to x
For Spalte 1 to 160
RS!(Spalte) = wksExcel.Cells(Zeile, Spalte).Value
Next Spalte
Next Zeile
oder aber man schreibt eine Range in den Recordset (siehe Frage 2)
Viele Grüße,
Boris
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ADO Recordset Spalten ansprechen
25.04.2009 12:56:17
Tino
Hallo,
zu erstens:
Du kannst mit DeinRecordset.Fields(Item) arbeiten.
Item ist dann die Spalte, wobei Spalte 1 den Index 0 hat.
zu zweitens:
habe ich noch nicht getestet und habe auch gerade kein Beispiel um es zu testen, daher Frage offen.
Gruß Tino
AW: ADO Recordset Spalten ansprechen
28.04.2009 09:16:24
Boris
Hallo,
die erste Version habe ich bereits umgesetzt. Funktioniert alles prächtig. Einziges Manko: dauert ein wenig lang. Falls es eine Lösung für 2) gibt, die ein wenig schneller ist, wäre ich auch daran interessiert....
Vielen Dank,
Boris
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ADO Recordset Spalten ansprechen in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Einrichten des ADO Recordsets: Stelle sicher, dass du die ADO-Bibliothek in deinem Excel VBA-Projekt aktiviert hast. Gehe zu Extras > Verweise und aktiviere Microsoft ActiveX Data Objects x.x Library.

  2. Erstellen des Recordsets: Erstelle ein neues Recordset mithilfe des folgenden Codes:

    Dim conn As Object
    Dim rs As Object
    
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DeineDatenbank.accdb;"
    rs.Open "SELECT * FROM DeineTabelle", conn
  3. Zugriff auf Spalten mit variablen Indizes: Anstelle von RS!Vorname, kannst du die Spalte mit einem Index ansprechen:

    For Zeile = 1 To x
       For Spalte = 0 To 159 ' 0 für die erste Spalte
           rs.Fields(Spalte).Value = wksExcel.Cells(Zeile, Spalte + 1).Value
       Next Spalte
       rs.MoveNext
    Next Zeile
  4. Befüllen einer Zeile mit einem Befehl: Um eine ganze Zeile auf einmal zu befüllen, kannst du den folgenden Ansatz verwenden, auch wenn dies nicht direkt unterstützt wird:

    Dim i As Integer
    Dim RangeData As Variant
    RangeData = wksExcel.Range("A3:C3").Value
    
    For i = LBound(RangeData, 2) To UBound(RangeData, 2)
       rs.Fields(i - 1).Value = RangeData(1, i)
    Next i

Häufige Fehler und Lösungen

  • Langsame Ausführung: Wenn das Befüllen des Recordsets zu lange dauert, kann es hilfreich sein, das CursorType und LockType des Recordsets anzupassen. Verwende beispielsweise:

    rs.CursorType = 3 ' adOpenStatic
    rs.LockType = 1 ' adLockReadOnly
  • Fehler bei der Indizierung: Achte darauf, dass die Spaltenindizes bei 0 beginnen. Ein Versuch, auf die Spalte 1 zuzugreifen, sollte wie folgt aussehen: rs.Fields(0).


Alternative Methoden

Wenn der direkte Zugriff auf das Recordset nicht die gewünschte Leistung bringt, kannst du auch die Range-Methode von Excel nutzen, um die Daten in einem Rutsch zu übertragen:

wksExcel.Range("A1:C10").CopyFromRecordset rs

Diese Methode ist oft schneller, da sie die Daten in einem einzigen Schritt überträgt.


Praktische Beispiele

Hier ist ein vollständiges Beispiel, um die Daten von Excel in ein ADO Recordset zu übertragen:

Sub BefuelleRecordset()
    Dim conn As Object
    Dim rs As Object
    Dim wksExcel As Worksheet
    Set wksExcel = ThisWorkbook.Sheets("Tabelle1")

    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DeineDatenbank.accdb;"
    rs.Open "SELECT * FROM DeineTabelle", conn

    For Zeile = 1 To 10 ' Beispielsweise 10 Zeilen
        For Spalte = 0 To 159 ' Bis zur 160. Spalte
            rs.Fields(Spalte).Value = wksExcel.Cells(Zeile, Spalte + 1).Value
        Next Spalte
        rs.MoveNext
    Next Zeile

    rs.Close
    conn.Close
End Sub

Tipps für Profis

  • Verwende Transaktionen: Bei großen Datenmengen ist es ratsam, Transaktionen zu verwenden, um die Leistung zu optimieren und Dateninkonsistenzen zu vermeiden.

  • Batch-Updates: Versuche, Batch-Updates anstelle von Einzelaktualisierungen durchzuführen, um die Effizienz zu steigern.

  • Vermeide unnötige Berechnungen: Wenn du viele Daten bearbeitest, schalte die Bildschirmaktualisierung aus:

    Application.ScreenUpdating = False

FAQ: Häufige Fragen

1. Kann ich mit ADO Recordsets auch mehrere Tabellen gleichzeitig bearbeiten?
Ja, du kannst mehrere Recordsets für verschiedene Tabellen erstellen und diese unabhängig voneinander bearbeiten.

2. Wie kann ich ein bestehendes Recordset aktualisieren?
Du kannst ein bestehendes Recordset mit der Update-Methode aktualisieren, nachdem du die Werte für die Felder festgelegt hast:

rs.Fields("Feldname").Value = NeuerWert
rs.Update

3. Was ist der Unterschied zwischen ADO und DAO?
ADO ist für den Zugriff auf Datenbanken über das Internet oder Netzwerke gedacht, während DAO hauptsächlich für den Zugriff auf Microsoft Access-Datenbanken verwendet wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige