1 (изменено: Eugene, 2017-11-26 23:00:34)

Тема: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Всем доброго времени суток.

У меня есть большая строка (8000 символов; это поле типа BLOB (binary large object) в БД Оракл) в шестнадцатеричном формате, которая в действительности является файлом формата .xlsx (я это знаю точно, потому что в соседнем поле лежит имя файла с расширением). Мне нужно эту строку "превратить" в физический файл экселя на диске. Т.е., этот файл "упакован" в BLOB в Оракле. Мне нужно его "распаковать".

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

Казус заключается еще и в том, что файлы там разных типов - есть эксель, есть вордовский документ, а есть архив. Подскажите, пожалуйста, как можно такую строчку распарсить объектом SAPI.SpFileStream. В принципе саму строчку я могу выгрузить в текстовый файл, чтобы не лазить за ней в базу.

2

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Для этих целей, Вы можете создать подключение к базе используя объект ADODB.Connection. Далее используя либо ADODB.Command либо ADODB.Recordset получить набор записей из которых нужно выгрузить данные. После этого у объекта Recordset взять необходимое поле Field и через его метод GetChunk загрузить блоками (или сразу всё содержимое) в SAPI.spFileStream / SAPI.spMemoryStream. И уже тогда выполнить сохранение на диск.

Пример подключения к базе Oracle

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

3 (изменено: Eugene, 2017-11-27 13:06:24)

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Xameleon,

попробую воспользоваться вашим примером с ADODB.Connection. Спасибо за помощь!

Подскажите как проверить, что есть коннект? Подставил свои параметры (драйвер, имя источника данных, логин пароль) и добавил строчку MsgBox conn.State. Запускаю скрипт, появляется окно командной строки и тут же пропадает..

4

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Eugene, а можно взглянуть на код (естесственно без реальных паролей), который Вы запускаете и узнать каким интерпретатором исполняете ?

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

5

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Xameleon,

ситуация успела несколько измениться.

Я пытаюсь подконнектиться к своему источнику данных под той учеткой, которая ходит в бд. Получаю следующую ошибку (см. файл tns_error). Тестовый коннект выполняю, запуская файл .udl (появляется окно Data Link Properties с различными параметрами).

Код, который я запускаю, вот такой:


Option Explicit

Const C_ORA_SID = "Ora_EGRC"
Const C_ORA_USR = ""
Const C_ORA_PWD = ""

Const C_TBL = "dual"
Const C_FLD_LOB = "sysdate"
Const C_FLD_ID = "ID_FIELD"

Dim oConn, sSQL, oRst, oLOB, f
Set oConn = CreateObject("ADODB.Connection")
oConn.ConnectionString = "Provider=OraOLEDB.Oracle.1;Data Source=" & C_ORA_SID & ";User ID=" & C_ORA_USR & ";Password=" & C_ORA_PWD & ";"
oConn.Open
sSQL = "SELECT " & C_FLD_LOB & " FROM " & C_TBL
Set oRst = oConn.Execute(sSQL)

Запускаю этот код (vbs) в командной строке и получаю следующее сообщение:


another_var.vbs(17, 1) ADODB.Connection: Provider cannot be found. It may not be properly installed.

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

6

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Так Вам естественным образом нужен адаптер для БД на клиентской стороне.

Проще говоря нужна библиотека OraOLEDB.DLL на компьютере с которого запускаете скрипт. И она должна быть зарегистрирована через regsvr32

Пример пояснения подобной ошибки:
OraOLEDB.Oracle.1 provider is not registered on the local machine

Документация по теме

Необходимые библиотеки

Законный вопрос - "И что с этим делать то ???"

Думаю Вам нужно поставить Oracle Instant Client соответственно разрядности Вашей системы.

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

7

Re: VBS:"Собрать" эксель файл из большой строки шестнадцатеричного формата

Вообщем, проблему удалось-таки решить средствами самого оракла) Оказывается, там есть такой пакет UTL_FILE, который умеет проворачивать такие штуки как распаковка блоба в файл, причем в принципе в любой, какой укажешь. Пришлось, правда, шаманить прикинувшись dba в SQL*Plus.