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

Forumthread: MySQL Abfrage mit Parameter aus Zelle

MySQL Abfrage mit Parameter aus Zelle
19.12.2017 13:33:51
Andreas
Hallo,
ich durchforste das weltweite Netz schon seit Tagen und irgendwie bekomme ich es einfach nicht hin, eine Datenbank mit einem Parameter abzufragen.
Folgendes will ich konkret tun:
* Es gibt einen MySQL-Server mit einer Datenbank/Tabelle mit den Spalten "Name" und "Wert"
* In Tabelle 1 trägt der Nutzer einen gesuchten Namen in die Zelle A2 ein: "TestName"
* Mit einer Abfrage wird nun dieser "TestName" in der Datenbank gesucht und der Messwert aus der Spalte "Wert" herausgezogen
* Das Ergebnis soll in die Zelle "A3" der Tabelle1 geschrieben werden.
Folgendes hab ich gemacht und funktioniert:
* Über PowerQuery habe ich die Datenbank verbunden und habe eine Abfrage mit erstellt:
SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = TestName
Auf den MS-Seiten habe was mit Parametern gesehen, aber überhaupt nicht nachvollziehen können. Außerdem gibts bei Stackoverflow.com einen Eintrag, der mir leider auch nicht weiter geholfen hat.
Ich verstehe einfach nicht, wie ich in der Abfrage den Eintrag "TestName" durch den Inhalt der Zelle A2 der Tabelle1 eintragen kann.
Hoffe Ihr könnt mir helfen.
Viele Grüße
Andreas
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: MySQL Abfrage mit Parameter aus Zelle
19.12.2017 13:41:51
ede
Hallo Andreas,
ich vermute mal, du musst den Inhalt der Zelle in ' angeben:
... Name = 'TestName';
Gruss
ede
AW: MySQL Abfrage mit Parameter aus Zelle
19.12.2017 13:56:21
Andreas
Hallo,
vielen Dank für die schnelle Antwort. Ich glaub' ich bin schon einen Schritt weiter, da nun keine Fehlermeldung ausgespuckt wird. Allerdings wird noch kein Wert zurückgegeben.
In der Anfrage steht nun folgendes:
Quelle = MySQL.Database("10.xxx.xxx.xxx", "Datenbank", [ReturnSingleDatabase=true, Query="SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = 'Tabelle1$A2'", CreateNavigationProperties=false])
Anzeige
AW: MySQL Abfrage mit Parameter aus Zelle
19.12.2017 14:01:20
ede
dann braucht du ja nur noch den Inhalt der Zelle von 'Tabelle1$A2' einsetzten!
gruss
AW: MySQL Abfrage mit Parameter aus Zelle
19.12.2017 14:06:07
Andreas
Ja genau das ist gerade das Problem! Beim SQL-Server kommt anstelle des Inhalts der Zelle genau dieser String an
Also:
SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = 'Tabelle1$A2'
es müsste aber eigentlich so heißen. (In Tabelle1$A2 steht "TestName")
SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = TestName
Anzeige
AW: MySQL Abfrage mit Parameter aus Zelle
19.12.2017 14:12:36
ede
man sieht ja nicht wie du den SQL-String zusammensetzt, aber versuch mal so, wobei in der Variablen sqlString vorher schon alles bis Name = stehen muss:
sqlString = sglString & "'" & Tabelle1.Cells(2, 1) & "'"
gruss
AW: MySQL Abfrage mit Parameter aus Zelle
20.12.2017 07:48:05
Andreas
Also ohne VBA bekomme ich das irgendwie nicht hin. Habe mir nun ein paar Zeilen geschrieben, die natürlich nicht gunktionieren... *grummel*
Also ich habe über Power Query eine Abfrage erstellt:
Power Query => Aus Datenbank => MySQL

=> Server: xxx.xxx.xxx.xxx
=> Datenbank: Datenbank
=> Erweiterte Optionen => SQL Anweisung
SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = abc
=> Laden in: Tabelle1 $A$5
Nun will ich diese Abfrage mit dem Wert aus B2 aktualisieren.
VBA-Editor: Worksheet, Change

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$B$1" Then
With ActiveWorkbook.Connections("Abfrage1").OLEDBConnection
.CommandType = xlCmdSql
.CommandText = "SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = '" & Range("B1").Value & "' _
End With
ActiveWorkbook.Connections("Abfrage1").Refresh
End If
End Sub
Als Fehlermeldung erhalte ich Laufzeitfehler '9'. Index außerhalb des gütligen Bereichs. Im Debugger springt der Cursor zum Eintrag "With ActiveWorkbook.Connections("Abfrage1").OLEDBConnection"
Anzeige
AW: MySQL Abfrage mit Parameter aus Zelle
20.12.2017 10:27:32
ede
Hallo nochmal,
da kann ich dir dann auch nicht mehr weiterhelfen, stimmt dein Name "Abfrage1" der Verbindung?
Sub check_cConnections()
Dim xConnect As Object
For Each xConnect In ActiveWorkbook.Connections
MsgBox xConnect.Name & vbCr & xConnect.OLEDBConnection.CommandText
Next xConnect
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

MySQL Abfrage mit Parameter aus Zelle


Schritt-für-Schritt-Anleitung

  1. Datenbankverbindung herstellen:

    • Öffne Excel und gehe zu Daten > Daten abrufen > Aus Datenbank > Aus MySQL-Datenbank.
    • Gib die Serveradresse und den Datenbanknamen ein.
  2. Power Query erstellen:

    • Wähle die Tabelle aus, die du abfragen möchtest, und klicke auf Erweiterte Optionen.
    • Gib die SQL-Anweisung ein:
      SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = 'TestName'
  3. Parameter aus Zelle nutzen:

    • Um den Wert aus einer Zelle (z.B. A2) als Parameter zu verwenden, passe die SQL-Anweisung an:
      SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = '" & Range("A2").Value & "'
    • Stelle sicher, dass du die Parameter korrekt in die SQL-Anweisung einfügst.
  4. Daten laden:

    • Klicke auf Laden, um die Daten in die Excel-Tabelle zu bringen.

Häufige Fehler und Lösungen

  • Fehler: "Index außerhalb des gültigen Bereichs":

    • Überprüfe, ob der Verbindungsname korrekt ist. Du kannst dies mit folgendem VBA-Code herausfinden:
      Sub check_connections()
      Dim xConnect As Object
      For Each xConnect In ActiveWorkbook.Connections
          MsgBox xConnect.Name & vbCr & xConnect.OLEDBConnection.CommandText
      Next xConnect
      End Sub
  • Fehler: SQL-Abfrage gibt keinen Wert zurück:

    • Stelle sicher, dass der Wert in der Zelle (z.B. A2) tatsächlich vorhanden ist und die SQL-Abfrage korrekt formuliert ist.

Alternative Methoden

  • VBA zur Aktualisierung von Abfragen:
    • Du kannst auch VBA verwenden, um die SQL-Abfrage zu aktualisieren, wenn sich der Wert in einer Zelle ändert. Beispiel:
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Target.Address = "$B$1" Then
          With ActiveWorkbook.Connections("Abfrage1").OLEDBConnection
              .CommandType = xlCmdSql
              .CommandText = "SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = '" & Range("B1").Value & "'"
          End With
          ActiveWorkbook.Connections("Abfrage1").Refresh
      End If
      End Sub

Praktische Beispiele

  • Beispiel für eine dynamische Abfrage:

    • Wenn in Zelle A2 der Name "TestName" steht, wird die Abfrage automatisch aktualisiert, um den entsprechenden Wert aus der Datenbank zurückzugeben.
  • MySQL Abfrage mit Parameter:

    • Eine typische SQL-Abfrage könnte so aussehen:
      SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = '" & Range("A2").Value & "'

Tipps für Profis

  • Verwendung von Power Query zur Automatisierung:

    • Nutze Power Query, um regelmäßig Daten zu aktualisieren und die SQL-Abfragen zu optimieren. Achte darauf, die CreateNavigationProperties-Option auf false zu setzen, um Probleme mit der Verknüpfung zu vermeiden.
  • Fehlerbehebung bei Verbindungen:

    • Wenn Abfragen nicht funktionieren, überprüfe die Einstellungen der Data Connection in Excel, um sicherzustellen, dass alle Parameter korrekt gesetzt sind.

FAQ: Häufige Fragen

1. Wie kann ich die SQL-Abfrage mit einem Wert aus einer Zelle dynamisch gestalten? Um die SQL-Abfrage dynamisch zu gestalten, musst du den Zellinhalt in die SQL-Anweisung einfügen. Ein Beispiel wäre:

SELECT * FROM `Datenbank`.`Tabelle` WHERE Name = '" & Range("A2").Value & "'

2. Was kann ich tun, wenn die Verbindung zu MySQL nicht hergestellt werden kann? Überprüfe die Serveradresse und die Zugangsdaten. Stelle sicher, dass der MySQL-Server aktiv ist und dass du die richtigen Berechtigungen hast. Teste die Verbindung mit einem MySQL-Client, um sicherzustellen, dass die Zugangsdaten korrekt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige