feuerteufel
Goto Top

Mysql und Batch

Hallo,
ich habe eine Frage:

Ich möchte mit Bat eine externe Mysql-Datenbank abrufen. Die Bat-Datei läuft auf meinem Rechner und die Mysql-Datenbank auf meinem Webhosting-Server Online. Die Rechte für den Mysql-Connect von extern sind vorhanden. Aber wie kann ich mit der externen Datenbank via Internet/DSL connecton und Spalten auslesen?

Alles Infos die man dazu findet, gehen von einer Mysql-Datenbank auf dem Localhost aus, worauf die Bat-Datei läuft- diese rufen dann eine mysql.exe auf... aber das geht ja hier nicht. Kann mir jemand weiterhelfen?

Gruß
Niklas Gössl

Content-Key: 124783

Url: https://administrator.de/contentid/124783

Printed on: April 20, 2024 at 02:04 o'clock

Member: filippg
filippg Sep 12, 2009 at 16:28:50 (UTC)
Goto Top
Hallo,

diese rufen dann
eine mysql.exe auf... aber das geht ja hier nicht.
Wieso? mysql.exe hat einen Option -h mit der man einen Remote-Host angeben kann. Siehe auch http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html

Gruß

Filipp
Member: FeuerTeufel
FeuerTeufel Oct 06, 2009 at 01:38:02 (UTC)
Goto Top
Hallo,

so ich habe es nun endlich hin bekommen dass Datensätze aus der Datenbank ausgelesen werden.

Der Befehl sieht nun so aus:
mysql.exe -u USER --password=PASSWORT -h SERVER -D DATENBANK < script.sql

In der script.sql steht dann jeweils der auszuführende SQL-Code.

Die Batch-Datei listet dann die entsprechenden Datensätze auf.


Aber wie kriege ich das nun hin, dass ein bestimmter Wert aus der Datenbank in eine Variable gepeichert wird, auf die ich in der Batchdatei zugreifen kann damit ich evtl. Bedingungen stellen kann, wenn der Wert der Variable ==1 ist, dann soll er etwas bestimmtes in der Batchdatei ausführen.

Also wie ich die Bedingung stelle ist klar, aber unklar ist wie ich den Wert 1 aus der Datenbank in eine Batch-Variable (%VARIABLE1%) schreiben kann.

Ich hoffe ja dass das überhaupt möglich ist.

Gruß
Niklas
Member: Biber
Biber Oct 06, 2009 at 06:13:51 (UTC)
Goto Top
Moin Niklasg,

Die Batch-Datei listet dann die entsprechenden Datensätze auf.
Zeigst Du bitte Beispiel?

Aber wie kriege ich das nun hin, dass ein bestimmter Wert aus der Datenbank in eine Variable gepeichert wird, auf die ich in der Batchdatei zugreifen kann damit ich evtl. Bedingungen stellen kann, wenn der Wert der Variable ==1 ist, dann soll er etwas bestimmtes in der Batchdatei ausführen.
Machst Du bitte krass konkret?
Also wie ich die Bedingung stelle ist klar, aber unklar ist wie ich den Wert 1 aus der Datenbank in eine Batch-Variable (%VARIABLE1%) schreiben kann.
Sicher mit einer FindStr-FOR/F -Kombination, aber dazu müsste man/frau den Resultset-String mal sehen.
Ich hoffe ja dass das überhaupt möglich ist.
Die Schalke-Fans hoffen seit einem halben Jahrhundert auf den Pokal... du hast viel bessere Chancen.

Grüße
Biber
Member: FeuerTeufel
FeuerTeufel Oct 06, 2009 at 12:48:16 (UTC)
Goto Top
Moin,

das ist wie oben schon geschrieben die ausführende Bat-Datei:
mysql.exe -u USER --password=PASSWORT -h SERVER -D DATENBANK < script.sql

Hier ist dann die script.sql:
SELECT DISTINCT action FROM tabelle_xy WHERE ID LIKE '2'  

Daraus resultiert in der Bat folgende Ausgabe:

tabelle_xy
mailsenden

Er listet zuerst den Spaltennamen auf, und darunter die ausgelesenen Werte.


So. Nun soll aber der ausgelesene Wert 'mailsenden' in einer Variable drin stehen.

Mit dieser Variable kann ich dann nacher eine Bedingung erstellen wie
If "%Variable%" == "mailsenden" goto zum_befehl_mail_senden  

oder

If "%Variable%" == "1" goto zum_befehl_rechner_herunterfahren  

Auf diese weise kann ich in der Bat-Datei viele Funktonen einbauen wie DSL-Gateway wechseln oder Rechner herunterfahren oder einen Dienst in Windows stoppen, und mit der oben gezeigten Bedingung kann ich diese Funktion nur dann ausführen lassen wenn in der Datenbank-Spalte ein bestimmter Wert steht.

Aber das geht eben nur dann, wenn ich den Wert direkt in einer %Variable% stehen habe auf die ich dann mit if abfragen kann.

Gruß
Niklas
Member: Biber
Biber Oct 06, 2009 at 17:16:41 (UTC)
Goto Top
Moin Niklasg,

in Batchdateien ist es (auch unter Windows) möglich, die (Bildschirm-)Ausgaben von aufgrerufenen Programmen/Befehlen in Dateien umzulenken und/oder als Eingabe, als input zu verwenden.
Wie du es ja auch vorhast.

Als Vorüberlegung muss bei der CMD.exe, dem M$-Befehlsinterpreter allerdings das "Weilche Zeile/welche Zeilen des Outputs brauche ich?" erfolgen, da die CMD.exe nur ZEILEorientiert arbeitet.

Um Deine Zeile mit dem Suchwort "mailsenden" eindeutig zu beschreiben gäbe es mehrere Möglichkeiten

  • die Zeile mit "mailsenden" (oder welcher Aktion auch immer) ist die letzte Zeile der Ausgabe des Batches.
  • die Zeile mit der Aktion ist immer die Zeile nach der Zeile mit der Angabe "Tabelle_xy"
  • die Zeile mit der Aktion "mailsenden" muss eines der Worte "mailsenden", "abbrechen", "noaction", "delete" (als Beispiele) enthalten

In jedem dieser Fälle (welcher bei dir am Sinnvollsten ist, müsstest du nochmal kurz ergrübeln) kann das eine Wort dieser relevanten Zeile nit einer FOR/F-Anweisung und dem SET-Befehl in eine Variable geschrieben werden.

Beispiel, wenn NUR das Wort "mailsenden" in einer Datei stünde ODER "mailsenden" die letze Zeile einer Textdatei ist:
....
REM... In einem Batch..
FOR /F %%i in (D:\Ein\ResultVonnerMySQLQuery.txt) Do Set "myVar=%%i"  
If "%myVar%" == "mailsenden" goto zum_befehl_mail_senden  
...
So die Skizze.


---> Sauberer/empfehlung wäre:
  • die Query erweitern um eine weitere Spalte, in der ein (toi toi toi) eindeutiger Suchbegriff erzeugt wird.
Beispiel:
SELECT DISTINCT action, 'ACTION' as whatever  FROM tabelle_xy WHERE ID LIKE '2'  

--> Ausgabe wäre dann in dieser einen RS-Zeile:
mailsenden ACTION
... und nach der Zeile, die das Suchwort "ACTION" enthält kannst Du exakt suchen mit Find/FindStr.

Grüße
Biber