Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

SQL Abfrage in VBA mit einem "WITH" Befehl

SQL Abfrage in VBA mit einem "WITH" Befehl
02.08.2016 08:50:48
Paul
Hallo,
nachdem ich bisher jedes meiner Probleme durch die Suche lösen konnte, ist es nun soweit das ich auch mal einen Eintrag verfassen muss/kann.
Es geht darum das ich via VBA eine Verbindung zu SQL aufbaue und eine Abfrage starte. Der SQL String liegt dabei in einer Textfile und wird eingelesen. Der allgemeine Aufbau funktioniert also ich kann SQL Abfragen starten und diese werden auch ausgeführt. Jedoch habe ich hier nun eine Abfrage die ich einfach nicht zum laufen bekommen will. Wenn ich die Abfrage direkt in MYSQL ausführe funktioniert sie wunderbar. Ich weiß das MYSQL automatisch bestimmte Schönheitskorrekturen vornimmt, aber ich sehe leider nicht welche damit es hier funktioniert.
Hier einmal der SQL Aufruf:

Sub SQL_Import_Assetklassen(sql_datei As String, spalte_einfuegen As Long)
Dim Datei
Dim FSO
Dim Str_String
Dim varSQL
Dim varConn
Dim user
Dim server
'Textdatei auslesen
Set FSO = CreateObject("Scripting.FilesystemObject")
Set Datei = FSO.Opentextfile(pfad & sql_datei)
Str_String = Datei.readall
Datei.Close
'SQL-Abfrage starten
varConn = _
"ODBC;Driver={Microsoft ODBC for Oracle};" _
& "DSN=" + server + ";" _
& "UID=" + user + ";" _
& "PWD=" + passwort + ";" _
& "SERVER=" + server + ";"
varSQL = Str_String
Debug.Print varSQL
'Ausgabe in Excel
ActiveWorkbook.Worksheets("Daten").Activate
ActiveWorkbook.Worksheets("Daten").Cells(1, 1).Value = Str_String
With ActiveSheet.QueryTables.Add(Connection:=varConn, Destination:=Cells(1,  _
spalte_einfuegen))
.CommandText = varSQL
.Refresh BackgroundQuery:=False
End With
End Sub
und hier noch der Text der .txt File. Die eig. File ist wesentlich länger aber auch in der kurz Form hier funktioniert es nicht. Wenn ich die innere Select Abfrage ausführe, also ohne den WITH teil funktioniert es auch.

WITH giro_vek AS (
SELECT  distinct cd.customer_id,
SUM(a.staffel_anteil) AS aum_giro_vek,
CASE
WHEN SUM(a.staffel_anteil) = 5000000 THEN 'K >= 5000000'                                        _
END AS klasse
FROM
dwh.acct_balance_cond_scale a,
dwhmart.contract_dim_2008 cd
WHERE
cd.contract_id = a.contract_id
AND a.prod_kond IN ('GIK', 'TGK', 'OFTR', 'CFD', 'VISA', 'ELK', 'GKM')
AND a.valid_at = '05.07.2016'
AND a.staffel_anteil >= 0
GROUP BY cd.customer_id)
select g.*
from giro_vek g

Vielen Dank schon einmal für die Hilfe.
Gruß
Paul

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

Betreff
Datum
Anwender
Anzeige
AW: SQL Abfrage in VBA mit einem "WITH" Befehl
02.08.2016 11:51:05
EtoPHG
Hallo Paul,
Zitat: Der SQL String liegt dabei in einer Textfile und wird eingelesen.
nun sieht aber dein unterer Teil gar nicht wie eine SQL Abfrage aus, sondern wie mehrere (s.u.a. ...cd.customer_id) SELECT g.*....!
Der ODBC-Treiber kann aber nur einen (praktisch beliebig komplexen) SQL ausführen.
Du sagst nicht welches Teil und über was für einen DB-Client du dein Originalfile ausführst!
Gruess Hansueli
AW: SQL Abfrage in VBA mit einem "WITH" Befehl
02.08.2016 12:40:13
Paul
Hi Hansueli,
okay da habe ich mich wohl etwas unschön ausgedrückt. Mit einer Abfrage meinte ich das alles in _ einem File passiert. Die Original File führe ich über den PLSQL Developer aus. Die gesamte File besteht aus 4 Abfragen, wie in dem Code den ich hochgeladen habe also

WITH X AS ( select...), Y AS (select... ) .. )
Select ... FROM X,Y 
Bin gerade etwas überfragt was genau eine Abfrage definiert, ich konnte bisher auch SQL codes der Art Select ... FROM(Select ...) ausführen oder gilt dies als eine einzelne Abfrage
Gruß
Paul
Achso die Original File führe ich in Excel 2010 aus.
Anzeige
AW: SQL Abfrage in VBA mit einem "WITH" Befehl
02.08.2016 12:54:49
EtoPHG
Hallo Paul,
SQL-Developer führt einzelne Abfragen sequentiell nacheinander aus und schreibt die Row-Sets in sowiele Tab's wie Abfragen vorhanden sind. Das kann ODBC nicht. Woher auch und wie? Du kannst nur einzelne SQL's absetzen, die genau 1 Row-Set zurückgeben, musst also die verschiedenen Abfragen deines Textfiles in separieren und nacheinander ausführen.
Gruess Hansueli
AW: SQL Abfrage in VBA mit einem "WITH" Befehl
02.08.2016 13:37:24
Paul
Okay dann habe ich wieder etwas gelernt. Mir war nicht bewusst, das ODBC sich keinen Zwischenspeicher schnappen kann und die Ergebnisse dort speichert bis die Verbindung wieder geschlossen wird.
Dann muss ich die Abfragen nun zerstückeln und am Ende noch einmal eine Abfrage auf alle Daten loslassen.
Vielen Dank Hansueli
Anzeige

154 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige