Jak uzyskać wynik wyjściowy z polecenia SQL BACKUP do programu Delphi?
Dane wyjściowe poleceń sql, które są widoczne dla użytkowników, którzy interakcyjnie uruchamiają polecenia SQL z SQL Server Management Studio, różnią się od danych wyjściowych uzyskanych po wykonaniu polecenia ADO lub obiektu zapytania ADO.
USE [DBNAME]
BACKUP DATABASE [DBNAME] TO
DISK = 'C:\SqlBackup\Backup.mdf'
Wynik pomyślnego zakończenia jest następujący:
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).
Kiedy wykonuję TADOCommand lub TADOQuery z poleceniem CommandText lub SQL ustawionym jak powyżej, nie otrzymuję żadnego takiego wyjścia. Jak mogę odczytać „drugorzędne wyjście” z wykonania polecenia SQL? Mam nadzieję, że być może za pomocą pewnych surowych operacji ADO będę mógł wykonać polecenie i odzyskać powyższe informacje, aby odnieść sukces, a także wszelkie błędy w wykonywaniu kopii zapasowej Sql.
Aktualizacja: Poniższa odpowiedź działa lepiej dla mnie niż moja naiwna próba, która nie zadziałała, używając zwykłych klas Delphi TADOCommand i TADOConnection:
utwórz TADOCommand i TADOConnection.wykonaj polecenie.odzyskaj wiadomości informacyjne.Problem, którego doświadczyłem w moich własnych próbach kodowania, jest taki, że moim pierwszym poleceniem jest „use dbname”, a jedynym zestawem rekordów, w którym przeszedłem w moim kodzie, były wyniki polecenia „use dbname”, a nie drugie polecenie, które wykonałem. Przyjęta poniżej odpowiedź przechodzi przez wszystkie zestawy rekordów, które powracają po wykonaniu polecenia ADO, a zatem działa znacznie lepiej. Ponieważ robię to wszystko w wątku w tle, myślę, że i tak lepiej jest tworzyć surowe obiekty Com i unikać jakiegokolwiek splątania VCL w moim wątku. Poniższy kod może być miłym komponentem, jeśli ktoś jest zainteresowany, daj mi znać, a ja mógłbym utworzyć komponent „SQL Backup for Delphi”.