igordon
Goto Top

MySql Befehl mittels vbs funktioniert nur dann wenn ich keine Befehle mit angebe. Was mache ich Falsch?

Hallo,

ich habe ein Problem mit einem vbs Skript das ich derzeit am Programmieren bin.

Ich bin derzeit dabei ein vbs-Skript zu schreiben das alle MySql Dumps aus einem Ordner in die Datenbank schreibt.
Der Befehl um den Dump in die Datenbank zu spielen funktioniert einwandfrei. Nur der Befehl "CREATE SCHEMA " will beim besten willen nicht funktionieren.

command =  Chr(34) & "C:\MySQL 560\bin\mysql.exe" & Chr(34) & " --host=" & server & " -u" & user & " -p" & pw & " -P " & port & " " & "Datenbank-Name" & " < " & "Absoluter pfad zum MySql Dump"  
command2 = Chr(34) & "C:\MySQL 560\bin\mysql.exe" & Chr(34) & " --host=" & server & " -u" & user & " -p" & pw & " -P " & port & " " & "-e " & Chr(34) & "CREATE SCHEMA IF NOT EXISTS " & Chr(96) & "Datenbank-Name" & Chr(96) & " DEFAULT CHARACTER SET latin1 COLLATE latin1_bin" & Chr(34) & ";"  
	    Shell.Run ("%comspec% /k " & command2),3,true  
		Shell.Run ("%comspec% /k " & command),3,true  

Wo liegt hier der Fehler?
Wenn ich den Fehlerhaften Befehl wie folgt ändere, funktioniert er und ich bekomme eine offene Verbindung zum MySql.
command2 = Chr(34) & "C:\MySQL 560\bin\mysql.exe" & Chr(34) & " --host=" & server & " -u" & user & " -p" & pw & " -P " & port   

Content-Key: 282605

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

Printed on: April 19, 2024 at 23:04 o'clock

Member: AndreasHoster
AndreasHoster Sep 11, 2015 at 07:49:31 (UTC)
Goto Top
Fehlersuche einfach gemacht:
Füge mal zwischen Zeile 2 und 3 ein wscript.echo ein, das den Inhalt der Strings command und command2 ausgibt.
Dann sieht man was tatsächlich übergeben wird (und nicht nur was Du glaubst was übergeben wird) und was eventuell daran nicht passt.
Member: emeriks
emeriks Sep 11, 2015 at 07:49:45 (UTC)
Goto Top
Hi,
bist Du sicher, dass es Chr(96) sein muss und nicht etwa Chr(39)?

bzw. ganz ohne Chr()
command2 = """C:\MySQL 560\bin\mysql.exe"" --host=" & server & " -u" & user & " -p" & pw & " -P " & port & " " & "-e ""CREATE SCHEMA IF NOT EXISTS '" & "Datenbank-Name & "' DEFAULT CHARACTER SET latin1 COLLATE latin1_bin"";"  


E.
Member: iGordon
iGordon Sep 11, 2015 updated at 09:32:58 (UTC)
Goto Top
@AndreasHoster

Command Bild
command 2 Bild

Das habe ich auch schon probiert, der Befehl ist in Ordnung und funktioniert auch wenn ich Ihn händisch im cmd eingebe.


@emeriks

Ich habe es mal probiert, leider bekomme ich auch hier die Fehlermeldung:
Der Befehl "C:\MySQL" ist entweder falsch geschrieben oder konnte nicht gefunden werden.

Was ich aber merkwürdig finde, denn wenn ich halt nur
command2 = """C:\MySQL 560\bin\mysql.exe""
ausführe, funktioniert es.
Member: AndreasHoster
AndreasHoster Sep 11, 2015 at 09:35:01 (UTC)
Goto Top
Auf den ersten Blick fällt mir auch kein offensichtlicher Fehler auf, was wirft den MySQL als Fehler aus?
Member: emeriks
emeriks Sep 11, 2015 at 09:39:44 (UTC)
Goto Top
Du könntest die Kommandos in eine temporäre CMD schreiben und diese CMD dann per Shell.Run starten.
Oder auf das "cmd /k" verzichten.

Oder zusätzlich "" aussen rum:
command2 = """""C:\MySQL 560\bin\mysql.exe"" --host=" & server & " -u" & user & " -p" & pw & " -P " & port & " " & "-e ""CREATE SCHEMA IF NOT EXISTS '" & "Datenbank-Name & "' DEFAULT CHARACTER SET latin1 COLLATE latin1_bin"";"""  
Member: iGordon
iGordon Sep 11, 2015 at 10:25:38 (UTC)
Goto Top
@AndreasHoster
Das ist ja das Problem, es wird erst keine Verbindung mit dem MySQL Server hergestellt.
Ich bekomme die Fehlermeldung "Der Befehl "C:\MySQL" ist entweder falsch geschrieben oder konnte nicht gefunden werden."

@emeriks
Mit einer cmd Shell habe ich das Problem umgehen können, ich bin aber nicht 100%ig damit zufrieden.
Ich habe gehofft das ich das irgendwie innerhalb der vbs Umgebung beheben kann. Es scheint aber kein Weg daran vorbei zu führen als die Befehle in eine .bat schreiben zu lassen um diese dann auszuführen.

Der Befehl cmd /k ist nur temporär und sorgt dafür dass das cmd Fenster offen bleibt nachdem der Befehl ausgeführt wurde. Ansonsten würde sich das Fenster unmittelbar nach ausführen schließen und ich hätte keine Möglichkeit zu sehen was passiert.
Member: AndreasHoster
AndreasHoster Sep 11, 2015 at 12:42:55 (UTC)
Goto Top
Wie @emeriks geschrieben hat, sollte es mit doppelten Anführungszeichen um das gesamte gehen, da mehrere Anführungszeichen drin vorkommen.
Beispiel (Geht nicht):
cmd.exe /k "d:\temp\test test\write.exe" "D:\temp\test test.txt"
Beispiel (Geht):
cmd.exe /k ""d:\temp\test test\write.exe" "D:\temp\test test.txt""
Member: iGordon
iGordon Sep 11, 2015 updated at 18:49:00 (UTC)
Goto Top
Das ist ja das eigenartige, eben nicht.
Ich werde jetzt einfach den Befehl In eine cmd Shell umleiten und diese dann separat ausführen.
Das ist die einfachste Lösung.

Aber Danke für eure Hilfe.
Mitglied: 114757
114757 Sep 11, 2015 updated at 19:01:33 (UTC)
Goto Top
Moin,
da sind ein paar Fehler in der Anführungszeichensetzung drin gewesen ..
Set objShell = CreateObject("Wscript.Shell")  
command2 = """C:\MySQL 560\bin\mysql.exe"" --host=" & server & " -u" & user & " -p" & pw & " -P " & port & " " & "-e ""CREATE SCHEMA IF NOT EXISTS 'Datenbank-Name' DEFAULT CHARACTER SET latin1 COLLATE latin1_bin"";"  
objShell.Run command2,3,True
Dat lüppt hier...

Aber Achtung mit Sonderzeichen beim Passwort face-smile

Gruß jodel32
Member: emeriks
emeriks Sep 13, 2015 at 17:19:00 (UTC)
Goto Top
da sind ein paar Fehler in der Anführungszeichensetzung drin gewesen ..
Welche denn?
Beachte: Er startet "cmd /k ....."
Mitglied: 114757
114757 Sep 13, 2015 updated at 17:30:30 (UTC)
Goto Top
Hinter Datenbank-Name
SCHEMA IF NOT EXISTS '" & "Datenbank-Name & "' DEFAULT CHARACTER  

Beachte: Er startet "cmd /k ....."
Geht hier auch ohne .
Member: emeriks
emeriks Sep 13, 2015 at 18:44:31 (UTC)
Goto Top
Ja klar, das weiß ich. Doch darum ging es hier nicht. Er wollte es mit "cmd /k" starten, um die Ausgabe lesen zu können.