Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
solnishkin Member Откуда: Сообщений: 27 |
declare @xmlString nvarchar(4000), @url varchar(255), @retVal INT, @oXML INT, @loadRetVal INT, @h int declare @d1 datetime set @d1 = GetDate() select @url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=' + Convert(char(10), @d1, 103) select @url EXEC @retVal = sp_OACreate 'MSXML2.DOMDocument', @oXML OUTPUT EXEC @retVal = sp_OASetProperty @oXML, 'async', 0 EXEC @retVal = sp_OAMethod @oXML, 'load', @loadRetVal OUTPUT, @url EXEC @retVal = sp_OAMethod @oXML, 'xml', @xmlString OUTPUT EXEC sp_OADestroy @oXML exec sp_xml_preparedocument @h output, @xmlString select cast(floor(cast(@d1 as float)) as smalldatetime) as Data, CharCode, Nominal, Convert(money, replace(Value, ',', '.')) 'Value' from OpenXML (@h, '/Valute', 0) with ( Name varchar(99) './Name', Nominal int './Nominal', Value varchar(10) './Value', CharCode varchar(9) './CharCode' ) exec sp_xml_removedocument @h нашёл процедурку, которая должна вытаскивать курсы. но запрос возвращается пустой. в браузере эта страничка отображается... всё норм. поможите пжалуйста... |
3 апр 08, 21:10 [5501483] Ответить | Цитировать Сообщить модератору |
Artny
Guest |
вот так вытаскиваю курс доллараDECLARE @xmlString VARCHAR(8000) DECLARE @date datetime, @prevDate datetime DECLARE @h int DECLARE @flag bit DECLARE @url varchar(255) SELECT @flag = 0 CREATE table #temp ([Date] smalldatetime, Rate money, CurrencyId int) SELECT @date = dateadd(day, 1, CAST(CONVERT(varchar(100), getdate(), 112) AS datetime)) SELECT @prevDate = @date --получение курса доллара --если курса нет берем курс на предыдущий день WHILE @flag = 0 BEGIN SELECT @url = 'http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='+ Convert(char(10), @prevDate, 103) +'&date_req2='+ Convert(char(10), @prevDate, 103)+'&VAL_NM_RQ=R01235' exec LoadXMLFromFile @url, @xmlString output -- exec sp_xml_preparedocument @h output, @xmlString INSERT INTO #temp ([Date], [Rate], CurrencyId) select @date,--convert(smalldatetime, [Date], 104), Convert(money, replace(Value, ',', '.')) 'Value', 100 from OpenXML (@h, '//Record', 0) with ( [Date] char(10) '@Date', Nominal int './Nominal', Value varchar(10) './Value' ) IF(@@ROWCOUNT > 0) BEGIN SET @flag = 1 END ELSE BEGIN SET @prevDate = dateadd(day, -1, @prevDate) END exec sp_xml_removedocument @h END select * from #temp drop table #temp |
4 апр 08, 05:52 [5502091] Ответить | Цитировать Сообщить модератору |
Artny
Guest |
ALTER PROCEDURE [dbo].[LoadXMLFromFile] ( @tcFileName VARCHAR(255), @tcXMLString VARCHAR(8000) OUTPUT ) AS BEGIN -- Scratch variables used in the script DECLARE @retVal INT DECLARE @oXML INT DECLARE @errorSource VARCHAR(8000) DECLARE @errorDescription VARCHAR(8000) DECLARE @loadRetVal INT -- Initialize the XML document EXEC @retVal = sp_OACreate 'MSXML2.DOMDocument', @oXML OUTPUT IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END EXEC @retVal = sp_OASetProperty @oXML, 'async', 0 IF @retVal <> 0 BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Load the XML into the document EXEC @retVal = sp_OAMethod @oXML, 'load', @loadRetVal OUTPUT, @tcFileName IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Get the loaded XML EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END -- Release the reference to the COM object EXEC sp_OADestroy @oXML END |
4 апр 08, 05:59 [5502093] Ответить | Цитировать Сообщить модератору |
Prolog Member Откуда: Москва Сообщений: 2793 |
|
||
4 апр 08, 09:47 [5502399] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
все эти скрипты возвращают пустой запрос....
>>В браузере, который запускается на сервере с SQL Server? да >>Вам нужно на этом сервере добавить сайт www.cbr.ru в число Trusted sites добавил... результат тотже |
||
4 апр 08, 10:06 [5502509] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
>добавил... результат тотже а вы пробовали посмотреть, что в @xmlString оказывается? так, вроде, должно работать: select cast(floor(cast(@d1 as float)) as smalldatetime) as Data, CharCode, Nominal, Convert(money, replace(Value, ',', '.')) 'Value' from OpenXML (@h, '/ValCurs/Valute', 0) with ( Name varchar(99) './Name', Nominal int './Nominal', Value varchar(10) './Value', CharCode varchar(9) './CharCode' ) Posted via ActualForum NNTP Server 1.4 |
4 апр 08, 10:21 [5502594] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
@xmlString пустая... (( открыл в браузере эту страничку ... скопировал HTML ... написал небольшой селектик... вот такой DECLARE @docHandle int DECLARE @xmlDocument nvarchar(max) -- or xml type SET @xmlDocument = N' <?xml version="1.0" encoding="windows-1251" ?> <ValCurs Date="04/04/2008" name="Foreign Currency Market"> <Valute ID="R01010"> <NumCode>036</NumCode> <CharCode>AUD</CharCode> <Nominal>1</Nominal> <Name>Австралийский доллар</Name> <Value>21,5867</Value> </Valute> </ValCurs> ' EXEC sp_xml_preparedocument @docHandle OUTPUT, @xmlDocument -- Use OPENXML to provide rowset consisting of customer data. select CharCode, NameVal, Nominal, Convert(money, replace(Value, ',', '.')) 'Value' from OpenXML (@docHandle, '/ValCurs/Valute', 0) with ( NameVal varchar(99) './Name', Nominal int './Nominal', Value varchar(10) './Value', CharCode varchar(9) './CharCode' ) exec sp_xml_removedocument @docHandle sql ругается на строчку <?xml version="1.0" encoding="windows-1251" ?> говорит, что Описание ошибки "Переключение с текущей кодировки на указанную не поддерживается.". без этой строки работает. |
4 апр 08, 10:42 [5502725] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
> @xmlString пустая... (( проверяйте ошибки после каждого шага, как в скрипте от Artny Posted via ActualForum NNTP Server 1.4 |
4 апр 08, 11:10 [5502927] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
DECLARE @xmlString VARCHAR(8000) DECLARE @date datetime, @prevDate datetime DECLARE @h int DECLARE @flag bit DECLARE @url varchar(255) SELECT @flag = 0 CREATE table #temp ([Date] smalldatetime, Rate money, CurrencyId int) SELECT @date = dateadd(day, 1, CAST(CONVERT(varchar(100), getdate(), 112) AS datetime)) SELECT @prevDate = @date SELECT @url = 'http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1='+ Convert(char(10), @prevDate, 103) +'&date_req2='+ Convert(char(10), @prevDate, 103)+'&VAL_NM_RQ=R01235' exec LoadXMLFromFile @url, @xmlString output -- select @xmlString select @xmlString пустой |
4 апр 08, 11:16 [5502996] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
проверил процедуру LoadXMLFromFile ... выполняется без ошибок @retVal везде равен 0 EXEC @retVal = sp_OAMethod @oXML, 'xml', @tcXMLString OUTPUT IF (@retVal <> 0) BEGIN -- Trap errors if any EXEC sp_OAGetErrorInfo @oXML, @errorSource OUTPUT, @errorDescription OUTPUT RAISERROR (@errorDescription, 16, 1) -- Release the reference to the COM object EXEC sp_OADestroy @oXML RETURN END но @tcXMLString пустой. |
4 апр 08, 11:28 [5503079] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
On Fri, 04 Apr 08 08:16:42 GMT, solnishkin <nospam@sql.ru> wrote: >select @xmlString >пустой ошибки-то есть какие-нибудь? на вкладке Messages что у вас, посмотрите. Posted via ActualForum NNTP Server 1.4 |
4 апр 08, 11:29 [5503088] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
ошибок нет... все шаги в LoadXmlFromFile возвращают 0. но @xmlstring is null |
4 апр 08, 11:33 [5503129] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
>ошибок нет... >все шаги в LoadXmlFromFile возвращают 0. >но @xmlstring is null а файервол какой-нибудь ничего не запрещает вашему серверу? Posted via ActualForum NNTP Server 1.4 |
4 апр 08, 11:42 [5503225] Ответить | Цитировать Сообщить модератору |
Проходимец Member Откуда: Москва Сообщений: 571 |
-- часть от автора declare @xmlString nvarchar(4000), @url varchar(255), @retVal INT, @oXML INT, @loadRetVal INT, @h int declare @d1 datetime set @d1 = GetDate() select @url = 'http://www.cbr.ru/scripts/XML_daily.asp?date_req=' + Convert(char(10), @d1, 103) select @url EXEC @retVal = sp_OACreate 'MSXML2.DOMDocument', @oXML OUTPUT EXEC @retVal = sp_OASetProperty @oXML, 'async', 0 EXEC @retVal = sp_OAMethod @oXML, 'load', @loadRetVal OUTPUT, @url EXEC @retVal = sp_OAMethod @oXML, 'xml', @xmlString OUTPUT EXEC sp_OADestroy @oXML exec sp_xml_preparedocument @h output, @xmlString -- часть от daw select cast(floor(cast(@d1 as float)) as smalldatetime) as Data, CharCode, Nominal, Convert(money, replace(Value, ',', '.')) 'Value' from OpenXML (@h, '/ValCurs/Valute', 0) with ( Name varchar(99) './Name', Nominal int './Nominal', Value varchar(10) './Value', CharCode varchar(9) './CharCode' )Работает, показывает список валют и курсы... 2008-04-04 00:00:00 AUD 1 21.5867 2008-04-04 00:00:00 GBP 1 46.9212 2008-04-04 00:00:00 BYR 1000 10.9960 2008-04-04 00:00:00 DKK 10 49.4883 2008-04-04 00:00:00 USD 1 23.6153 2008-04-04 00:00:00 EUR 1 36.9414 2008-04-04 00:00:00 ISK 100 31.4745 2008-04-04 00:00:00 KZT 100 19.6018 2008-04-04 00:00:00 CAD 1 23.2571 2008-04-04 00:00:00 CNY 10 33.6535 2008-04-04 00:00:00 NOK 10 45.9746 2008-04-04 00:00:00 XDR 1 38.5536 2008-04-04 00:00:00 SGD 1 17.0692 2008-04-04 00:00:00 TRY 1 18.3206 2008-04-04 00:00:00 UAH 10 46.8902 2008-04-04 00:00:00 SEK 10 39.4239 2008-04-04 00:00:00 CHF 1 23.2870 2008-04-04 00:00:00 JPY 100 22.9810 |
4 апр 08, 11:46 [5503248] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
а файервол какой-нибудь ничего не запрещает вашему серверу? в ие я же захожу на енту страницу...всё отображается. |
4 апр 08, 11:47 [5503253] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
>в ие я же захожу на енту страницу...всё отображается. это ни о чем не говорит. запрет или разрешение можно обычно и для конкретного приложения поставить. Posted via ActualForum NNTP Server 1.4 |
4 апр 08, 11:49 [5503268] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
это ни о чем не говорит. запрет или разрешение можно обычно и для конкретного приложения поставить. а где это посмотреть не знаете? зашёл руками на страницу с курсами... сохранил её на диск... заменил урл на путь к ней... и всё заработало... т.о. проблема действительно в доступе... |
4 апр 08, 11:57 [5503332] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Зашли от имени учетной записи службы MSSQLSERVER ? С машины, где запущен MSSQLSERVER ? |
||
4 апр 08, 12:04 [5503412] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
sql server у меня на машине... я на нём админ... хазяин ... и вообще единственный пользователь ... |
4 апр 08, 12:16 [5503500] Ответить | Цитировать Сообщить модератору |
Prolog Member Откуда: Москва Сообщений: 2793 |
|
||
4 апр 08, 12:18 [5503528] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
С вами все ясно. Не ясно с учетной записью самого MSSQL |
||
4 апр 08, 12:19 [5503531] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
вообщем если файл с ентими валютами положить на диск и с него читать - то все ок... если же поширить папку и в неё положить, то уже не читает... т.е. с урла '\\my_comp\XML_daily.asp' уже не грузится. |
4 апр 08, 13:15 [5503981] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И какой же логический вывод можно сделать на этом основании ? |
||
4 апр 08, 13:16 [5503990] Ответить | Цитировать Сообщить модератору |
solnishkin Member Откуда: Сообщений: 27 |
))) где-то должна быть волшебная галка, которую надо поставить... sql server 2005 |
4 апр 08, 13:20 [5504017] Ответить | Цитировать Сообщить модератору |
Ken@t Member Откуда: 大地 Сообщений: 3264 |
что служба MSSQL запущена из под учётки localservice со всеми вытекающими. |
||
4 апр 08, 13:21 [5504029] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |