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