La salida de los comandos sql que es visible para los usuarios que ejecutan comandos SQL de forma interactiva desde el estudio de SQL Server Management es diferente a la salida que obtiene al ejecutar un comando ADO u objeto de consulta ADO.¿Cómo obtengo el resultado de un comando SQL BACKUP en un programa Delphi?
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
El éxito de salida conclusión es la siguiente:
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).
Cuando ejecuto bien un TADOCommand o TADOQuery con CommandText o SQL establecer que el anterior, que no reciben dicha salida. ¿Cómo leo esta "salida secundaria" de la ejecución de un comando SQL? Espero que, tal vez, a través de algunas operaciones sin procesar de ADO, pueda ejecutar un comando y recuperar la información anterior, para tener éxito, así como cualquier error al realizar una copia de seguridad Sql.
actualización: La respuesta de abajo funciona mejor para mí que mi ingenuo intento, que no funcionaba, el uso de civil clases Delphi TADOCommand y TADOConnection:
- crear TADOCommand y TADOConnection.
- ejecute el comando.
- recuperar mensajes de información.
El problema que he visto en mis propios intentos de codificación, es que mi primera orden es "uso nombredb" y el único conjunto de registros recorrí en mi código, era el resultado de la "utilización nombredb" de comandos, no el segundo comando que estaba ejecutando. La respuesta aceptada a continuación atraviesa todos los conjuntos de registros que regresan de ejecutar el comando ADO, y por lo tanto funciona mucho mejor. Dado que estoy haciendo todo esto en un hilo de fondo, en realidad creo que es mejor crear los Com Objects crudos de todos modos, y evitar cualquier enredo de VCL en mi hilo. El siguiente código podría ser un buen componente si alguien está interesado, hágamelo saber y podría crear un componente de código abierto "SQL Backup for Delphi".
Posiblemente relacionado? http://stackoverflow.com/questions/254486/view-output-of-print-statements-using-adoconnection-in-delphi?rq=1 –
Podría ser que su ADOQuery o ADOCommand se agote antes de recibir una respuesta del db? El valor predeterminado de CommandTimeOut es 30. –
Defina el controlador TADOConnection.OnInfoMessage para procesar este mensaje desde el servidor SQL – valex