RunProgram Problem mit mysqldump -gelöst

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

RunProgram Problem mit mysqldump -gelöst

Beitrag 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.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Rebon
Beiträge: 263
Registriert: 20.05.2009 19:13

Re: RunProgram Problem

Beitrag von Rebon »

Weshalb chr(34)? Eher chr(32) für Space?
PB 4.00 | Windows XP Home SP3
Little John

Re: RunProgram Problem

Beitrag 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
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: RunProgram Problem

Beitrag 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.
Zuletzt geändert von Andreas21 am 31.01.2010 14:50, insgesamt 1-mal geändert.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: RunProgram Problem

Beitrag 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
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: RunProgram Problem

Beitrag 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.
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: RunProgram Problem

Beitrag 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
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: RunProgram Problem mit mysqldump

Beitrag 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
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Andreas21
Beiträge: 390
Registriert: 30.08.2004 09:05
Computerausstattung: Desktop
Windows 10 Pro x64
CPU: AMD Ryzen 5 2600 3.40 GHz
Ram: 16GB RAM
Grafik: NVIDA Geforce 1060
PB: 5.72 X86/X64
Wohnort: Heidelberg

Re: RunProgram Problem mit mysqldump

Beitrag 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 -.-
Windows 10 x64 Pro - PB 5.61 X64 / x32 - PB 4.6 x32
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3857
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: RunProgram Problem mit mysqldump

Beitrag 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.
‮pb aktuell5.7 - windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Antworten