Seite 1 von 2

RunProgram Problem mit mysqldump -gelöst

Verfasst: 31.01.2010 05:01
von Andreas21
Ich habe ein Problem mit RunProgram.

Ich will "mysqldump.exe" starten. Dieses Programm ist bei Mysql Server bei.
Ich will damit meine Datenbanken sichern.

RunProgram will nur die Parameter nicht übergeben.

Wenn ich es so versuche:

Code: Alles auswählen

Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe", "--opt -u root --all-databases > dbdata.sql","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler  
  While ProgramRunning(Compiler)
    Output$ + ReadProgramString(Compiler) + Chr(13)
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
EndIf
MessageRequester("Output", Output$)
bekomme ich diese Meldung.
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help
Exitcode: 1
Versuch ich es so:

Code: Alles auswählen

Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe",chr(34)+ "--opt -u root --all-databases > dbdata.sql"+chr(34),"", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler  
  While ProgramRunning(Compiler)
    Output$ + ReadProgramString(Compiler) + Chr(13)
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
EndIf
MessageRequester("Output", Output$)
oder so

Code: Alles auswählen

Compiler = RunProgram(chr(34)+"D:\server\xampp\mysql\bin\mysqldump.exe"+chr(34), "--opt -u root --all-databases > dbdata.sql","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler  
  While ProgramRunning(Compiler)
    Output$ + ReadProgramString(Compiler) + Chr(13)
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
EndIf
MessageRequester("Output", Output$)
Bekomme ich keine Meldung und es wird auch kein Backup erstellt.

Gebe ich es in der Eingabeaufforderung von Windows ein:

Code: Alles auswählen

D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.

Re: RunProgram Problem

Verfasst: 31.01.2010 11:21
von Rebon
Weshalb chr(34)? Eher chr(32) für Space?

Re: RunProgram Problem

Verfasst: 31.01.2010 11:31
von Little John
Ich denke dass das Problem darin liegen könnte, dass Du die Ausgabe mit > in eine Datei umleitest ... dass ReadProgramString() die Ausgabe dann nicht mehr lesen kann.
Was willst Du denn mit ReadProgramString() bezwecken, wenn die Ausgabe ohnehin in eine Datei umgeleitet wird?
Andreas21 hat geschrieben:Gebe ich es in der Eingabeaufforderung von Windows ein:

Code: Alles auswählen

D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.
Was heißt das genau? Wird die Ausgabe dann in "dbdata.sql" gespeichert, und ebenfalls auf der Konsole angezeigt?

Gruß, Little John

Re: RunProgram Problem

Verfasst: 31.01.2010 14:32
von Andreas21
Hi,
Little John hat geschrieben:Ich denke dass das Problem darin liegen könnte, dass Du die Ausgabe mit > in eine Datei umleitest ... dass ReadProgramString() die Ausgabe dann nicht mehr lesen kann.
Was willst Du denn mit ReadProgramString() bezwecken, wenn die Ausgabe ohnehin in eine Datei umgeleitet wird?
Andreas21 hat geschrieben:Gebe ich es in der Eingabeaufforderung von Windows ein:

Code: Alles auswählen

D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
geht es ohne Probleme.
Was heißt das genau? Wird die Ausgabe dann in "dbdata.sql" gespeichert, und ebenfalls auf der Konsole angezeigt?

Gruß, Little John
Das Programm ist dafür da um Daten aus den Datenbanken von einem Mysql Server in eine Datei zu speichern. Z.b. für ein Backup.
In der Console wird nichts ausgegeben.
Wen ich das > weg lasse.
Wird zwar alles in der Console ausgegeben aber nur wenn ich es über Eingabeaufforderung eingebe. Bei RunProgramm passiert nichts.

Code: Alles auswählen

Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe", "--opt -u root --all-databases","", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
If Compiler  
  While ProgramRunning(Compiler)
    Output$ + ReadProgramString(Compiler) + Chr(13)
  Wend
  Output$ + Chr(13) + Chr(13)
  Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
EndIf
MessageRequester("Output", Output$)
Das Programm wird nur mit Parameter gestartet.
Es speichert dann den kompletten Inhalt aller Datenbanken in dem sql file und fertig ist es.

Infos zu den Parametern auf Deutsch gibt es hier http://www.norbert-pfeiffer.de/sql/manual.de_267.html
Rebon hat geschrieben:Weshalb chr(34)? Eher chr(32) für Space?
Ich hab versuch den Programm Namen in "" zu setzen.
Was soll mir da Space bringen?
Windows hat mit Verzeichnissen wo ein Space drin vorkommt Probleme.
Deshalb der Versuch mit "". Auch wenn kein Space drin ist.

Re: RunProgram Problem

Verfasst: 31.01.2010 14:46
von bobobo
'D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql'

bedeutet für pb (zumindest offiziell)

Code: Alles auswählen

Runprogram("mysqldump.exe"," --opt -u root --all-databases > dbdata.sql","D:\server\xampp\mysql\bin\")
danach aber nicht sofort ein end sondern lieber 'n tacken warten.
oder mit #PB_Program_Wait aufrufen und auf das ende warten

Re: RunProgram Problem

Verfasst: 31.01.2010 14:52
von Andreas21
Alles schon ausprobiert. Ohne erfolg.

Code: Alles auswählen

Compiler = RunProgram("D:\server\xampp\mysql\bin\mysqldump.exe"," --opt -u root --all-databases > dbdata.sql","D:\server\xampp\mysql\bin", #PB_Program_Open|#PB_Program_Read)
Output$ = ""
  If Compiler  
    While ProgramRunning(Compiler)
      Output$ + ReadProgramString(Compiler) + Chr(13)
    Wend
    Output$ + Chr(13) + Chr(13)
    Output$ + "Exitcode: " + Str(ProgramExitCode(Compiler))     
  EndIf
  MessageRequester("Output", Output$)
  SetClipboardText(Output$)

Code: Alles auswählen

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options, use mysqldump --help



Exitcode: 1
Das selbe ist auch wenn ich "D:\server\xampp\mysql\bin\mysqldump.exe" durch "mysqldump.exe" ersetze.

Man könnte es zwar auch über bat dateien machen. Aber das will ich ungern machen.
Also:
PB

Code: Alles auswählen

RunProgram("dump.bat","","")
dump.bat

Code: Alles auswählen

D:\server\xampp\mysql\bin\mysqldump.exe --opt -u root --all-databases > dbdata.sql
Den das geht ja auch ohne probleme.

Re: RunProgram Problem

Verfasst: 31.01.2010 15:05
von bobobo
das mit der externen batchdatei hätte ich jetzt gerade vorgeschlagen .. meine tests hier waren auch nicht gerade von Erfolg gekrönt.

blöderweise geht es mit parameter --help
(wichtig !! unicode aus)

Code: Alles auswählen

Debug SetCurrentDirectory("x:\xampp\mysql\bin\")
prog.s="mysqldump.exe"
;par.s=" --opt -u root -p --password=sagichnich --all-databases"; > y:\dbdata.sql"
par.s="--help"
runner= RunProgram(prog,par,"",#PB_Program_Error|#PB_Program_Open|#PB_Program_Read)
Debug par
While ProgramRunning(runner)
    ;Debug "rennt"
    ;Debug ReadProgramError(runner)
    Debug ReadProgramString(runner)
Wend

MessageRequester("","schon fertig")
hab das thema mal etwas spezifiziert



auch im englishen forum vor ein paar jahren
http://www.purebasic.fr/english/viewtop ... =mysqldump

Re: RunProgram Problem mit mysqldump

Verfasst: 31.01.2010 16:03
von bobobo
so .. nun aber .. zwar auch mit cmd aber eigentlich nicht so schlimm

Code: Alles auswählen

;
;
prog.s="cmd"

par.s="/c x:\xampp\mysql\bin\mysqldump.exe -u root -p --password=sagichnic --opt --all-databases  > y:\dbdata.sql"
runner= RunProgram(prog,par,"",#PB_Program_Wait); auf keinen Fall ProgramHide
;da die Umleitung dann nicht funktioniert und in die Console ausgegeben wird und damit
;das verstecken gerade das umgekehrte erwirkt. 
MessageRequester("ok","nochmal anders")

;mit folgenden kann die Ausgabe abgefangen und entsprechend bearbeitet werden (z.B. als
;datei weggeschrieben oder was auch immer
par.s="/c x:\xampp\mysql\bin\mysqldump.exe -u root -p --password=sagichnich --opt --all-databases "
Debug prog+" "+par
runner= RunProgram(prog,par,"",#PB_Program_Hide|#PB_Program_Open|#PB_Program_Read)
While ProgramRunning(runner)
  line.s=ReadProgramString(runner)
  If FindString(line,"CREATE",0)
    Debug line
  EndIf
Wend
CloseProgram(runner)

MessageRequester("","schon fertig")

mühsame kacke das alles

Re: RunProgram Problem mit mysqldump

Verfasst: 31.01.2010 16:09
von Andreas21
Ok danke ich werd das testen^^

Ich will das aber unter Windows und Linux nutzen.
Unter Linux sind es die selben Parammeter wie bei windows.
Nur weis ich nicht wie es sich da wegen cmd lauffen wird.
Kenn mich da mit Linux noch nicht so gut aus -.-

Re: RunProgram Problem mit mysqldump

Verfasst: 31.01.2010 16:11
von bobobo
da du auch unter linux mittels runprogram eine shell starten können solltest, dürfte es auch eigentlich
keine unlösbaren probleme geben.
schreib mal wenns geklappt haben sollte.