SQL Server Management Studioから対話形式でSQLコマンドを実行するユーザーに表示されるsqlコマンドの出力は、ADOコマンドまたはADOクエリオブジェクトの実行から戻される出力とは異なります。SQL BACKUPコマンドの結果出力をDelphiプログラムに取り込むにはどうすればよいですか?
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
正常に完了出力は、このようなものです:
私は上記のように設定するのCommandTextまたはSQLでTADOCommandはやTADOQueryのいずれかを実行し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).
が、私はそのような出力を得ることはありません。 SQLコマンドの実行からこの「副出力」をどのように読み取るのですか?私はおそらく、いくつかの生のADO操作を介して、私はコマンドを実行し、成功のために上記の情報を得ることができると期待しているだけでなく、SQLバックアップを実行する際のエラー。
更新:答えは以下の平野デルファイTADOCommandはとTADOConnectionのクラスを使用して、動作しませんでした私の素朴な試み、より私のために良い作品:
- TADOCommandはとTADOConnectionのを作成します。
- 実行コマンド。
- get info-messages back。
私自身のコーディング試行で経験した問題は、私の最初のコマンドは "use dbname"で、私のコードで辿った唯一のレコードセットは、 "use dbname"コマンドの結果で、2番目私が実行していたコマンド。以下の回答は、ADOコマンドの実行から戻ってくるすべてのレコードセットをトラバースします。私はバックグラウンドスレッドでこれをやっているので、実際には生のCom Objectsを作成して、スレッドでVCLエンタングルメントを避けるほうが良いと思います。誰かが興味を持っていれば、以下のコードは素晴らしいコンポーネントになるかもしれません、私に知らせてください。オープンソースの "SQL Backup for Delphi"コンポーネントを作るかもしれません。
おそらく関連していますか? http://stackoverflow.com/questions/254486/view-output-of-print-statements-using-adoconnection-in-delphi?rq=1 –
返信を受け取る前に、ADOQueryまたはADOCommandがタイムアウトしている可能性がありますかデータベースから? CommandTimeOutのデフォルト値は30です。 –
SQLサーバーからこのメッセージを処理するTADOConnection.OnInfoMessageハンドラを定義します。 – valex