Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Sicherung mit Myqsldump (https://www.delphipraxis.net/87837-sicherung-mit-myqsldump.html)

sebastian_buege 6. Mär 2007 08:35


Sicherung mit Myqsldump
 
GUten Morgen, ich habe mal wieder ein Problem:

Ich habe eine Anwendung wo eine Mysql datenbank im hintergrund läuft. ich möchte nun aus dem program heraus mit hilfe des Tool smysqldump eine Sicherung der Datenbank machen.

Delphi-Quellcode:
ShellExecute(handle,'open','..\Mysql\mysqldump','--databases pze -u root -p > siko_333.sql','',SW_SHOW);
Das Programm wird auch gestartet. Es verlangt auch nach dem password. soweit uist alles richtig aber er leitet die ausgabe nicht in die datei um sondern auf den bildschirm.

wo könnte der fehler sein.

Vielen dank

marabu 6. Mär 2007 08:45

Re: Sicherung mit Myqsldump
 
Hallo Sebastian,

die Behandlung von pipes und redirection ist eine Funktionalität der Shell. Darum musst du beim Aufruf entweder die Shell aufrufen oder alles in einen Befehlsstapel verpacken.

Freundliche Grüße

sebastian_buege 6. Mär 2007 08:48

Re: Sicherung mit Myqsldump
 
Zitat:

Zitat von marabu
Darum musst du beim Aufruf entweder die Shell aufrufen oder alles in einen Befehlsstapel verpacken.

Danke für die schnelle Antwort. das Problem wenn ich die schell (cmd) aufrufe, weiß ich nicht wie ich dort mit den Parametern umgehen muss. Was genau meinst du mit einem Befehlsstapel

marabu 6. Mär 2007 09:01

Re: Sicherung mit Myqsldump
 
Dein Befehl und seine Parameter und Schalter bilden dann einen einzigen string - die commandline:

Delphi-Quellcode:
var
  cmd, shell: string;
begin
  shell := GetEnvironmentVariable('COMSPEC');
  cmd := '/C ..\Mysql\mysqldump.exe --databases pze -u root -p > siko_333.sql';
  ShellExecute(0, '', PAnsiChar(shell), PAnsiChar(cmd), '', SW_SHOW);
end;
Getippt und nicht getestet.

Ein Befehlsstapel ist einfach eine CMD-Datei.

Freundliche Grüße

sebastian_buege 6. Mär 2007 09:08

Re: Sicherung mit Myqsldump
 
Zitat:

Zitat von marabu
shell := GetEnvironmentVariable('COMSPEC');

Was soll dieser Befehl bewirken ?

marabu 6. Mär 2007 09:17

Re: Sicherung mit Myqsldump
 
So besorgst du dir den vollen Namen der Shell - oder wie willst du das machen?

sebastian_buege 6. Mär 2007 09:20

Re: Sicherung mit Myqsldump
 
Zitat:

Zitat von marabu
So besorgst du dir den vollen Namen der Shell - oder wie willst du das machen?

Okay ich setzte mein Program aber nur in Windows systemmen ab 2000 bzw. xp ein. kann ich nicht einfach sagen

Delphi-Quellcode:
shell:='cmd';

marabu 6. Mär 2007 09:27

Re: Sicherung mit Myqsldump
 
Wie du magst.

Die relativen Pfade in deiner Kommandozeile solltest du aber noch auf absolute Pfade umstellen und den Namen der Ausgabedatei parametrisieren.

Freundliche Grüße

sebastian_buege 6. Mär 2007 09:39

Re: Sicherung mit Myqsldump
 
Okay ich schicke dir jetzt mal meinen Quellcode.

Delphi-Quellcode:
var
   cmd:String;
   shell: array [Byte] of Char;
   size: Dword;
begin
     GetEnvironmentVariable('COMSPEC',shell,size);
     cmd := '..\Mysql\mysqldump.exe --databases pze -u root -p > siko_333.sql';
     ShellExecute(0, 'open', shell, PAnsiChar(cmd), '', SW_SHOW);
Also das auslesen der cmd variablen geht . er öffnet auch das kommand fenster - aber nichts weiter .

was kann ich noch tun

Luckie 6. Mär 2007 09:48

Re: Sicherung mit Myqsldump
 
Nun, er wird die mysqldump.exe nicht finden. Aber das hat marabu doch schon gesagt:
Zitat:

Die relativen Pfade in deiner Kommandozeile solltest du aber noch auf absolute Pfade umstellen

marabu 6. Mär 2007 09:50

Re: Sicherung mit Myqsldump
 
Warum verwendest du nicht die Funktion SysUtils.GetEnvironmentVariable() - sie ist schon auf Pascal-Bedürfnisse angepasst.

Probiere es zuerst mit einem internen Befehl wie DIR und informiere dich über den Schalter /C der Shell, den ich in meinem Beispiel verwendet habe.

sebastian_buege 6. Mär 2007 10:09

Re: Sicherung mit Myqsldump
 
Super... es hat geklappt. Habe doch tatsache den /c vergeseen danke allen :spin:

sebastian_buege 6. Mär 2007 12:11

Re: Sicherung mit Myqsldump
 
Okay aber nun stellt sich das geleiche problem mit der rücksicherung das cmd startet es geht auch alles aber die ausgabe erfolgt auf dem bildschirm und nicht in einer datei

Delphi-Quellcode:
var
   cmd:String;
   shell: array [Byte] of Char;
   size: Dword;
begin
     OpenDialog1.Filter:='Sicherungsdatei|*.sql';
     if OpenDialog1.Execute then
     begin
          GetEnvironmentVariable('COMSPEC',shell,size);
          cmd := '/c ..\Mysql\mysqldump.exe --databases pze -u root -p < ' +OpenDialog1.Files.GetText;
          ShellExecute(0, 'open', shell, PAnsiChar(cmd), '', SW_SHOW);
          ShowMessage('Sicherung angelegt');
     end;
Vielen Dank

marabu 6. Mär 2007 12:24

Re: Sicherung mit Myqsldump
 
Du verwendest in deinem Code eine Eingabe- und keine Ausgabe-Umleitung.

sebastian_buege 6. Mär 2007 12:26

Re: Sicherung mit Myqsldump
 
Das verstehe ich nicht "<" sagt doch aus das die datei eingelesen wird oder täusche ich mich undd wo si der ausgabestrom???

stifflersmom 6. Mär 2007 12:29

Re: Sicherung mit Myqsldump
 
@marabu
Na ja, er will jetzt ja auch einlesen und NICHT ausgeben.

Aber zum Einlesen: das macht man mit mysql und NICHT mit mysqldump

So ungefähr: mysql -ubenutzer -pppasswort datenbank<deinesqldatei

Moin

marabu 6. Mär 2007 12:54

Re: Sicherung mit Myqsldump
 
In Beitrag #13 hast du dich beklagt, dass unerwünschte Ausgaben auf dem Bildschirm erscheinen. Unabhängig davon, ob die Befehlszeile korrekt ist oder nicht: Die Ausgaben kannst du nur mit einer Ausgabeumleitung vernichten, z.B. >nul

Freundliche Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz