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

Forumthread: SQL-Abfrage mit Variable

SQL-Abfrage mit Variable
28.12.2008 19:12:39
Dieter
Hallo zusammen,
ich möchte bei einer SQL-Abfrage eine Variable einsetzen.
Mein Makro sieht an der Stelle so aus
..... & "WHERE Top15000.nr Like & Testnr)")
TOP15000 ist eine SQL-Tabelle
nr ist die SQL-Tabellenspalte
Dim Testnr as integer
Testnr ist = Range("testnr1").value
Es wird ein Syntax-Fehler ausgegeben......
Weiss jemand wo der Fehler ist ?
Gruß Dieter
Anzeige

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SQL-Abfrage mit Variable
28.12.2008 19:28:21
Ramses
Hallo
..... & "WHERE Top15000.nr Like " & Testnr & ")")
ACHTUNG:
Ein Leerzeichen nach "Like".
Dann sollte das tun
Gruss Rainer
AW: SQL-Abfrage mit Variable
28.12.2008 20:01:00
Dieter
nee, bekomme immernoch einen Syntax-Fehler
Gruß Dieter
AW: SQL-Abfrage mit Variable
28.12.2008 20:05:00
Ramses
Hallo
dann stell doch mal den ganzen Code hier rein
Gruss Rainer
Anzeige
AW: SQL-Abfrage mit Variable
28.12.2008 20:16:09
Dieter
das ist der gesamte Code

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:= _
"ODBC;DSN=Visamdaten;Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office  _
2003;WSID=DSCHWAB;DATABASE=Visamdaten" _
, Destination:=Range("A1"))
.CommandText = Array( _
"SELECT Feuchte_W5.snr, Feuchte_W5.ID" & Chr(13) & "" & Chr(10) & "FROM Visamdaten.dbo. _
Feuchte_W5 Feuchte_W5" & Chr(13) & "" & Chr(10) & "WHERE Feuchte_W5_Top15000.snr Like " & Testsnr & ")")
.Refresh BackgroundQuery:=False
End With
End Sub


der Fehler kommt beim .Refresh
Gruß Dieter

Anzeige
AW: SQL-Abfrage mit Variable
28.12.2008 20:36:46
Ramses
Hallo
Also dies
"... & Chr(13) & "" & Chr(10) & ..."
ist mir schon mal suspekt.
Wozu soll das gut sein bzw. was willst du da abfragen ?
Das sind doch nur Zeilenschaltungen und die haben in einem SQL-String eigentlich nichts verloren
Probier mal

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;Description=Visamdaten;UID= _
Test;PWD=Test1;APP=Microsoft Office 2003;WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1")).CommandText = _
Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID FROM Visamdaten.dbo Feuchte_W5 Feuchte_W5 WHERE  _
Feuchte_W5_Top15000.snr Like " & Testsnr & ")")
.Refresh BackgroundQuery:=False
End With
End Sub


Ein Fehler kommt immer beim Refresh wenn der SQL-String falsch aufgebaut ist
Gruss Rainer

Anzeige
AW: SQL-Abfrage mit Variable
28.12.2008 20:53:08
Dieter
es wird ein Fehler gemeldet, wahrscheinlich durch die
unetrschiedliche "Sortierung"
na jedenfalls erwartet Excel an der Stelle * ein Listentrennzeichen oder )
weiss aber nicht wo genau ?

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;Description=Visamdaten;UID= _
test _
* ;PWD=test1;APP=Microsoft Office 2003;WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range(" _
A1")).CommandText = _
Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID FROM Visamdaten.dbo Feuchte_W5 Feuchte_W5 WHERE _
Feuchte_W5_Top15000.snr Like " & Testsnr & ")")
.Refresh BackgroundQuery:=False
End With
End Sub


Gruß Dieter

Anzeige
Warum geändert ?
28.12.2008 21:25:00
Ramses
Hallo
Wozu das "*" ?
Das ist in meinem Beispiel nicht drin und in deinem ersten Beispiel auch nicht !?
Gruss Rainer
AW: Warum geändert ?
28.12.2008 21:29:35
Dieter
ich wollte Dir nur die Stelle zeigen, die Excel anmeckert.
Eigentlich geht Excel auf das Semikolon vor PDW und schickt die Fehlermeldung.
Sorry, dass das nicht so klar `rübergekommen ist
Gruß Dieter
Anzeige
AW: Warum geändert ?
28.12.2008 21:49:25
Ramses
Hallo
Entferne alle "_" aus dem Beispielcode so dass die SQL Anweisung in EINER Zeile steht.
EXCEL kann kopierten Code aus dem Forum nicht immer im VB-Editor korrekt umsetzen
Gruss Rainer
AW: Warum geändert ?
29.12.2008 01:31:38
Erich
Hallo Dieter,
probiers mal so:

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
"Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
"WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
.CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
"FROM Visamdaten.dbo Feuchte_W5 Feuchte_W5 " & _
"WHERE Feuchte_W5_Top15000.snr Like " & Testsnr & ")")
.Refresh BackgroundQuery:=False
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: Warum geändert ?
29.12.2008 16:33:20
Dieter
Sorry, mit der Antwort hat es etwas länger gedauert......,
funktioniert leider in beiden "Fällen" nicht.
Laufzeitzeitfehler 1004
mit dem Hinweis beim Code vom Reiner
"Diese Option ist für diese Art von externen Datenbanken nicht verfügbar".
Nun weiss ich gar nix mehr ?
Gruß Dieter
Anzeige
AW: noch ein Versuch
29.12.2008 23:57:00
Erich
Hi Dieter,
eine Bitte: Wenn ein Fehler auftritt, könntest du bitte die falsche Codezeile, Fehlernr. und -hinweis posten?
Noch ein Versuch (kleine Änderung im SELECT):

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
"Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
"WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
.CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
"FROM Visamdaten.dbo Feuchte_W5 Feuchte_W5 " & _
"WHERE Feuchte_W5_Top15000.snr Like '" & Testsnr & "')")
.Refresh BackgroundQuery:=False
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: noch ein Versuch
30.12.2008 14:15:00
Dieter
Hallo Erich,
immer noch der selbe Fehler.
Ich führe den Code manuell durch, d.h. mit Taste F8
Wenn ich bei Zeile . Refresh BackgroundQuery:=False angkommen bin
und weiter ausführen möchte, erscheint folgende Fehlermeldung :
Laufzeitfehler 1004 : SQL-Syntaxfehler
Bei der "Überwachung" von Testsnr wird der Wert korrekt angezeigt.
Gruß Dieter
Anzeige
AW: und noch ein Versuch
30.12.2008 14:35:00
Erich
Hi Dieter,
da fehlte noch ein Punkt (im FROM) - vielleicht funzt es jetzt:

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
"Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
"WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
.CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
"FROM Visamdaten.dbo.Feuchte_W5 Feuchte_W5 " & _
"WHERE Feuchte_W5_Top15000.snr Like '" & Testsnr & "')")
.Refresh BackgroundQuery:=False
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: und noch eine Alternative
30.12.2008 14:53:00
Erich
Hi Dieter,
falls da doch eine Zahl gesucht werden soll, ohne Hochkommata um Testsnr:

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
"Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
"WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
.CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
"FROM Visamdaten.dbo.Feuchte_W5 Feuchte_W5 " & _
"WHERE Feuchte_W5_Top15000.snr Like " & Testsnr & ')")
.Refresh BackgroundQuery:=False
End With
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
AW: und noch eine Alternative
30.12.2008 15:23:33
Dieter
nee, funzt leider immer noch nicht.
Ich habe das Hochkomma hinter Testsnr in ein Anführungszeichen " ändern müssen,
sonst wurde das schon bei der Eingabe angemeckert.
Gruß Dieter
AW: und noch eine Alternative
30.12.2008 15:52:00
Erich
Hi Dieter,
sorry, da hatte ich das falsche Zeichen gelöscht...
Noch eine Version - mit einem Semokolon am Ende:

Sub Abfrage_1()
Dim Testsnr As Integer
Testsnr = Range("testsnr1").Value
With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
"Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
"WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
.CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
"FROM Visamdaten.dbo.Feuchte_W5 Feuchte_W5 " & _
"WHERE Feuchte_W5_Top15000.snr Like " & Testsnr & ";")
.Refresh BackgroundQuery:=False
End With
End Sub


Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
Jaaaaaaaaaaa
30.12.2008 16:08:41
Dieter
ich glaube, Deine letzte Änderung mit dem Semikolon war der BRINGER.
Ich hatte auch schon gefühlte 1000 Änderungen probiert
Wunderbar, Danke.
Ich will eine Regelkarte aufbauen, kontinuierlich (jede Minute) Daten von einer SQL-Tabelle holen und in
die Auswertung bringen.
Da es doch mit der Zeit recht viele Daten sein werden, kann ich mit dem Code entsprechend filtern.
Danke !
Nu`werde ich erstmal ausgiebig testen......
Gruß Dieter
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

SQL-Abfrage mit Variablen in Excel


Schritt-für-Schritt-Anleitung

Um eine SQL-Abfrage mit Variablen in Excel durchzuführen, befolge diese Schritte:

  1. Öffne den VBA-Editor: Drücke ALT + F11.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf dein Projekt und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein:

    Sub Abfrage_1()
        Dim Testsnr As Integer
        Testsnr = Range("testsnr1").Value
    
        With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=Visamdaten;" & _
        "Description=Visamdaten;UID=Test;PWD=Test1;APP=Microsoft Office 2003;" & _
        "WSID=DSCHWAB;DATABASE=Visamdaten", Destination:=Range("A1"))
            .CommandText = Array("SELECT Feuchte_W5.snr, Feuchte_W5.ID " & _
            "FROM Visamdaten.dbo.Feuchte_W5 " & _
            "WHERE Feuchte_W5_Top15000.snr Like " & Testsnr & ";")
            .Refresh BackgroundQuery:=False
        End With
    End Sub
  4. Starte das Makro: Führe das Makro aus, um die Daten abzurufen.


Häufige Fehler und Lösungen

  • Syntaxfehler: Achte darauf, dass alle Teile deiner SQL-Anweisung korrekt sind. Ein häufiges Problem sind fehlende Anführungszeichen oder falsche Trennzeichen.

  • Laufzeitfehler 1004: Dieser Fehler tritt auf, wenn die SQL-Syntax nicht korrekt ist. Überprüfe, ob alle Tabellen und Spalten richtig benannt sind.

  • Unterschiedliche Sortierung: Wenn Excel einen Fehler aufgrund einer unterschiedlichen Sortierung meldet, stelle sicher, dass die SQL-Tabelle und die Abfrage übereinstimmen.


Alternative Methoden

  1. Excel-Datenbank abfragen mit Parameter: Du kannst Parameter direkt in die SQL-Abfrage einfügen, um dynamische Abfragen zu erstellen.

    .CommandText = Array("SELECT * FROM Tabelle WHERE Spalte = '" & Range("ParameterZelle").Value & "'")
  2. Verwendung von ODBC: Stelle sicher, dass deine ODBC-Verbindung korrekt konfiguriert ist, um Excel SQL-Abfragen durchzuführen.


Praktische Beispiele

  • Beispiel für eine Datenbankabfrage:

    Sub DatenbankAbfrage()
        Dim UID As String
        UID = Range("UIDZelle").Value
    
        With ActiveSheet.QueryTables.Add(Connection:="ODBC;DSN=DeineDatenbank;" & _
        "UID=" & UID & ";PWD=DeinPasswort;", Destination:=Range("A1"))
            .CommandText = "SELECT * FROM DeineTabelle"
            .Refresh BackgroundQuery:=False
        End With
    End Sub
  • Regelkarte in Excel: Du kannst die Daten in regelmäßigen Abständen aktualisieren, indem du eine Schleife oder einen Timer verwendest, um die SQL-Abfrage in Excel zu planen.


Tipps für Profis

  • Nutze SQL-Variablen, um deine Abfragen flexibler zu gestalten.
  • Halte deine SQL-Abfragen so kompakt wie möglich, um die Lesbarkeit und Wartbarkeit zu erhöhen.
  • Teste deine Abfragen zuerst in einem SQL-Client, bevor du sie in Excel verwendest. Dies hilft, Syntaxfehler frühzeitig zu erkennen.

FAQ: Häufige Fragen

1. Wie kann ich Parameter aus einer Zelle in meine SQL-Abfrage einfügen?
Du kannst den Wert einer Zelle in deiner SQL-Abfrage wie folgt einfügen:

"WHERE Spalte = '" & Range("Zellenname").Value & "'"

2. Was ist der Unterschied zwischen ODBC und ADO?
ODBC ist eine Schnittstelle für den Zugriff auf Datenbanken. ADO ist eine Programmierschnittstelle, die auf ODBC aufbaut und eine einfachere Möglichkeit bietet, mit Daten zu arbeiten.

3. Was kann ich tun, wenn mein Excel nicht mit meiner SQL-Datenbank verbindet?
Stelle sicher, dass deine ODBC-Verbindung korrekt eingerichtet ist und dass du die richtigen Anmeldeinformationen verwendest. Überprüfe auch die Firewall-Einstellungen, die den Zugriff auf die Datenbank blockieren könnten.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige