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-ID: 282605

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

Ausgedruckt am: 23.11.2024 um 01:11 Uhr

AndreasHoster
AndreasHoster 11.09.2015 um 09:49:31 Uhr
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.
emeriks
emeriks 11.09.2015 um 09:49:45 Uhr
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.
iGordon
iGordon 11.09.2015 aktualisiert um 11:32:58 Uhr
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.
AndreasHoster
AndreasHoster 11.09.2015 um 11:35:01 Uhr
Goto Top
Auf den ersten Blick fällt mir auch kein offensichtlicher Fehler auf, was wirft den MySQL als Fehler aus?
emeriks
emeriks 11.09.2015 um 11:39:44 Uhr
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"";"""  
iGordon
iGordon 11.09.2015 um 12:25:38 Uhr
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.
AndreasHoster
AndreasHoster 11.09.2015 um 14:42:55 Uhr
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""
iGordon
iGordon 11.09.2015 aktualisiert um 20:49:00 Uhr
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.
114757
114757 11.09.2015 aktualisiert um 21:01:33 Uhr
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
emeriks
emeriks 13.09.2015 um 19:19:00 Uhr
Goto Top
da sind ein paar Fehler in der Anführungszeichensetzung drin gewesen ..
Welche denn?
Beachte: Er startet "cmd /k ....."
114757
114757 13.09.2015 aktualisiert um 19:30:30 Uhr
Goto Top
Hinter Datenbank-Name
SCHEMA IF NOT EXISTS '" & "Datenbank-Name & "' DEFAULT CHARACTER  

Beachte: Er startet "cmd /k ....."
Geht hier auch ohne .
emeriks
emeriks 13.09.2015 um 20:44:31 Uhr
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.