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

Parameter SQL per VBA ändern | Herbers Excel-Forum

Forumthread: Parameter SQL per VBA ändern

Parameter SQL per VBA ändern
22.01.2010 09:19:27
Marcus

Hallo,
ich habe folgende Frage an die Experten unter uns.
Das aufgezeichnete Makro zeigt den SQL Befehl für eine Abfrage einer Datenbank über Excel/MS Query.
Mein Ziel ist, den Parameter Lieferwoche in z.B. Zeile "(AuftraegePositionen.Lieferwoche='06')" über Excel per VBA-Texteingabefeld oder Zellinhalt automatisch zu ändern ohne MS Query öffnen zu müssen.
Also einen


Sub in der die Abfrage gestartet wird und ich den Parameter vorher einstellen kann.

Sub wocheändern()
' wocheändern Makro
With ActiveWorkbook.Connections("Verbindung4").ODBCConnection
.BackgroundQuery = True
.CommandText = Array( _
"SELECT AuftraegePositionen.Positionszaehler, AuftraegePositionen.Vorgangspreset,  _
AuftraegePositionen.Vorgangsnummer" _
, _
", AuftraegePositionen.Positionstyp, AuftraegePositionen.Lieferwoche,  _
AuftraegePositionen.Lieferdatum, AuftraegePosi" _
, _
"tionen.Artikelnummer, AuftraegePositionen.Bezeichnung1, AuftraegePositionen. _
Bezeichnung2, AuftraegePositionen.Menge" _
, _
", AuftraegePositionen.Anzahl, AuftraegePositionen.MengeGeliefert, AuftraegePositionen. _
MengeBerechnet, AuftraegePosi" _
, _
"tionen.Artikelgruppe, AuftraegePositionen.Erloescode, AuftraegePositionen. _
Mengeneinheit" & Chr(13) & "" & Chr(10) & "FROM AuftraegePositionen A" _
, _
"uftraegePositionen" & Chr(13) & "" & Chr(10) & "WHERE (AuftraegePositionen. _
Artikelnummer Like 'CY2%') AND (AuftraegePositionen.Lieferwoche='06'" _
, _
") AND (AuftraegePositionen.Vorgangspreset='A') AND (AuftraegePositionen.Bezeichnung1  _
Not Like 'CY7%') OR (Auftraege" _
, _
"Positionen.Artikelnummer Like 'CY9990%') AND (AuftraegePositionen.Lieferwoche='06')  _
AND (AuftraegePositionen.Vorgan" _
, "gspreset='A') AND (AuftraegePositionen.Bezeichnung1 Not Like 'CY7%')")
.CommandType = xlCmdSql
.Connection = "ODBC;DSN=SageCL;UID=T05;;QueryLock=2;SERVER=NotTheServer"
.RefreshOnFileOpen = False
.SavePassword = False
.SourceConnectionFile = ""
.SourceDataFile = ""
.ServerCredentialsMethod = xlCredentialsMethodIntegrated
.AlwaysUseConnectionFile = False
End With
With ActiveWorkbook.Connections("Verbindung4")
.Name = "Verbindung4"
.Description = ""
End With
ActiveWorkbook.Connections("Verbindung4").Refresh
End Sub

Danke für Eure Hilfe
Marcus

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Parameter SQL per VBA ändern
22.01.2010 10:01:06
Tino
Hallo,
da dies ein String ist, müsste es so gehen.
Ersetze z. Bsp.
AuftraegePositionen.Lieferwoche='06'
so
AuftraegePositionen.Lieferwoche='" & Range("A1").Text & "'
Range("A1") ist die Zelle wo z. Bsp. 06 drin steht,
ich gehe davon aus das in der Zelle auch 06 angezeigt wird.
Gruß Tino
Anzeige
AW: Parameter SQL per VBA ändern
22.01.2010 10:18:33
Marcus
Hallo Tino,
vielen Dank, so hatte ich es auch schon, nur ich habe die Gänsefüßchen vergessen.
Danke
Marcus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Parameter SQL per VBA ändern


Schritt-für-Schritt-Anleitung

Um den Parameter in einer SQL-Abfrage per VBA zu ändern, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbook)" und wähle "Einfügen" -> "Modul".

  3. Füge den folgenden Code ein:

    Sub wocheändern()
       With ActiveWorkbook.Connections("Verbindung4").ODBCConnection
           .BackgroundQuery = True
           .CommandText = Array( _
               "SELECT AuftraegePositionen.Positionszaehler, AuftraegePositionen.Vorgangspreset, " _
               , _
               "AuftraegePositionen.Vorgangsnummer" _
               , _
               ", AuftraegePositionen.Positionstyp, AuftraegePositionen.Lieferwoche, " _
               , _
               "AuftraegePositionen.Lieferdatum, AuftraegePositionen.Artikelnummer, AuftraegePositionen.Bezeichnung1, AuftraegePositionen.Bezeichnung2, AuftraegePositionen.Menge" _
               , _
               ", AuftraegePositionen.Anzahl, AuftraegePositionen.MengeGeliefert, AuftraegePositionen.MengeBerechnet, AuftraegePositionen.Artikelgruppe, AuftraegePositionen.Erloescode, AuftraegePositionen.Mengeneinheit" & Chr(13) & "" & Chr(10) & "FROM AuftraegePositionen" _
               , _
               "WHERE (AuftraegePositionen.Artikelnummer Like 'CY2%') AND (AuftraegePositionen.Lieferwoche='" & Range("A1").Text & "')" _
               , _
               "AND (AuftraegePositionen.Vorgangspreset='A') AND (AuftraegePositionen.Bezeichnung1 Not Like 'CY7%')")
           .CommandType = xlCmdSql
           .Connection = "ODBC;DSN=SageCL;UID=T05;;QueryLock=2;SERVER=NotTheServer"
           .RefreshOnFileOpen = False
           .SavePassword = False
           .SourceConnectionFile = ""
           .SourceDataFile = ""
           .ServerCredentialsMethod = xlCredentialsMethodIntegrated
           .AlwaysUseConnectionFile = False
       End With
       ActiveWorkbook.Connections("Verbindung4").Refresh
    End Sub
  4. Parameter anpassen: Stelle sicher, dass der Wert in Range("A1") die gewünschte Lieferwoche enthält.

  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die SQL-Abfrage mit dem neuen Parameter zu starten.


Häufige Fehler und Lösungen

  • Fehler: "Verbindung nicht gefunden"
    Lösung: Überprüfe den Namen der Verbindung in ActiveWorkbook.Connections("Verbindung4"). Stelle sicher, dass die Verbindung korrekt benannt ist.

  • Fehler: "SQL-Syntaxfehler"
    Lösung: Achte darauf, dass die SQL-Anweisung korrekt formatiert ist. Insbesondere die Verwendung von Gänsefüßchen und Apostrophen ist entscheidend.

  • Problem mit Not Like in der SQL-Abfrage
    Wenn Du die Not Like-Anweisung verwendest, stelle sicher, dass der Ausdruck korrekt formuliert ist, um unerwünschte Ergebnisse zu vermeiden.


Alternative Methoden

Eine weitere Möglichkeit, Parameter in einer SQL-Abfrage zu ändern, besteht darin, Parameterabfragen in MS Query selbst zu verwenden. Dies ermöglicht es Dir, Eingabefelder zu erstellen, die den Benutzer auffordern, Parameterwerte einzugeben, bevor die Abfrage ausgeführt wird.


Praktische Beispiele

Hier ist ein Beispiel für eine SQL-Abfrage mit einem Parameter, der per VBA angepasst wird:

Sub beispiel()
    Dim lieferwoche As String
    lieferwoche = "06" ' Beispielwert
    With ActiveWorkbook.Connections("Verbindung4").ODBCConnection
        .CommandText = "SELECT * FROM AuftraegePositionen WHERE Lieferwoche='" & lieferwoche & "'"
        .Refresh
    End With
End Sub

In diesem Beispiel wird die Lieferwoche direkt im Code definiert, aber Du kannst sie auch aus einer Zelle wie Range("A1") ziehen.


Tipps für Profis

  • Dynamische Parameter: Verwende Zellenreferenzen (z.B. Range("A1")), um Parameter dynamisch zu halten. So kannst Du die Abfrage einfach anpassen, ohne den VBA-Code ändern zu müssen.
  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deinem VBA-Code, um unerwartete Probleme abzufangen. Zum Beispiel:

    On Error GoTo Fehlerbehandlung
    ' Dein Code hier
    Exit Sub
    Fehlerbehandlung:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Wie kann ich die SQL Abfrage anpassen, um mehrere Parameter zu benutzen?
Du kannst mehrere Parameter in der WHERE-Klausel hinzufügen, indem Du sie mit AND oder OR verbindest. Achte darauf, die Syntax korrekt zu halten.

2. Funktioniert das auch in älteren Excel-Versionen?
Ja, die beschriebenen VBA-Methoden sollten in den meisten Excel-Versionen ab Excel 2007 funktionieren, solange die ODBC-Verbindung korrekt eingerichtet ist.

3. Was ist der Unterschied zwischen Like und Not Like?
Like wird verwendet, um Muster zu suchen, während Not Like alle Zeilen zurückgibt, die nicht dem angegebenen Muster entsprechen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige