1

Тема: VBScript: ADO.STREAM загрузка данных из URL

Пересмотрел я все примеры с использованием объекта ADODB.STREAM для работы с данными, и везде работа идёт либо через LoadFromFile (если с локального диска), либо с использованием другого объекта - MSXML2.XMLHTTP (если грузить файл из сети).

А вот непосредственно возможности метода Open нигде не используется.
Как гласит документация:

Stream.Open [Source], [Mode], [OpenOptions], [UserName], [Password]

Source
Optional. A Variant value that specifies the source of data for the Stream. Source may contain an absolute URL string that points to an existing node in a well-known tree structure, like an e-mail or file system. A URL should be specified using the URL keyword ("URL=scheme://server/folder"). Alternately, Source may contain a reference to an already open Record object, which opens the default stream associated with the Record. If Source is not specified, a Stream is instantiated and opened, associated with no underlying source by default. For more information about URL schemes and their associated providers, see Absolute and Relative URLs.

Следуя этим указаниям подставляем к имени-пути файла "URL=" и получаем что-то подобное:

set Ado = CreateObject ("ADODB.STREAM")
With Ado
    .Type = 2
    .Open "URL=file://C:\1.txt",adModeRead
End with

Получаю Ошибку:

---------------------------
Сервер сценариев Windows
---------------------------

Ошибка: Не удается найти объект или данные, соответствующие имени, области или условиям отбора в области действия операции.
Код: 80040E19
Источник: Microsoft OLE DB Service Components

---------------------------
ОК   
---------------------------

Манипуляции с url'om (абсолютный\относительный) могут лишь изменить характер ошибки :

Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.

Итак. Есть предложения в решении? Уже несколько часов колупаю..
Интересует загрузка данных в STREAM из URL именно через Open().

2

Re: VBScript: ADO.STREAM загрузка данных из URL

Добавил префикс в заголовок.

3

Re: VBScript: ADO.STREAM загрузка данных из URL

alexii пишет:

Добавил префикс в заголовок.

Блин, забыл.
Очень важное замечание.
Но в данном случае язык роли не играет, суть использовании метода ActiveX.
И посему предлагаю официально ввести новый префикс для тем форума - "ActiveX:" или "COM:"!
- в них будут обсуждаться проблемы работы с COM-интерфейсами, которые одинаковы для всех языков.

4

Re: VBScript: ADO.STREAM загрузка данных из URL

Аскет, внятных упоминаний, почему сие не работает, я не нашёл, кроме как в ADODB.Stream Open via URL (Unspecified error):

The server it doesn't work on has MDAC 2.8 SP1 and the server it works on has MDAC 2.7. It also seems to be an undocumented bug with MDAC 2.8 (i.e. no patches or hotfixes available).

I'm gonna try downgrading to 2.7 - hope it works.

Так что остаётся пользовать «XMLHTTPRequest».

5

Re: VBScript: ADO.STREAM загрузка данных из URL

Аскет пишет:

И посему предлагаю официально ввести новый префикс для тем форума - "ActiveX:" или "COM:"!

- в них будут обсуждаться проблемы работы с COM-интерфейсами, которые одинаковы для всех языков.

Лично я — против. От языка зависит многое.

6 (изменено: Xameleon, 2011-02-21 00:40:49)

Re: VBScript: ADO.STREAM загрузка данных из URL

К сожалению, на сколько мне известно, такой "выкрутас" пройдёт только с файлами на сервере которые относятся к экспортированным рекордсетам либо файлами БД.

http://msdn.microsoft.com/en-us/library … 85%29.aspx

A typical connection string for this provider is:

"Provider=MSDAIPP.DSO;Data Source=ResourceURL;User ID=MyUserID;Password=MyPassword;"

or

"URL=ResourceURL;User ID=MyUserID;Password=MyPassword;"

Data Source -or- URL


Specifies the URL of a file or directory published in a Web Folder.

Не буду особо заниматься цитированием, но там явно дают понять, что файл к которому обратиться стрим должен быть специально подготовлен для этого.

Вот тут можно более подробно почитать о том как подготовить данные для загрузки.
http://msdn.microsoft.com/en-us/library … 85%29.aspx

Но на сколько я понимаю, Вас интересует загрузка произвольного содержимого, а не работа с Recordset-ами на удалённых серверах. )

И очень хотелось узнать - чем вызвана неприязнь использования объектов XmlHttp и WinHttp ?

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

7

Re: VBScript: ADO.STREAM загрузка данных из URL

Xameleon пишет:

И очень хотелось узнать - чем вызвана неприязнь использования объектов XmlHttp и WinHttp ?

Они не умеют работать с протоколом res://, а этом как раз и основная задача.

С движком IE никаких проблем:

iexplorer.exe res://SHELL32.DLL/#2/130
    MSHTA.exe res://SHELL32.DLL/#2/130
    MSHTA.exe res://SHELL32.DLL/typelib/1

8

Re: VBScript: ADO.STREAM загрузка данных из URL

Стоп стоп стоп. Ясности стало ещё меньше. Если Вас интересует загрузка данных в ADODB Stream с URL, то при чём тут Res ? Можно узнать о конечной задаче ? Что нужно сделать и чего добиться ? Возможно то что вы ищете совсем рядом и реализуется значительно проще.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

9

Re: VBScript: ADO.STREAM загрузка данных из URL

Xameleon пишет:

Если Вас интересует загрузка данных в ADODB Stream с URL, то при чём тут Res ?

Разве res:// это не URL'овский протокол? Хотел использовать примерно так:

Stream.Open "URL=res://SHELL32.DLL/#2/130"

но не судьба.

Конечная задача - работа с ресурсами исполняемых файлов.

(не знаю предоставляет ли res-протокол возможность записи оных, но с чтением всё в порядке).

Существуют ли вообще объекты способные работать с этим протоколом?

В htmlfile  можно загрузить ресурс например, в IFRAME. Но как вытащить данные из него я ума не приложу. Или  есть другие подходящие теги-объекты?

10

Re: VBScript: ADO.STREAM загрузка данных из URL

Вот с этого и надо было начинать. ) К сожалению так оно работать не будет, на сколько мне известно. ) А вот как считать содержимое через res:// это интересный вопрос. Попробую поискать инфу.

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !