Announcement

Collapse
No announcement yet.

ShellExecute und Gbak

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • ShellExecute und Gbak

    Hallo zusammen.

    Ich hätte da mal eine Frage.
    Ich mach ein Datenbankupdate über C++ Builder. Dazu habe ich folgenden Code:

    AnsiString ProgrammString = "C:\\Programme\\Firebird\\Firebird_1_5\\bin\\gbak. exe";
    AnsiString ParameterGbakString = "-user sysdba -pas masterkey localhost:";
    AnsiString Quelldb = OpenQuelldb->FileName;
    AnsiString Zieldb = SaveZieldb->FileName;
    AnsiString ParameterString = ParameterGbakString + Quelldb + " " + Zieldb;
    ShellExecute (Handle, NULL, ProgrammString.c_str(), ParameterString.c_str(), NULL, SW_SHOWHIDE);

    OpenQuelldb->FileName ist die Datei die der User auswählt mit welcher Datenbank er ein Backup machen möchte

    SaveZIeldb->FileName ist die Zieldatenbank


    wenn ich das alles ohne Variablen mache funktioniert das alles auch. Blos sobald die Variablen ins Spiel kommen geht es leider nicht. Kann es daran liegen das wenn ich per Handschreibe z.B. C:\\Programme\\test.gdb schreibe aber die Variable als C:\Programme\test.gdb gespeichert ist?

    Wenn ja wie kann ich das machen das die Ziel und Quelldatenbank als Variable mit doppel "\\" abspeichern kann damit das Funktion funktioniert? Oder gibt es da eine andere Lösung?

    Bin für jede Hilfe dankbar.

  • #2
    \ ist das Escapezeichen

    http://www.marquardtnet.info/cecke/q...quicky_40.html


    um in einen String ein \ zu erhalten ist \\ zu schreiben.
    Christian

    Comment


    • #3
      Ursache könnten Leerzeichen in den Pfadparametern sein

      c:\meine Programme\test.dat

      ist

      String test="\"c:\\meine Programme\\test.dat\""

      zu codieren, also

      AnsiString ParameterGbakString = "-user sysdba -pas masterkey localhost:";

      zu

      String ParameterGbakString = "\"-user sysdba -pas masterkey localhost:\"";
      Christian

      Comment


      • #4
        Vielen Dank für die schnelle Antwort.

        Ok, ich habe den Fehler gefunden. Es lag daran das sowohl der Quellpfad (Openquelldb->Filename) als auch im Zielpfad (SaveZieldb->Fielname) ein Leerzeichen drinn haben (Filename zb. = C:\Eigene Dokumente\test.gdb).
        Den Gbak stört das Leerzeichen zwischen "Eigene" und "Dokumente". Gibt es dafür ne Lösung für? Gbak mach leider allgemein keine Leerzeichen mit.

        Comment


        • #5
          Ursache könnten Leerzeichen in den Pfadparametern sein

          c:\meine Programme\test.dat

          ist

          String test="\"c:\\meine Programme\\test.dat\""

          zu codieren, also
          steht oben
          Christian

          Comment


          • #6
            Vielleicht verstehe ich dich ja nicht richtig. Aber Gbak nimmt nichtmal den Konsolenbefehl wenn da ein Leerzeichen im Dateinamen drin ist.
            Meine Quell und Zieldatein sind ja Variablen dessen Inhalt der User bestimmt. Nicht ich. Ist vielleicht Gbak zu alt? (FB Version 1.5)

            Wie würde denn der Konsolenbefehl für Gbak lauten?

            z.B. gbak -user sysdba -pas masterkey localhost:C:\Eigene Programme\test.gdb C:\test.gdk

            nimmt er nicht. Wegen dem Leerzeichen

            aber
            gbak -user sysdba -pas masterkey localhost:C:\Programme\test.gdb C:\test.gdk

            nimmt er. Gleiche Spiel in der Konsole

            Comment


            • #7
              Ok habe es hingekriegt. Danke nochmal für die Hilfe. Nicht sauber aber funktioniert

              String Quelldb = "\"" + OpenQuelldb->FileName + "\"";
              String Zieldb = "\"" + SaveZieldb->FileName + "\"";

              Comment


              • #8
                Was könnte daran nicht sauber sein?? So läuft es nun mal mit den Escapesequenzen
                Christian

                Comment

                Working...
                X