Страница 1 из 2

Сохранение картинок в Firebird

Добавлено: 27 Апрель 2016, 19:02
Игорь Столяров
Привет всем !

Пробую работать с Firebird и опять возник детский вопрос ....
Подскажите пожалуйста, как сохранить картинку (документ, любой бинарный файл) в БД Firebird ?
И потом ее оттуда вытащить из под Clarion ?

Поле c типом IMAGE создал, а что далее делать не пойму ... в ODBC драйвере нет BLOB поля.
Не загонять же бинарный файл в строку и записывать ее в IMAGE ... :(
К тому же наверняка есть ограничение по длине строки в драйвере ODBC.

Заранее спасибо за помощь !

Сохранение картинок в Firebird

Добавлено: 27 Апрель 2016, 19:12
Дед Пахом
Игорь Столяров писал(а): в ODBC драйвере нет BLOB поля.
Это как?

Сохранение картинок в Firebird

Добавлено: 27 Апрель 2016, 19:23
Игорь Столяров
Упс ! Спасибо - это уже вариант. Буду пробовать.
Перепутал BLOB с MEMO полем (перевожу БД с Btrieve на Firebird, в Btrieve BLOB полей точно нет).

Тогда переформулирую вопрос по другому.
Можно ли добавлять в БД FireBird картинки напрямую командой ODBCFile{Prop:SQL} = 'INSERT INTO ....'
или что-то вроде этого и получать через SELECT ?

Сохранение картинок в Firebird

Добавлено: 27 Апрель 2016, 23:30
Yufil
Я добавлял в MS SQL-сервер под CW5. В базе данных был Blob, но драйвера его не видели.
Что-то вроде 'Insert into table(keyfield,blobfield) values(1,0hf0f1.......)', где второе поле вводится как шестнадцатеричное представление. Получалась SQL-команда достаточно нехилого размера, но всё работало.

Для этого делал версию своего класса для работы с длинными строками CSTR с соответствующей функцией.
Примерно так

S Cstr
Request Cstr
...
S.loadfromfile('file.jpg')
S.toHex('0H')
Request.set('insert into table(Keyfield1, Blobfield) values(1,' & S.S & ')'
Images{Prop:Sql} = Request.s

Как всегда - если нужно, поищу...

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 6:12
Игорь Столяров
Спасибо. Идея с трансформацией бинарного файла в текстовую строку и далее ее запись в SQL понятна,
с реализацией такой схемы проблем нет. Но здесь точно есть ограничение на число символов в инструкции SQL.
Для MS SQL - это 64 KByte, думаю что для Firebird значительно меньше. К тому же преобразование бинарной
строки в текст (в тот же BASE64) значительно увеличит ее размер и потребуется обратная трансформация
при считывании ...

Неужели современная наука не знает способа работы с бинарными данными в связке Clarion & SQL ? :(

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 10:57
Admin
В Firebird 3 вроде увеличили до 10mb, не? :)

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:19
Игорь Столяров
Admin писал(а):В Firebird 3 вроде увеличили до 10mb, не?
Я не настолько хорошо знаю Firebird ... Только пробую с ним работать ...
В любом случае, преобразованией бинарных данных в текстовые строки - не решает вопрос.
Почитал интернет - там вроде бы загрузка бинарных данных (файлов) в BLOB поля SQL БД должна выполняться
через STREAM (работа с потоками). С какой стороны к этому подлезть из Clarion - непонятно ... :(

Кажется, как только мы выходим за пределы задачи гонять строки и дата-таймы из Clarion в SQL - то получаем проблемы ...
А задача в общем-то элементарна: хранение в БД и работа с картинками, документами и т.д. Неожиданно. :(

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:30
Yufil
Вряд ли для MS SQL такие ограничения, я писал TIFF-сканы документов, там точно сотни килобайт были и никаких особых возражений не было.
А вот загрузить оказалось гораздо проблематичнее, пришлось нарезать блоб на части, а потом склеивать...

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:34
Yufil
Я в 2004 и 2006 годах переводил пару приложений из Delphi-Interbase в Кларион, успешно читал блобы с картинками и документами через стандартный odbc драйвер

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:42
Игорь Столяров
Yufil писал(а): успешно читал блобы с картинками и документами через стандартный odbc драйвер
Ура ! Именно это и надо. А не подскажите, как это можно сделать ? Заранее спасибо ! :)

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:53
kreator
Похоже действительно ограничение на размер есть. Игорь, посмотри вот здесь - http://www.ibexpert.net/ibe/index.php?n ... aFromAFile. Может поможет. Мы не храним картинки в базе, сделали отдельное хранилище. База вырастет не контролируемо. Что потом с ней делать? Да и ограничение по размеру...

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 11:58
Игорь Столяров
kreator писал(а): Мы не храним картинки в базе, сделали отдельное хранилище.
Спасибо. Буду разбираться.
Здесь ведь вопрос в чем ... Есть некая БД с доступом по IP адресу. Мы можем получать из нее данные по запросам.
Я ведь не могу получать по IP адресу некий файл с данными из папки на этом компьютере ....
Как-то неожиданно возникла проблема. Весь интернет хранит картинки и документы в блобах.

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 12:26
Yufil
А почему не можешь? Если папку на сервере определить как виртуальный каталог, то пожалуйста.

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 12:29
Игорь Столяров
Yufil писал(а): Если папку на сервере определить как виртуальный каталог
Я такого делать не умею .... :(

Сохранение картинок в Firebird

Добавлено: 28 Апрель 2016, 12:41
Дед Пахом
Про FileToBlob/BlobToFile никогда не слышал?