Чтение из BLOB многостраничного TIF

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
SSTA
Бывалый
Сообщения: 52
Зарегистрирован: 03 Февраль 2006, 5:41
Откуда: Хабаровск

Чтение из BLOB многостраничного TIF

Сообщение SSTA »

Здравствуйте.
CW6.1 ABC
Имею в BLOB - полях (ORACLE) TIF - документы, одно- и многостраничные.

Для отображения использую:
LOC:Handle USHORT
LOC:Op CSTRING(20)
LOC:File CSTRING(256)
LOC:Path CSTRING(256)
LOC:Param CSTRING(256)
LOC:Show SHORT
TempFileName cstring('c:\data\temp.tif')

code

IF BLOBToFile(O_Doc:FILE_DOC, TempFileName)
MESSAGE(' was not copied - ERRORCODE: ' & ERRORCODE())
else
loc:Handle = 0{PROP:Handle}
loc:Op = ''
loc:File = ''
loc:Param = clip(TempFileName)
loc:Path = ''
loc:Show = 0
RetVal# = ShellExecute(loc:Handle,loc:Op,loc:Param,loc:File,loc:Path,loc:Show)
END

По расширению tif на компе цепляется ACDSee 6.0
Проблема: после проделанного ACDSee отказывается показывать многостраничный документ далее первой страницы, хотя и сообщает, что их несколько.
Примечание: в BLOB - документы корректные (проверено другими программами по аналогичной схеме), ACDSee показвает многостраничные документы, ессно, тоже корректно.
Вопрос: что может быть? Мож, BlobToFile ломается, или чо?
Спасибо.
C уважением, Александр Т.
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Чтение из BLOB многостраничного TIF

Сообщение Yufil »

SSTA писал(а):Здравствуйте.
CW6.1 ABC
Имею в BLOB - полях (ORACLE) TIF - документы, одно- и многостраничные.

Для отображения использую:
LOC:Handle USHORT
LOC:Op CSTRING(20)
LOC:File CSTRING(256)
LOC:Path CSTRING(256)
LOC:Param CSTRING(256)
LOC:Show SHORT
TempFileName cstring('c:\data\temp.tif')

code

IF BLOBToFile(O_Doc:FILE_DOC, TempFileName)
MESSAGE(' was not copied - ERRORCODE: ' & ERRORCODE())
else
loc:Handle = 0{PROP:Handle}
loc:Op = ''
loc:File = ''
loc:Param = clip(TempFileName)
loc:Path = ''
loc:Show = 0
RetVal# = ShellExecute(loc:Handle,loc:Op,loc:Param,loc:File,loc:Path,loc:Show)
END

По расширению tif на компе цепляется ACDSee 6.0
Проблема: после проделанного ACDSee отказывается показывать многостраничный документ далее первой страницы, хотя и сообщает, что их несколько.
Примечание: в BLOB - документы корректные (проверено другими программами по аналогичной схеме), ACDSee показвает многостраничные документы, ессно, тоже корректно.
Вопрос: что может быть? Мож, BlobToFile ломается, или чо?
Спасибо.
1. А как ShellExecute объявлена? Вообще-то, первый и последний параметры не Short, a Long.
ShellExecute(UNSIGNED,*CSTRING,*CSTRING,*CSTRING,*CSTRING,SIGNED),UNSIGNED,PASCAL,RAW, |
NAME('ShellExecuteA')

Unsihned и Signed в 32-битных приложениях - это Long. А первый параметр вполне достаточно указать как 0. Ну и Loc:Op='Open' не помешает.
2. Посмотри на http://www.clarionFreeImage.com, там есть халявные шаблоны, может быть, помогут обойтись без ACDSee
3. Когда-то в прошлой жизни высвечивал Multipage Tiff через Kodak OCX, прилагающийся к Windows 98.
Можно найти прогу на http://www.tacis-dipol.ru/fil/showImg.zip и http://www.tacis-dipol.ru/fil/kodak.zip (если нет под рукой Win98)..
SSTA
Бывалый
Сообщения: 52
Зарегистрирован: 03 Февраль 2006, 5:41
Откуда: Хабаровск

Сообщение SSTA »

Ситуация проясняется:
дело в том, что в oracle поле, хранящее tif - LONGRAW и создавалось невесть кем, невесть когда. При импорте описания таблицы в DCT тип поля оказался BLOB, а не как описано в соответсвиях типов данных STRING+GROUP+SHORT. BlobToFile на действительно BLOB Oracle работает прекрасно.
Вопрос тогда немного меняется: как вытянуть tif из LONGRAW, какое должно быть его описание его в dct для TIF произвольного размера?
C уважением, Александр Т.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

SSTA писал(а):Ситуация проясняется:
дело в том, что в oracle поле, хранящее tif - LONGRAW и создавалось невесть кем, невесть когда. При импорте описания таблицы в DCT тип поля оказался BLOB, а не как описано в соответсвиях типов данных STRING+GROUP+SHORT. BlobToFile на действительно BLOB Oracle работает прекрасно.
Вопрос тогда немного меняется: как вытянуть tif из LONGRAW, какое должно быть его описание его в dct для TIF произвольного размера?
ну а не пробовал поменять тип данных BLOB на требуемый в DCT для этого поля?

если ничего не получиться читай как через API подымаются данные из безразмерных полей, SqlDescribe, SqlGetData
Ответить