Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
solnishkin
в браузере эта страничка отображается... всё норм
В браузере, который запускается на сервере с SQL Server? Вам нужно на этом сервере добавить сайт www.cbr.ru в число Trusted sites.
4 апр 08, 09:47    [5502399]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
все эти скрипты возвращают пустой запрос....

автор

solnishkin
в браузере эта страничка отображается... всё норм
В браузере, который запускается на сервере с SQL Server? Вам нужно на этом сервере добавить сайт www.cbr.ru в число Trusted sites.


>>В браузере, который запускается на сервере с SQL Server? да

>>Вам нужно на этом сервере добавить сайт www.cbr.ru в число Trusted sites
добавил... результат тотже
4 апр 08, 10:06    [5502509]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
> @xmlString пустая... ((

проверяйте ошибки после каждого шага, как в
скрипте от Artny


Posted via ActualForum NNTP Server 1.4

4 апр 08, 11:10    [5502927]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
ошибок нет...
все шаги в LoadXmlFromFile возвращают 0.

но @xmlstring is null
4 апр 08, 11:33    [5503129]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
>ошибок нет...
>все шаги в LoadXmlFromFile возвращают 0.
>но @xmlstring is null

а файервол какой-нибудь ничего не запрещает вашему серверу?

Posted via ActualForum NNTP Server 1.4

4 апр 08, 11:42    [5503225]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Проходимец
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]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
а файервол какой-нибудь ничего не запрещает вашему серверу?

в ие я же захожу на енту страницу...всё отображается.
4 апр 08, 11:47    [5503253]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
>в ие я же захожу на енту страницу...всё отображается.

это ни о чем не говорит. запрет или разрешение можно обычно и для конкретного
приложения поставить.

Posted via ActualForum NNTP Server 1.4

4 апр 08, 11:49    [5503268]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
это ни о чем не говорит. запрет или разрешение можно обычно и для конкретного
приложения поставить.

а где это посмотреть не знаете?

зашёл руками на страницу с курсами... сохранил её на диск...
заменил урл на путь к ней... и всё заработало...

т.о. проблема действительно в доступе...
4 апр 08, 11:57    [5503332]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Glory
Member

Откуда:
Сообщений: 104760
solnishkin

зашёл руками на страницу с курсами... сохранил её на диск...
заменил урл на путь к ней... и всё заработало...

т.о. проблема действительно в доступе...

Зашли от имени учетной записи службы MSSQLSERVER ? С машины, где запущен MSSQLSERVER ?
4 апр 08, 12:04    [5503412]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
sql server у меня на машине...

я на нём админ... хазяин ... и вообще единственный пользователь ...
4 апр 08, 12:16    [5503500]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Prolog
Member

Откуда: Москва
Сообщений: 2793
solnishkin
sql server у меня на машине...

я на нём админ... хазяин ... и вообще единственный пользователь ...
А вы зайдите на сервер под учетной записью службы SQL Server'а. Что покажет IE.
4 апр 08, 12:18    [5503528]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Glory
Member

Откуда:
Сообщений: 104760
solnishkin
sql server у меня на машине...

я на нём админ... хазяин ... и вообще единственный пользователь ...

С вами все ясно. Не ясно с учетной записью самого MSSQL
4 апр 08, 12:19    [5503531]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
вообщем
если файл с ентими валютами положить на диск и с него читать - то все ок...

если же поширить папку и в неё положить, то уже не читает...
т.е. с урла

'\\my_comp\XML_daily.asp'

уже не грузится.
4 апр 08, 13:15    [5503981]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Glory
Member

Откуда:
Сообщений: 104760
solnishkin
вообщем
если файл с ентими валютами положить на диск и с него читать - то все ок...

если же поширить папку и в неё положить, то уже не читает...
т.е. с урла

'\\my_comp\XML_daily.asp'

уже не грузится.

И какой же логический вывод можно сделать на этом основании ?
4 апр 08, 13:16    [5503990]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
solnishkin
Member

Откуда:
Сообщений: 27
)))
где-то должна быть волшебная галка, которую надо поставить...

sql server 2005
4 апр 08, 13:20    [5504017]     Ответить | Цитировать Сообщить модератору
 Re: опять курсы валют....  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3264
Glory
И какой же логический вывод можно сделать на этом основании ?

что служба MSSQL запущена из под учётки localservice со всеми вытекающими.
4 апр 08, 13:21    [5504029]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить