Recordset aus SQL-Datenbank erzeugen und in Excel ausgeben

  • VBScript

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    Recordset aus SQL-Datenbank erzeugen und in Excel ausgeben

    Moin Moin,

    ich möchte mit vbs eine Connection zu einer MS SQL Datenbank herstellen und die Datensätze in Excel ausgeben.
    Das Script müsste also folgendes können:

    1) Mit Datenbank verbinden
    2) Recordset für alle Tupel einer Datenbanktabelle erstellen (per Schleife??)
    3) Excel öffnen
    4) Datensätze einfügen

    Habe google bemüht und zwei Codeschnipsel zusammengebaut. Hier funktioniert zumindest schonmal das Verbinden mit der Datenbank. Auch das 1. Datum aus der Spalte Datum1 wird mit msgbox erfolgreich ausgegeben:
    ----------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Dim db, rs
    Dim sql
    Dim liste
    Dim oRs
    Dim oCon
    Dim oRsNL

    Set oCon = CreateObject("ADODB.Connection")
    Set oRsNL = CreateObject("ADODB.Recordset")
    oCon.Open "Driver={SQL Server};Server=192.xxx.xx.xx;Database=abc;Uid=abc; Pwd=1x1x1x"

    sql = "SELECT * FROM [abc].[abc].[abc]"

    Set oRsNL = oCon.Execute(sql)
    test = oRsNL.Fields("Datum1").Value

    oCon.Close
    Set oRs = Nothing
    Set oCon = Nothing

    msgbox test
    -------------------------------------------------------------------------------------------------------------------------------------------------------

    Dann hab ich noch ein 2. Script, mit dem Excel öffnen kann:
    -------------------------------------------------------------------------------------------------------------------------------------------------------

    Dim XL
    Const xlLandscape = 2

    Set XL = CreateObject("Excel.Application")

    XL.Workbooks.Add
    XL.Visible = 1 'Excel sichtbar oder nicht sichtbar
    XL.ActiveSheet.PageSetup.Orientation = xlLandscape

    XL.ActiveSheet.Cells(10,3).value = "This is a test"

    Set XL = Nothing
    ----------------------------------------------------------------------------------------------------------------------------------------

    Habe es wie gesagt gegoogelt, komme aber nicht weiter. Enweder sind die Beispiele für VB oder VBA oder in Kombination mit Access.
    Über ein Codebeispiel würde ich mich echt freuen, alles Andere bekomme ich dann sicher über Trial & Error herraus.

    Vielen Dank vorab
    MuHaddi
    Guten Morgen petaod,

    das funktioniert schon mal sehr gut, vielen Dank.

    Was muss ich denn tun, damit
    a) nicht nur das Feld "Datum1" angezeigt wird, sonder alle Felder eines Datensatzes aus der Tabelle?
    b) ich diese Sätze nicht mit der MSGBox anzeigen will, sondern alle in ein Escelsheet schreiben möchte ?

    Viele Grüße und besten Dank vorab für die Mühe,
    MuHaddi

    MuHaddi schrieb:

    alle Felder eines Datensatzes aus der Tabelle
    Dann musst du halt durch die Fields loopen

    Quellcode

    1. For Each Field In oRsNL.Fields


    MuHaddi schrieb:

    alle in ein Escelsheet schreiben
    Am besten schreibst du ein CSV.

    Ich frage mich nur, warum du nicht gleich in Excel ein QueryTable erstellst, dann hast du notfalls sogar einen Live-Link in die Datenbank, den du jederzeit aktualisieren kannst.
    Und bräuchtest nicht ein Bit programmieren.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod,

    irgendwie kann ich das "For Each Field In oRsNL.Fields" irgendwie nicht richtig in meinen Quellcode einbinden. Könntest Du es bitte einmal mit dem zuvor gennaten Loop im Beziehung bringen und den Beispielquellcode posten ?

    Der zweite Ansatz klingt ebenfalls interessant, ggf. werde ich den ebenfalls verfolgen und mich hier mal etwas via Google und Co. schlau machen.

    Beste Grüße
    MuHaddi

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „MuHaddi“ ()

    MuHaddi schrieb:

    irgendwie kann ich das "For Each Field In oRsNL.Fields" irgendwie nicht richtig in meinen Quellcode einbinden
    Wie hast du's denn versucht?
    Da kann man doch fast nichts falsch machen.

    MuHaddi schrieb:

    Der zweite Ansatz klingt ebenfalls interessant
    Und vor allem ist er wesentlich einfacher.
    office.microsoft.com/en-us/exc…ta-HA010342298.aspx?CTT=1
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --