CREATE PROCEDURE [dbo].[sp_soap_request] @url nvarchar(max), -- Адрес сервера @result varchar(max) OUTPUT, -- Ответ @method nvarchar(max) = 'POST', -- Метод передачи @soap_action varchar(max) = NULL, -- Действие @request varchar(max) = NULL, -- Запрос @user_name varchar(max) = NULL, -- Имя пользователя @password varchar(max) = NULL -- Пароль AS BEGIN SET NOCOUNT ON; DECLARE @ole_obj int, -- Ссылка на OLE объект @err int, -- Код ошибки @err_str varchar(max), -- Текст ошибки @err_src nvarchar(max), -- Источник ошибки @err_desc nvarchar(max), -- Описание ошибки @http_status int, -- Код ответа сервера @err_id int, -- Код ошибки процедуры sp_OAGetErrorInfo @ResolveTimeOut int = 120 * 1000, -- Время ожидания поиска хоста @ConnectTimeOut int = 10 * 1000, -- Время ожидания соединения @SendTimeOut int = 120 * 1000, -- Время ожидания отправки @ReceiveTimeOut int = 240 * 1000 -- Время ожидания ответа EXEC @err = sys.sp_OACreate 'MSXML2.ServerXMLHTTP', @ole_obj OUTPUT IF @err = 0 BEGIN EXEC @err = sys.sp_OAMethod @ole_obj, 'open',NULL,@method,@url,'FALSE',@user_name,@password IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "OPEN".' GOTO GETERROR END EXEC @err = sys.sp_OAMethod @ole_obj ,'setTimeouts' ,NULL , @ResolveTimeOut, @ConnectTimeOut, @SendTimeOut, @ReceiveTimeOut IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setTimeouts".' GOTO GETERROR END EXEC @err = sys.sp_OAMethod @ole_obj ,'setRequestHeader' ,NULL ,'Content-Type','text/xml; charset=utf-8' IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setRequestHeader" (Content-Type).' GOTO GETERROR END IF @soap_action IS NOT NULL BEGIN EXEC @err = sys.sp_OAMethod @ole_obj ,'setRequestHeader' ,NULL ,'SOAPAction', @soap_action IF @err <> 0 BEGIN SELECT @err_str = 'Ошибка при выполнении метода "setRequestHeader" (SOAPAction).' GOTO GETERROR END END EXEC @err = sys.sp_OAMethod @ole_obj,'send',NULL,@request IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при выполнении метода "SEND".' GOTO GETERROR END EXEC @err = sys.sp_OAGetProperty @ole_obj ,'status' ,@http_status OUT IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при получении HTTP статуса ответа: ' + CONVERT(varchar(max), @http_status) GOTO GETERROR END IF ISNULL(@http_status, -1) not in (200,500) BEGIN SELECT @err=-1, @err_str = 'Неверный статус HTTP ответа: ' + CONVERT(varchar(max), @http_status) GOTO GETERROR END DECLARE @response TABLE (response varchar(max)) INSERT INTO @response EXEC @err = sys.sp_OAGetProperty @ole_obj ,'responseText' IF @err <> 0 BEGIN SELECT @err_str = 'Ошбика при получении HTTP ответа.' GOTO GETERROR END SELECT @result = response FROM @response IF @http_status = 500 BEGIN SELECT @err=-1, @err_str = 'Ошибка сервера HTTP 500: '+@result GOTO GETERROR END GOTO DESTROYOLE GETERROR:BEGIN EXEC @err_id = sys.sp_OAGetErrorInfo @ole_obj, @err_src OUTPUT, @err_desc OUTPUT IF @err_id = 0 SELECT @err_str += ' Источник: ' + ISNULL(@err_src,'NULL') + ' Описание: ' + ISNULL(@err_desc,'NULL') + ' Код ошибки: ' + CONVERT(varchar(max), @err) ELSE SELECT @err_str += ' Процедура sp_OAGetErrorInfo вернула ошибку: ' + CONVERT(varchar(max), @err_id) END DESTROYOLE:EXEC sys.sp_OADestroy @ole_obj IF @err <> 0 RAISERROR(@err_str, 16, -1) END ELSE RAISERROR('Не удалось создать OLE объект "MSXML2.ServerXMLHTTP"', 16,-1) RETURN @err END
Как удалить все хранимые процедуры
USE BASE_NAME DECLARE @sc varchar(max), @sp varchar(max) DECLARE cr CURSOR FOR SELECT ROUTINE_SCHEMA, SPECIFIC_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_TYPE = 'PROCEDURE' OPEN cr FETCH NEXT FROM cr INTO @sc, @sp WHILE @@FETCH_STATUS = 0 BEGIN EXECUTE('DROP PROCEDURE ' + @sc + '.' + @sp) FETCH NEXT FROM cr INTO @sc, @sp END CLOSE cr DEALLOCATE cr
Регистрируем горячие клавиши для своего приложения в системе
Здравствуйте уважаемые коллеги!
В данном примере показано как можно зарегистрировать горячие клавиши для вашего приложения в системе, которые будут срабатывать даже если окно вашей программы не активно или скрыто.
Пишем программу на Delphi выполняющую команду Ping по указанному адресу.
Здравствуйте уважаемые коллеги!
В данной статье напишем программку, которая выполняет команду Ping, при помощи стандартной утилиты Windows Ping.exe
Инструкция по установке Microsoft SQL Server Express 2012
Здравствуйте уважаемые коллеги!
В данной статье предлагается подробная пошаговая инструкция по установке Microsoft SQL Server Express 2012.
Создание и использование динамических библиотек (DLL) в Delphi.
Здравствуйте уважаемые коллеги!
В данной статье я постараюсь ответить на вопросы: Что такое DLL? Для чего она нужна? И как создавать и использовать DLL при помощи Delphi.
Простой способ подключения ресурсов *.res в Delphi.
Здравствуйте уважаемые коллеги!
В сети присутствует большое количество информации о том, как подключить ресурсы к своему проекту в Delphi. И как правило это старый «дедовский» метод через создание *.rc файла с последующей компиляцией его через командную строку. Но начиная с версии 2009 (и далее) в Delphi появилась возможность делать это намного проще.
WinInet в Delphi. Начало. HTTP запрос.
Здравствуйте уважаемые коллеги!
Библиотека WinInet, или Win32 Internet Extensions, предоставляет набор API функций для работы с протоколами HTTP и FTP. В данном примере я покажу как используя данную библиотеку получить исходный HTML код страницы.
Обмен данными с MS Excel в Delphi при помощи OLE.
Обмен данными с MS Excel в Delphi при помощи OLE.
Здравствуйте уважаемые коллеги!
Все мы рано или поздно сталкиваемся с задачами обмена данных с приложениями пакета MS Office. Одно из них — это MS Excel. И именно о взаимодействии с данным продуктом MS Office пойдет речь в данной статье.
ListBox с возможностью переносить на него файлы методом DragAndDrop.
Здравствуйте уважаемые коллеги!
В данной статье я покажу как сделать компонент ListBox, на который можно будет перетаскивать файлы из проводника методом DragAndDrop.