Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

SQL Select Abfrage in VBA
#1
Guten Morgen,

ich habe vor ein Makro zu erstellen dass bei Ausführung eine SQL Abfrage durchführt (Daten ->Daten Abrufen -> aus SQL Datenbank).
Diese soll dann einfach das Leere Arbeitsblatt eingefügt werden.
So nun funktioniert alles wunderbar nur die Abfrage selbst nicht, da ich mich bei SQL fast nicht auskenne habe ich den Abruf über einen "SQL Abruf Ersteller" angefertigt.
Wenn ich diesen aber in meinen String einfüge und durchlaufen lasse bekomme ich immer wieder den Fehler.

""Der Import D1.dbo.DV_FE_URLAUB" entspricht keinem Export. Dies ist möglicherweise auf einem fehlenden Modulverweis zurückzuführen"

So sieht mein Code aus:

Sub SQL()

Dim sqlabfrage As String
sqlabfrage = "Select dvk.ANF_TERMIN , dvk.D2_FRUEHESTER_TERMIN, dvk.END_TERMIN, dvk.ORT, dvk.ORG_TERMIN, dvk.ANZAHL, dvk.WUNSCH_TERMIN, FROM D1.dbo.DV_FE_URLAUB dvk"

ActiveWorkbook.Queries.Add Name:="D1", Formula:= _
        "let" & Chr(13) & "" & Chr(10) & "    Quelle = Sql.Databases(""111.11.111.111"")," & Chr(13) & "" & Chr(10) & "    M1 = Quelle{[Name=""D1""]}[Data]" & Chr(13) & "" & Chr(10) & "in" & Chr(13) & "" & Chr(10) & "    M1"
    ActiveWorkbook.Worksheets.Add
    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "OLEDB;Provider=Microsoft.Mashup.OleDb.1;Data Source=$Workbook$;Location=D1;Extended Properties=""""" _
        , Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdSql
        .CommandText = sqlabfrage
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = "_D1"
        .Refresh BackgroundQuery:=False
End With

End Sub



Ich denke dass es an dem Format des Abruf Befehls liegt leider kann ich mir da nicht selber weiterhelfen und habe bereits dass halbe Internet durchforstet, was ich jedoch herausgefunden habe mit "Select * FROM [D1]" funktioniert alles wie gewollt nur dass ich halt nicht die Werte bekomme die ich brauche.

Hoffe mir kann da jemand weiterhelfen.

Danke Schonmal,
Gruß,
Thomas
Antworten Top
#2
Moin,

eine Möglichkeit:

gibt es eine DSN zur Datenbank?
Wenn ja, verwende das ADODB-Objekt in Verbindung mit einem ADODB.Recordset.

Fülle das Recordset mit der Methode .GetRows und Application.WorksheetFunction.Transpose() in ein 2 dimensionales Array und schreibe dieses in Verbindung mit Range.Resize(UBound() ,UBound()) zurück ins Worksheet.

Dieser Code ist besser zu lesen und pflegbarer bei SQL-Statementänderungen.
gruß
Marco
Antworten Top
#3
Servus Mase,

erstmal vielen dank, dass du mir wieder hilfst.

DSN ist mir jetzt keine Bekannt. Läuft alles über IP und Benutzer....
SQL-Statementänderungen werden keine stattfinden sobald dieser Code einmal funktioniert bleibt die Abfrage so.

Ich denke weiterhin dass irgendwas mit dem Select/From nicht stimmt.

Gruß
Thomas
Antworten Top
#4
Dann versuch doch mal via MS-Query die Abfrage zu erstellen.

Wenn Du Daten im MS-Query nach absetzen des Statements in Tabellenform angezeigt bekommst,
kannst Du das funktionierende SQL-Statement im MS-Query über die Menüleiste -> Ansicht -> SQL einsehen und via copy/paste in Deinem Code der Variable sqlabfrage zuweisen.


Alternativ:
MS-Access die Tabellen verknüpfen und das SQL-Statement bei Erfolg kopieren.
gruß
Marco
Antworten Top
#5
An MS-Query hab ich auch schon gedacht aber komischerweise ist diese Abfrageform in meinem Excel ausgegraut....
Mal schauen was ich da machen kann.

Dass mit Access ist auch ein guter Ansatz vlt. probier ich das mal.

Danke Schonmal

Gruß,
Thomas
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste