Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Variable an SQL Statement übergeben

Forumthread: Variable an SQL Statement übergeben

Variable an SQL Statement übergeben
18.06.2002 10:17:18
Marcel
Hallo!

Ist es möglich eine Variable an ein SQL Statement zu übergeben?
Hier mein Quelltext:
Sub Makro1()
'
' Makro1 Makro

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=MS Access 97-Datenbank;DBQ;DefaultDir=C:\Programme\DiagZen;DriverId=25;FIL=MS Access;MaxBufferSize=512;" _
), Array("PageTimeout=5;")), Destination:=Range("A1"))
.Sql = Array( _
"SELECT Meldungen_030.Zeit, Meldungen_030.Text" & Chr(13) & "" & Chr(10) & "FROM `H:\Dokumente\Diag_Daten`.Meldungen_030 Meldungen_030" & Chr(13) & "" & Chr(10) & "WHERE (Meldungen_030.Zeit>={ts '2002-04-25 01:52:07'} And Meldungen_030.Zeit<={ts '2002-04-25" _
, " 03:52:00'})" & Chr(13) & "" & Chr(10) & "ORDER BY Meldungen_030.Zeit")
.FieldNames = True
.RefreshStyle = xlInsertDeleteCells
.RowNumbers = False
.FillAdjacentFormulas = False
.RefreshOnFileOpen = False
.HasAutoFormat = True
.BackgroundQuery = True
.TablesOnlyFromHTML = True
.Refresh BackgroundQuery:=False
.SavePassword = True
.SaveData = True
End With
ActiveWindow.View = xlPageBreakPreview
ActiveWindow.SmallScroll Down:=-3
ActiveWindow.View = xlNormalView
End Sub

Ich wollte eine eigene Tabelle auswählen und eigene Spalten und nicht die die im Quellcode steht. Anstatt Meldung_30 wollte ich eine Tabelle auswählen. Ist das irgendwie Möglich?

Danke vielmals!

MfG Marcel

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Re: Variable an SQL Statement übergeben
18.06.2002 10:45:35
Marek Westendorf
Hallo,

geht eigentlich ganz einfach. du kannst einfach variablen in den sql code einbauen. man muß nur manchmal aufpassen, wenn man strings übergeben will, dann zuerst raus aus dem statement mit " und anschließend ein ', um den string zu beginnen, dann abschließen mit ' und wieder in das statement rein mit ".

als beispiel:

(dabei sind tabelle und daten() als variablen (strings)einzulesen)

"SELECT * FROM " & Tabelle & " WHERE (DATE =(SELECT _
MAX(DATE)FROM " & Tabelle & " WHERE ISIN ='" & Daten(0) & _
"') AND NAME ='" & Daten(1) & "' AND Local_Code ='" & _
Daten(2) & "' AND SEDOL ='" & Daten(2) & "' AND _
DATASTREAM_Code ='" & Daten(3) & "' AND Mnemonic = '" & _
Daten(4) & "')"

hoffentlich hilfts...

Anzeige
Re: Variable an SQL Statement übergeben
18.06.2002 11:02:02
Marcel
Hi Marek!
Danke erstmal! Aber es funktioniert irgendwie nicht. Wie sieht das in meinem Fall konkret aus?`

Marcel

Re: Variable an SQL Statement übergeben
18.06.2002 12:18:47
Marcel
Habs geschnallt!

Danke

Re: Variable an SQL Statement übergeben
18.06.2002 12:30:20
Marek Wesetndorf
tut mir leid für die späte reaktion, bin erst jetzt zurückgekommen.

schön, daß es auch ohne weitere erklärungen geklappt hat :-))

Anzeige
;
Anzeige

Infobox / Tutorial

Variablen in SQL-Statements in Excel übergeben


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.

  2. Erstelle ein neues Modul über Einfügen > Modul.

  3. Füge den folgenden Code in das Modul ein:

    Sub Makro1()
       Dim Tabelle As String
       Dim Daten(0 To 4) As String
    
       ' Beispielvariablen setzen
       Tabelle = "DeineTabelle"
       Daten(0) = "ISIN_Wert"
       Daten(1) = "Name_Wert"
       Daten(2) = "Local_Code_Wert"
       Daten(3) = "DataStream_Code_Wert"
       Daten(4) = "Mnemonic_Wert"
    
       With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
           "ODBC;DSN=MS Access 97-Datenbank;DBQ;DefaultDir=C:\Programme\DiagZen;DriverId=25;FIL=MS Access;MaxBufferSize=512;" _
           ), Array("PageTimeout=5;")), Destination:=Range("A1"))
           .Sql = "SELECT * FROM " & Tabelle & _
                  " WHERE (DATE = (SELECT MAX(DATE) FROM " & Tabelle & _
                  " WHERE ISIN = '" & Daten(0) & "' AND NAME = '" & Daten(1) & "' AND Local_Code = '" & Daten(2) & _
                  "' AND SEDOL = '" & Daten(2) & "' AND DATASTREAM_Code = '" & Daten(3) & _
                  "' AND Mnemonic = '" & Daten(4) & "'))"
           .FieldNames = True
           .Refresh BackgroundQuery:=False
       End With
    End Sub
  4. Ändere die Variablen Tabelle und Daten, um sie an deine spezifischen Anforderungen anzupassen.

  5. Führe das Makro aus, um die Daten abzufragen.


Häufige Fehler und Lösungen

  • Fehler: SQL-Syntaxfehler

    • Lösung: Stelle sicher, dass du die SQL-Variablen korrekt in den SQL-String einfügst. Überprüfe die Anführungszeichen, besonders wenn du Strings verwendest.
  • Fehler: Verbindung zur Datenbank nicht möglich

    • Lösung: Überprüfe die ODBC-Datenquelle und stelle sicher, dass der Pfad zur Datenbank korrekt ist.
  • Fehler: Keine Daten zurückgegeben

    • Lösung: Vergewissere dich, dass die Variablenwerte in Daten tatsächlich existieren und der SQL-Query entsprechen.

Alternative Methoden

  • Verwendung von Parameterabfragen: Du kannst in Excel auch Parameterabfragen verwenden, um SQL-Variablen sicher zu übergeben. Dies verhindert SQL-Injection und macht die Abfragen sicherer.

  • SQL-Statements in einer externen Datei speichern: Du kannst die SQL-Befehle in einer Textdatei speichern und diese dann im VBA-Code einlesen, um die Übersicht zu erhöhen.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine SQL-Variable in einem SQL WITH Statement verwenden kannst:

With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
    "ODBC;DSN=MS Access 97-Datenbank;DBQ;DefaultDir=C:\Programme\DiagZen;DriverId=25;FIL=MS Access;MaxBufferSize=512;" _
    ), Array("PageTimeout=5;")), Destination:=Range("A1"))
    .Sql = "WITH LatestDate AS (SELECT MAX(DATE) AS MaxDate FROM " & Tabelle & ") " & _
           "SELECT * FROM " & Tabelle & " WHERE DATE = (SELECT MaxDate FROM LatestDate)"
    .FieldNames = True
    .Refresh BackgroundQuery:=False
End With

Tipps für Profis

  • Verwende Debugging: Nutze Debug.Print in deinem Code, um den generierten SQL-String zu überprüfen. So kannst du sicherstellen, dass alle Variablen korrekt übergeben werden.

  • Vermeide SQL-Injection: Achte darauf, dass du keine ungesicherten Benutzereingaben in deine SQL-Queries einfügst, um Sicherheitsrisiken zu minimieren.

  • Dokumentation: Halte deine SQL-Statements und ihre Funktionalität gut dokumentiert, um die Wartung zu erleichtern.


FAQ: Häufige Fragen

1. Kann ich auch andere Datenbanktypen verwenden?
Ja, du kannst auch andere Datenbanktypen wie SQL Server oder MySQL verwenden, indem du die entsprechende ODBC-Verbindung einrichtest.

2. Wie kann ich die Abfragegeschwindigkeit verbessern?
Optimiere deine SQL-Statements und stelle sicher, dass die verwendeten Tabellen korrekt indiziert sind. Das kann die Leistung deutlich verbessern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige