SQL Server Management StudioからSQLコマンドをインタラクティブに実行するユーザーに表示されるSQLコマンドの出力は、ADOコマンドまたはADOクエリオブジェクトの実行から返される出力とは異なります。
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
正常終了の出力は次のようになります。
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).
上記のようにCommandTextまたはSQLを設定してTADOCommandまたはTADOQueryを実行すると、そのような出力は得られません。SQLコマンドの実行からこの「二次出力」を読み取るにはどうすればよいですか?おそらく、いくつかの生のADO操作を介して、コマンドを実行し、SQLバックアップの実行でのエラーだけでなく、成功のために上記の情報を取得できる可能性があることを期待しています。
更新:以下の答えは、プレーンなDelphi TADOCommandクラスとTADOConnectionクラスを使用して、機能しなかった私の素朴な試みよりもうまく機能します。
- TADOCommandとTADOConnectionを作成します。
- コマンドを実行します。
- 情報メッセージを取り戻します。
私自身のコーディングの試みで経験した問題は、最初のコマンドが「use dbname」であり、コードでトラバースした唯一のレコードセットが「use dbname」コマンドの結果であり、実行していた2番目のコマンドではないことです。以下の受け入れられた答えは、ADOコマンドの実行から戻ってきたすべてのレコードセットをトラバースするため、はるかにうまく機能します。私はこれらすべてをバックグラウンドスレッドで行っているので、とにかく生のComオブジェクトを作成し、スレッド内のVCLエンタングルメントを回避する方が実際には良いと思います。以下のコードは、誰かが興味を持っている場合は素晴らしいコンポーネントになる可能性があります。私に知らせてください。オープンソースの「SQLBackupforDelphi」コンポーネントを作成する可能性があります。