Como faço para obter o resultado da saída de um comando SQL BACKUP em um programa Delphi?
A saída de comandos sql que é visível para os usuários que executam comandos SQL de forma interativa do SQL Server Management Studio é diferente da saída que você obtém da execução de um comando ADO ou objeto de consulta ADO.
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
A saída de conclusão bem-sucedida é assim:
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).
Quando eu executo um TADOCommand ou TADOQuery com o CommandText ou SQL definido como acima, eu não recebo nenhuma saída. Como leio esse "output secundário" da execução de um comando SQL? Espero que, talvez por meio de algumas operações brutas do ADO, consiga executar um comando e recuperar as informações acima, para obter êxito, bem como erros na execução de um backup do Sql.
Atualizar: A resposta abaixo funciona melhor para mim do que a minha tentativa ingênua, que não funcionou, usando classes simples do Delphi TADOCommand e TADOConnection:
crie TADOCommand e TADOConnection.execute o comando.obter informações-mensagens de volta.O problema que experimentei em minhas próprias tentativas de codificação, é que meu primeiro comando é "use dbname" e o único conjunto de registros que eu percorri no meu código, foram os resultados do comando "use dbname", não o segundo comando que estava executando. A resposta aceita abaixo percorre todos os conjuntos de registros que retornam da execução do comando ADO e, portanto, funciona muito melhor. Como estou fazendo tudo isso em um segmento de segundo plano, na verdade, acho melhor criar os Com Objects não processados e evitar qualquer enredamento de VCL no meu thread. O código abaixo pode ser um bom componente, se alguém estiver interessado, me avise e eu posso fazer um componente de código-fonte aberto "SQL Backup for Delphi".