Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1144to1148
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 mit variablen Wert aus Zelle A2

SQL mit variablen Wert aus Zelle A2
Detlef
Hallo zusammen,
ich lese folgenden SQL aus einer TXT-Datei aus:
SELECT A.PART_BGVG, A.VTNR_SVTNR, A.VTNR_SVTNRNAME,BA.AUSWZEIT,
SUM(CASE WHEN BB.PRODSL_STUFE3_ID = 2010650
THEN BA.BES_BTR
ELSE 0
END) AS Transport
FROM DWHFB.FAKT_BESTAND_AGT BA
INNER JOIN DWHFB.DIM_VTNR A
ON (BA.PART_BGVG = A.PART_BGVG)
AND (BA.VTNR_ID = A.VTNR_VTNR)
INNER JOIN DWHFB.DIM_PRODSL BB
ON (BA.PART_BGVG = BB.PART_BGVG)
AND (BA.PRODSL_ID = BB.PRODSL_STUFE0_ID)
WHERE BA.AUSWZEIT >= '01.01.2009'
AND A.VTNR_SVTNR = 1234567
GROUP BY A.PART_BGVG, A.VTNR_SVTNR, A.VTNR_SVTNRNAME,BA.AUSWZEIT
Die SVTNR möchte ich gern variabel gestalten und aus der Zelle A2 des Arbeitsblattes PARA auslesen. Die Zelle trägt den Bereichsnamen rP1.SVTNR. Ich möchte den "harten" Eintrag im SQL z.B. durch Range("rP1.SVTNR").value ersetzen. Bin bisher bei allen möglichen Varianten gescheitert. Wenn ich das aus der TXT-Datei einlese, setzt der Code nicht den Inhalt der Zelle.
Es handelt sich um eine Oracle-Abfrage.
Bin für jeden Hinweis dankbar.
Gruß Detlef

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: SQL mit variablen Wert aus Zelle A2
23.03.2010 10:56:31
Renee
Hi Detlef,
Zeig mal den VBA-Code, der jetzt die Txt-Datei statisch verarbeitet!
GreetZ Renée
AW: SQL mit variablen Wert aus Zelle A2
23.03.2010 10:57:19
xr8k2
Hallo Detlef,
Ist der "harte" SVTNR - Wert in der .txt immer gleich? Kann der in der .txt vielleicht durch eine durch eine spez. Textmarke ersetzt werden?
Zeig mal den Code zum Einlesen der .txt.
Gruß,
xr8k2
AW: SQL mit variablen Wert aus Zelle A2
23.03.2010 11:06:22
Detlef
Hallo,
hier der Code zum Einlesen der TXT:
Sub ProcSqlCreate_AA()

    Dim strSQLString As String
    Dim strFivServer As String
    Dim strFormKopSP As Integer
    Dim intFormKopZE As Integer
    Dim verz As String

    On Error Resume Next
    
    strFivServer = Range("rP1.FIVServer").Value
    verz = ActiveWorkbook.Path
        
    Open verz & "\SqlCreate_AA.txt" For Input As #1
    strSQLString = Input(LOF(1), 1)
    Close #1
        
    '***Position des Datenimports aus Oracle 
    strFormKopSP = 2 '***aufsetzen Importspalte 
    intFormKopZE = 2 '***aufsetzen Importzeile 

'    procSQL_Beginn 
    Call procOracle(strSQLString, strFivServer, strFormKopSP, intFormKopZE)
'    procSQL_Ende 
        
End Sub
und hier der Code für die Einbindung von Oracle:
Option Explicit
Sub procOracle(strSQLString As String, strSERVER As String, strFormKopSP As Integer, intFormKopZE As Integer)
    Dim cn         As Connection
    Dim rs         As Recordset
    Dim conn       As String
    Dim SQLString  As String
    Dim xx         As Worksheet   ' das Ziel-Tabellenblatt in Excel 
    Dim i          As Long
    Dim J          As Long
    Dim anzZeilen  As Long

'    On Error GoTo fehler 

    Set xx = ActiveSheet  '***das Ziel-Tabellenblatt in Excel 
    
    '***Die datenbank öffnen 
    Set cn = New ADODB.Connection

    Open "C:\AZ_DATEN\OraclePassW.txt" For Input As #1
    conn = Input(LOF(1), 1)
    Close #1

    conn = conn & ";DRIVER={Microsoft ODBC for Oracle};SERVER=" & strSERVER + ";"
    
    With cn
        .ConnectionString = conn
        .Open
    End With
    
    '***Definieren was geholt werden soll 
    SQLString = strSQLString
    
    Set rs = New ADODB.Recordset
    rs.Open SQLString, cn, adOpenDynamic, adLockReadOnly
    
    '***Die Feldnamen der Datenbanktabelle in die definierte Zeile der Exceltabelle schreiben 
   
    For J = 0 To rs.Fields.Count - 1
        xx.Cells(intFormKopZE, J + strFormKopSP) = rs.Fields.Item(J).Name '***und auf definerte Spalte aufsetzen 
    Next
        
    '***Jetzt alle Sätze holen und in die Exceltabelle schreiben 
    i = intFormKopZE '***auf Zeile 2 beginnen 
    rs.MoveFirst
    Do While rs.EOF = False
        i = i + 1
        For J = 0 To rs.Fields.Count - 1
        If IsNull(rs.Fields.Item(J).Value) = False Then
           xx.Cells(i, J + strFormKopSP) = rs.Fields.Item(J).Value '***und auf die definierte Spalte aufsetzen 
        End If
        Next
        rs.MoveNext
    Loop
    
    rs.Close
    cn.Close

    '***optimale Spaltenbreite einstellen 
'        Cells.Select 
'        Selection.Columns.AutoFit 
        
    Set rs = Nothing
    Set cn = Nothing
    Set xx = Nothing
    
fehler:
    Exit Sub
    
End Sub
Gruß Detlef
Anzeige
AW: SQL mit variablen Wert aus Zelle A2
23.03.2010 11:23:59
Renee
Hi Detlef,
' In der ersten Prozedur, nach...
strSQLString = Input(LOF(1), 1)
' einsetzen...
strSQLString = Replace(strSQLString, "1234567", Worksheets("PARA").Cells(2,1).Text))

GreetZ Renée
In der Hoffnung, Renée, ...
23.03.2010 11:35:03
xr8k2
... das die "1234567" nie irgendwo anders im SQL-String regulär auftauchen ;-)
Gruß,
xr8k2
AW: In der Hoffnung, Renée, ...
23.03.2010 12:26:23
Detlef
Hallo,
nein, kein Problem "1234567" war nur so als Beispiel. Im Original werden da eindeutige Platzhalter stehen z.B. PLH_SVTNR
Gruß Detlef
Dann halt, besser ...
23.03.2010 12:29:35
Renee
damit auch die Hoffnung nicht stirbt:
im Vorschlag war eh ein Fehler )-zuviel ;-)
    strSQLString = Replace(strSQLString, "A.VTNR_SVTNR = 1234567", _
"A.VTNR_SVTNR = " & Worksheets("PARA").Cells(2, 1).Text)
GreetZ Renée
Anzeige
AW: Dann halt, besser ...
23.03.2010 13:51:02
Detlef
Hallo Renée,
nehme gern auch besser. Sieht jetzt bei mir so aus.
    strSQLString = Replace(strSQLString, "A.VTNR_SVTNR=PLH_SVTNR", _
                           "A.VTNR_SVTNR = " & Worksheets("PARA").Range("rP1.SVTNR").Text)
Nochmals besten Dank an Euch beide.
Gruß Detlef
AW: super, vielen Dank (owT)
23.03.2010 11:39:02
Detlef

330 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige