Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SQL-Abfrage ADO mit Zeilenüberschriften

Forumthread: SQL-Abfrage ADO mit Zeilenüberschriften

SQL-Abfrage ADO mit Zeilenüberschriften
29.01.2021 13:48:12
Sven
Hallo zusammen,
ich habe diesen Code geerbt. Funktioniert und ab Zeile 4 bekomme ich die Datensätze.
Wie kann ich ihn ergänzen, damit in Zeile 3 die Spaltenüberschriften stehen?

Dim objConn As ADODB.Connection
Dim objRec As ADODB.Recordset
Dim strConnectionString As String
Dim i As Integer
strConnectionString = "Provider=MSDASQL.1;Driver=SQL Server;Server=" & strServer & "; _
Database=" & strDB & ";Trusted_Connection=Yes"
Set objConn = New ADODB.Connection
objConn.ConnectionString = strConnectionString
objConn.CommandTimeout = intTimeout
objConn.Open
Set objRec = New ADODB.Recordset
objRec.Open strSQL, objConn, adOpenStatic
With ThisWorkbook.Worksheets("Abfrageergebnis").Range("A4")
.CurrentRegion.Clear
.CopyFromRecordset objRec
End With
i = objRec.RecordCount
If i = 1 Then
MsgBox "Abfrage liefert 1 Zeile.", vbInformation
Else
MsgBox "Abfrage liefert " & i & " Zeilen.", vbInformation
End If
objConn.Close

Danke und Grüße
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SQL-Abfrage ADO mit Zeilenüberschriften
29.01.2021 14:53:40
EtoPHG
Hallo Sven,
...und woher soll das SQL wissen, wie deine Spaltenüberschriften lauten sollen?
Ein DB-Table kenne Spaltennamen und die gibst Du ja im SQL-Select vor. Also fülle deine Spaltennamen aufgrund deiner Variablen strSQL(deren Inhalt wir leider nicht sehen!) programmatisch in der Reihenfolge der angefragten Spaltennamen Zelle für Zelle ab.
Gruess Hansueli
Anzeige
AW: SQL-Abfrage ADO mit Zeilenüberschriften
29.01.2021 15:11:57
Sven
Die Spaltenüberschriften sollen lauten wie die Spaltennamen.
Müssten die nicht im objRec stehen?
AW: SQL-Abfrage ADO mit Zeilenüberschriften
29.01.2021 15:33:23
Sven
Super, so funktionierts:
For i = 1 To objRec.Fields.Count
.Cells(3, i) = objRec.Fields(i - 1).Name
Next i
Vielen Dank, schönes Wochenende!
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

SQL-Abfrage ADO mit Zeilenüberschriften in Excel


Schritt-für-Schritt-Anleitung

Um eine SQL-Abfrage in Excel mit Zeilenüberschriften zu versehen, kannst Du folgenden VBA-Code verwenden. Dieser Code verbindet sich mit einer Datenbank und kopiert die Daten in ein Excel-Arbeitsblatt, wobei die Spaltenüberschriften in der dritten Zeile platziert werden.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Dim objConn As ADODB.Connection
Dim objRec As ADODB.Recordset
Dim strConnectionString As String
Dim i As Integer

strConnectionString = "Provider=MSDASQL.1;Driver=SQL Server;Server=" & strServer & ";Database=" & strDB & ";Trusted_Connection=Yes"
Set objConn = New ADODB.Connection
objConn.ConnectionString = strConnectionString
objConn.CommandTimeout = intTimeout
objConn.Open

Set objRec = New ADODB.Recordset
objRec.Open strSQL, objConn, adOpenStatic

With ThisWorkbook.Worksheets("Abfrageergebnis").Range("A4")
    .CurrentRegion.Clear
    .CopyFromRecordset objRec
End With

For i = 1 To objRec.Fields.Count
    ThisWorkbook.Worksheets("Abfrageergebnis").Cells(3, i) = objRec.Fields(i - 1).Name
Next i

If objRec.RecordCount = 1 Then
    MsgBox "Abfrage liefert 1 Zeile.", vbInformation
Else
    MsgBox "Abfrage liefert " & objRec.RecordCount & " Zeilen.", vbInformation
End If

objConn.Close
  1. Passe die Variablen strServer, strDB, strSQL und intTimeout entsprechend Deinem Setup an.
  2. Führe das Skript aus, um die Daten mit den Spaltenüberschriften zu importieren.

Häufige Fehler und Lösungen

  • Fehler: "Provider not found"
    Überprüfe, ob der OLE DB Provider MSDASQL.1 auf Deinem System installiert ist. Möglicherweise musst Du den passenden Treiber herunterladen.

  • Fehler: "Connection failed"
    Stelle sicher, dass die Verbindungsparameter (strServer und strDB) korrekt sind. Teste die Verbindung in einem SQL-Client, bevor Du sie in Excel verwendest.

  • Fehler: "No data returned"
    Vergewissere Dich, dass Deine SQL-Abfrage (strSQL) gültig ist und tatsächlich Daten zurückgibt.


Alternative Methoden

Eine alternative Methode zur Durchführung von SQL-Abfragen in Excel ist die Verwendung von Power Query. Hier kannst Du eine Verbindung zu einer Datenquelle herstellen und Deine SQL-Abfragen direkt im Power Query-Editor ausführen, ohne VBA zu verwenden.

  1. Gehe zu Daten > Abfragen und Verbindungen > Abfrage erstellen.
  2. Wähle die entsprechende Datenquelle aus und füge Deine SQL-Abfrage ein.
  3. Lade die Daten in ein Arbeitsblatt.

Praktische Beispiele

Beispiel einer SQL-Abfrage:

SELECT Name, Alter, Stadt FROM Kunden WHERE Aktiv = 1

Diese Abfrage gibt alle aktiven Kunden mit ihren Namen, Alter und Stadt zurück. Um diese Abfrage in Deinem VBA-Code zu verwenden, setze sie in die Variable strSQL ein.


Tipps für Profis

  • Verwende Parameter in SQL-Abfragen:
    Um die Sicherheit zu erhöhen, solltest Du Parameter in Deine SQL-Abfragen einfügen, um SQL-Injection zu vermeiden.

  • Fehlerbehandlung implementieren:
    Füge Fehlerbehandlungsroutinen in Deinen VBA-Code ein, um Probleme während der Datenbankverbindung oder -abfrage zu erkennen und zu melden.

  • Daten automatisch aktualisieren:
    Überlege, wie Du Deine Daten regelmäßig aktualisieren kannst, z.B. durch das Erstellen eines Makros, das beim Öffnen der Datei ausgeführt wird.


FAQ: Häufige Fragen

1. Wie kann ich die Spaltenüberschriften automatisch ändern?
Ändere einfach den Code im Abschnitt, der die Überschriften definiert, um andere Namen zu verwenden.

2. Was ist der Unterschied zwischen ADO und DAO?
ADO (ActiveX Data Objects) ist flexibler und unterstützt eine Vielzahl von Datenquellen, während DAO (Data Access Objects) speziell für Microsoft Access optimiert ist.

3. Kann ich auch andere Datenbanken ansprechen?
Ja, Du kannst andere Datenbanken ansprechen, indem Du den Provider und die Verbindungszeichenfolge entsprechend anpasst, z.B. für MySQL oder Oracle.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige