Wie erhalte ich die Ergebnisausgabe eines SQL BACKUP-Befehls in ein Delphi-Programm?
Die Ausgabe von SQL-Befehlen, die für Benutzer sichtbar ist, die SQL-Befehle in SQL Server Management Studio interaktiv ausführen, unterscheidet sich von der Ausgabe, die Sie durch Ausführen eines ADO-Befehls oder eines ADO-Abfrageobjekts erhalten.
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
Die Ausgabe für den erfolgreichen Abschluss sieht folgendermaßen aus:
Processed 465200 pages for database 'DBNAME', file 'filename' on file 2.
Processed 2 pages for database 'DBNAME', file 'filename_log' on file 2.
BACKUP DATABASE successfully processed 465202 pages in 90.595 seconds (40.116 MB/sec).
Wenn ich einen TADOCommand oder eine TADOQuery mit dem oben festgelegten CommandText oder SQL ausführe, erhalte ich keine solche Ausgabe. Wie lese ich diese "sekundäre Ausgabe" aus der Ausführung eines SQL-Befehls? Ich hoffe, dass ich möglicherweise über einige unformatierte ADO-Vorgänge einen Befehl ausführen und die obigen Informationen für den Erfolg sowie etwaige Fehler bei der Durchführung einer SQL-Sicherung zurückerhalten kann.
Aktualisieren: Die folgende Antwort funktioniert besser für mich als mein naiver Versuch, der mit einfachen Delphi-Klassen TADOCommand und TADOConnection nicht funktioniert hat:
TADOCommand und TADOConnection erstellen.Befehl ausführen.Info-Nachrichten zurückbekommen.Das Problem, das ich bei meinen eigenen Codierungsversuchen hatte, ist, dass mein erster Befehl "use dbname" ist und das einzige Recordset, das ich in meinem Code durchlaufen habe, das Ergebnis des Befehls "use dbname" war, nicht des zweiten Befehls, den ich ausgeführt habe. Die unten stehende akzeptierte Antwort durchläuft alle Datensatzgruppen, die von der Ausführung des ADO-Befehls zurückkommen, und funktioniert daher viel besser. Da ich das alles in einem Hintergrund-Thread mache, denke ich, ist es eigentlich besser, die rohen Com-Objekte trotzdem zu erstellen und jegliche VCL-Verstrickung in meinem Thread zu vermeiden. Der folgende Code könnte eine nette Komponente sein, wenn sich jemand dafür interessiert, lassen Sie es mich wissen und ich könnte eine Open-Source-Komponente "SQL Backup for Delphi" erstellen.