Страница 1 из 1
Получение всех принтов из запроса
Добавлено: Чт 05 дек 2013 11:01
Zelius
Добрый день! Подскажите, как обстоят в SDAC дела с получением вывода оператором print? В ADO много ограничений, например необходимо, что бы курсор был серверным, set nocount on везде ставить. Спасибо!
С уважением, Константин
Re: Получение всех принтов из запроса
Добавлено: Чт 05 дек 2013 13:15
AndreyZ
Здравствуйте,
Для получения вывода оператора PRINT, Вам следует использовать событие TMSConnection.OnInfoMessage. Пример кода:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
begin
MSQuery1.SQL.Text := 'PRINT ''testing''';
MSQuery1.Execute;
end;
procedure TForm1.MSConnection1InfoMessage(Sender: TObject; E: EMSError);
begin
ShowMessage(E.Message);
end;
Заметьте что для выполнения данного кода, Вам следует добавить модуль OLEDBAccess в секцию USES Вашего модуля.
Данный код выполняется с использованием клиентского курсора (TMSQuery использует его по умолчанию) и на него не влияет оператор "SET NOCOUNT".
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 09:20
qwertehok
А подскажите как этот же результат получить для MS SQL?
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 11:09
Alexp
Пример приведенный в предыдущем посте демонстрирует работу как раз с MS SQL Server
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 11:14
qwertehok
Тогда, если можно, поясните откуда взять
MSConnection1InfoMessage
и
зачем нужен курсор?
Может я что-то не понимаю?
Мне нужно выполнить скрипт на 6000 строк. Для отладки я добавляю в код
в дельфи это вот так
Код: Выделить всё
UniQuery1.SQL.Text:='print ''Ошибка Номер ХХХ''';
Как вывести эту строку на форму?
ЗЫ скрипт запихиваю в UniScript
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 11:45
Alexp
Cобытие onInfoMessage реализовано в компоненте TMSConnection.
Пример получения сообщения приведен в предыдущем посте
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 11:49
qwertehok
Alexp писал(а):Cобытие onInfoMessage реализовано в компоненте TMSConnection.
Пример получения сообщения приведен в предыдущем посте
У меня Delphi XE и UniDac.
У меня нет TMSConnection.
Можно реализовать вывод без этого компонента?
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 12:09
Alexp
Команда PRINT есть только в MS SQL Server поэтому возможность работы с ней реализована только в SDAC, в UniDAC Вы не сможете получать эти ссобщения
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 15:09
qwertehok
спасибо, все работает
но теперь появился другой вопрос
команда
выдает
но если делать в рабочем коде
Код: Выделить всё
print CONVERT(nvarchar,GETDATE(),103) + ' : Начинаю обновление патчем от разработчика.'
GO
ALTER PROCEDURE [dbo].[i_imp_FrontolAtol_DataType_Article] (@DriverID AS INT, @SectionID AS INT, @LIVersion AS BIGINT)
AS
BEGIN
SET NOCOUNT ON
...
print ''
Начинает ругаться встроенный редактор кода так как теряется контекст БД.
Начали добавлять
Ругаться перестало, но теперь код
выдает только
Подскажите пожалуйста (если поняли)
Re: Получение всех принтов из запроса
Добавлено: Ср 22 янв 2014 15:36
Alexp
Пожалуйста приведите либо полный текст скрипта, либо создайте небольшой скрипт, который воспроизводит проблему и пришлите его нам что бы мы могли повторить описанную вами ситуацию
Re: Получение всех принтов из запроса
Добавлено: Чт 23 янв 2014 06:22
qwertehok
вот этот файл нужно выполнить и вывести на форму команду print которая идет в конце
в Студии выводится
как делаю я
Код: Выделить всё
MSScript1.SQL:=RzMemo1.Lines;
MSConnection1.Connected:=True;
MSScript1.Execute;
MSConnection1.Connected:=False;
В свойствах MSScript стоит DataSet=MSQuery1. И к этому MSQuery1 ваш обработчик с E.Message
PS файл это не ZIP
Re: Получение всех принтов из запроса
Добавлено: Чт 23 янв 2014 09:20
Alexp
Пришлите также скриты для создания объетов БД
P.S. В данный момент при выполнении вашего скритпа Вылаеться ошибка о том что процедура несуществует, а затем выводиться сообщение 'done'
Re: Получение всех принтов из запроса
Добавлено: Чт 23 янв 2014 11:11
qwertehok
спасибо огромное за помощь
ошибку нашли - это оказались огромные комментарии вот такого вида --********
разработчики вписали туда очень много звездочек и, видимо, скрипт обрезал строку и на новой оказывали незакоментированные ****.
еще раз спасибо.
ЗЫ а если можно добавить возможность отлавливать print в unidac - было бы вообще замечательно.
удалите пожалуйста мои сообщения.
Re: Получение всех принтов из запроса
Добавлено: Чт 23 янв 2014 15:10
Alexp
Эта возможность поддерживаеться только в SQL Server, а так как UniDAC предназначен для работы со многими БД мы не можем реализовать это поведение так как в других серверах оно не поддерживаеться.