Вывод команд sql, видимый пользователям, которые интерактивно запускают команды SQL из SQL Server Management Studio, отличается от вывода, который вы получаете от выполнения команды 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).
Когда я выполняю TADOCommand или TADOQuery с набором CommandText или SQL, как указано выше, я не получаю такого вывода. Как мне прочитать этот «вторичный вывод» при выполнении команды SQL? Я надеюсь, что, возможно, с помощью некоторых необработанных операций ADO я смогу выполнить команду и получить приведенную выше информацию для успеха, а также любые ошибки при выполнении резервного копирования Sql.
Обновление:Ответ ниже работает для меня лучше, чем моя наивная попытка, которая не сработала, используя простые классы Delphi TADOCommand и TADOConnection:
Проблема, с которой я столкнулся в своих собственных попытках кодирования, заключается в том, что моей первой командой является «use dbname», и единственный набор записей, который я прошел в своем коде, был результатом команды «use dbname», а не второй команды, которую я выполнял. Принятый ответ ниже проходит через все наборы записей, которые возвращаются после выполнения команды ADO, и поэтому он работает намного лучше. Поскольку я делаю все это в фоновом потоке, я на самом деле думаю, что в любом случае лучше создавать необработанные объекты Com и избегать любой запутанности VCL в моем потоке. Приведенный ниже код может быть хорошим компонентом, если кому-то интересно, дайте мне знать, и я могу сделать компонент с открытым исходным кодом «SQL Backup for Delphi».