< als Parameter übergeben
-
Hallo Leute
Mit folgendem Code soll ein SQL-Dump zurück geschrieben werden:ShellExecute(0, "open", "c:\\mysql\\bin\\mysql.exe ", "< adressen.sql", 0, SW_SHOWNORMAL);
Es wird aber nur der Inhalt der Datei angezeigt. Wenn ich in der Eingabeaufforderung mysql adressen.sql aufrufe, passiert genau das gleiche. Das heißt bei der Parameterübergabe wird < entfernt. Der Versuch mit \ oder '' brachte auch keinen Erfolg. Kann mir vielleicht jemand verraten wie ich die Parameter komplett übergeben kann?
MfG
Andidreas
-
Wenn an der Eingabeaufforderung dasselbe passiert dann ist das doch offensichtlich (erstmal) kein Programmier- und schon gar kein BCB-Problem.
Wenn du die korrekte Befehlzeile ermittelt hast und es dann noch Probleme beim Einbau derselben in deinem Programm gibt, dann kannst du dich nochmal in einem Fachforum melden.
Aber denk dran, dass ShellExecute zuallererst eine WinAPI-Funktion ist!Verschoben nach "Neugkeiten".
-
So wie im Code-Beispiel dargestellt ist es richtig, nur hat es den Anschein das bei der Parameterübergabe die spitze Klammer auf (<) entfernt wird.
-
Das "< blub" ist kein Parameter, sondern eine Umleitung der Standardeingabe. Ich weiß nicht, wie genau ShellExecute funktioniert, aber es ist sehr wahrscheinlich, dass man da nicht einfach diese Kommandozeilen-Syntax verwenden kann. Mit system müßte es eigentlich gehen, aber ich weiß nicht, ob das ansonsten passend ist.
Unter Unix wüßte ich, wie ich das ganze von Hand nachbaue, aber unter Windows muss ich passen.@Jansen: Wer lesen kann ist klar im Vorteil
Erwünscht ist das Kommando "mysql < adressen.sql", der Effekt ist jedoch der von "mysql adressen.sql".
-
Muss der Winkel nicht in die andere Richtung zeigen?
-
Du könntest auch CreateProcess() verwenden.
STARTUPINFO si = {0}; si.cb = sizeof( STARTUPINFO ); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOW; PROCESS_INFORMATION pi; CreateProcess( NULL, TEXT("c:\\mysql\\bin\\mysql.exe < adressen.sql"), NULL, NULL, TRUE, 0, 0, 0, & si, & pi );
-
Und noch mal. Ich bin der Meinung der Winkel ist falsch. Nur so:
C:\Dokumente und Einstellungen\Administrator>dir /b > test.txt
landet der Verzeichnisinhalt in der Datei test.txt.
-
Ich denke mal, Andidreas wollte nicht die Ausgabe, sondern die Eingabe umleiten.
-
Luckie: Kommt darauf an ob Du etwas von der Standardausgabe in eine Datei umleiten möchtest oder von einer Datei in die Standardeingabe...
-
Äh, meines Wissens funktioniert das mit CreateProcess und so gar nicht wie oben vorgeschlagen. Hier müssen selber die Pipes (stdin und stdout) der Child-Anwendung umgeleitet werden... hatte man ne Website zu dem Thema in der MSDN... leider hab ich den Link grad ned zur hand. aber auch im WinAPI-Forum finden sich hinweise.
-junix
-
Bevor du das mit der PIPE machst würde ich die MYSQLAPI nehmen, das File normal einlesen und einen Execute auf die DB ausführen.
-
Also beim mir im Programm mach ich das so ohne Probleme:
void DB_ACTIONS::restore(AnsiString dateiname) { // Syntax: mysql -u root -D test_pck <nocheinbackup.bak AnsiString befehl = (AnsiString)"mysql -u root -D "+einstellungen->datenbank_datenbank -> Text+ "<"+dateiname; if(system(befehl.c_str()) > 0)Application->MessageBox("Fehler beim Wiederhestellen des Backups"); else { Form1 -> aktualisiere_navigation(); Application->MessageBox("Backup erfolgreich"); } }
Also mit system... hast du allerdings die Dos-Kiste ungefragt offen...
-
Scheint aber das einzige zu sein, was funktioniert. Aber nur mit voherigem Verzeichniswechsel.
Gruß
Andidreas
-
junix schrieb:
Äh, meines Wissens funktioniert das mit CreateProcess und so gar nicht wie oben vorgeschlagen.
Sorry, ich dachte, dass er das <-Zeichen als Parameter an mysql.exe übergeben will. (Steht eigentlich so auch in der Überschrift)