SQLite и картинки

ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Привет всем !

Собственно вопрос в теме: пробовал ли кто-нибудь работать в SQLite с бинарными массивами (картинками) ?
Судя по описанию - там это как-то хитро делается особыми встроенными функциями ... мне непонятно. :(
Мы работаем с SQLite через древний (но вполне рабочий) класс SQLite.inc. Может быть есть его новые релизы ?

Спасибо за поддержку и сочувствие ... ;)
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

SQLite и картинки

Сообщение Дед Пахом »

Не знаю про SQLite.inc, но если юзать sqlite3.dll, то sqlite3_value_bytes возвращает размер поля в байтах, а sqlite3_value_blob - адрес массива байт (адрес блоба).
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 16 Январь 2023, 20:54 Не знаю про SQLite.inc, но если юзать sqlite3.dll
Да. Этот класс работает с API SQLite 3.
Дед Пахом писал(а): 16 Январь 2023, 20:54 sqlite3_value_blob - адрес массива байт (адрес блоба)
Ну это даёт (гипотетически) возможность прочитать массив BLOB в существующей БД ...
А как его объявить, записать ... Да ещё и Clarion-c ... ? :)
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

SQLite и картинки

Сообщение Дед Пахом »

Через INSERT INTO TABLE, значение надо передавать как x'<blob as hex string>'.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 16 Январь 2023, 21:08 как x'<blob as hex string>'
Уф ! :shock: А не ли ссылочки на какое-нибудь описание или пример на любом языке ?
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

SQLite и картинки

Сообщение Дед Пахом »

Попробуйте поискать "sqlite hex literal".
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Спасибо. В принципе, теория вопроса понятна ...
Побайтно конвертируем сроку в HEX и выполняем INSERT ... примеры есть.
Попробую сделать. А PrintF() ведь не умеет конвертировать строку в HEX (только BASE64) ?
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

SQLite и картинки

Сообщение Дед Пахом »

Строку не умеет, только число: printf('%x', decNumber)
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 16 Январь 2023, 21:08 значение надо передавать как x'<blob as hex string>'
Ну не так всё просто ...
1. Нужно вообще смотреть, как этот BLOB будет виден на принимающей стороне;
2. Есть ограничение на длину строки в запросе через Exec();
3. В SQLite3 есть процедура позднего связывания для передачи бинарных данных:

Код: Выделить всё

  Module('SQLite api')
    ...  
    sqlite3_bind_blob(Long, Long, const Long, Long, Long),Long,C,Raw
  end  
  
  Code
  sqlite3_prepare
  Loop
    sqlite3_bind_хх;
    sqlite3_step
  end  
  sqlite3_finalize  
Жесть ! :(
Приносим Вам свои неудобства !
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2977
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 1 раз
Поблагодарили: 13 раз
Контактная информация:

SQLite и картинки

Сообщение Дед Пахом »

Не забудьте sqlite3_reset после sqlite3_step.
С уважением, ДП
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 17 Январь 2023, 13:34 sqlite3_reset после sqlite3_step
Я уже понял, что тут просто так всё не закончится уже ... :)
Приносим Вам свои неудобства !
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

Дед Пахом писал(а): 16 Январь 2023, 21:08 Через INSERT INTO TABLE, значение надо передавать как x'<blob as hex string>'.
Всё супер. :ty:
Записанные таким образом в BLOB картинки доступны через DB Browser SQLite и приложениям Android (B4A). :D
Возможно, в концепции BIGDATA - это не самый эффективный вариант, но для записи пары тысяч картинок меня всё устраивает.
Приносим Вам свои неудобства !
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

И вот уже картинки с образцами товаров из БД SQLite в приложении Android. :)

3.png
Приносим Вам свои неудобства !
Аватара пользователя
finsoftrz
✯ Ветеран ✯
Сообщения: 3636
Зарегистрирован: 06 Ноябрь 2014, 12:48
Благодарил (а): 2 раза
Поблагодарили: 5 раз

SQLite и картинки

Сообщение finsoftrz »

Не лучше фотки хранить на хостинге, а не прогружать всю кучу на каждый девайс? Я так у себя делал. Оправдано может быть, если работать без интернета. Тогда лучше подгружать только изменившиеся, иначе долго будет. Когда я размещаю фотки на хостинге, то туда закачиваются только изменившиеся (ведется специальный журнал версий). Можно работать сразу и на веб сайте, и на мобильных девайсах из нативного приложения.
C6/C11, ШВС, tps/btrieve.
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 6409
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 4 раза
Поблагодарили: 14 раз

SQLite и картинки

Сообщение Игорь Столяров »

finsoftrz писал(а): 26 Январь 2023, 13:17 а не прогружать всю кучу на каждый девайс
Неть ! Это другая история (которая намного проще).
В городе всё уже прибрали крупные сети, доставка работает по области и сёлам.
А там связь, примерно как правописание у Винни-Пуха. Т.е. она там есть, но хромает на обе ноги. :)

Если нормально готовить графику - то где-то 50 KByte на картинку в PNG с возможностью растягивать.
БД SQLite с кило картинок - примерно 60 MByte. Прекрасно работает даже на бюджетных смартфонах.
Ну если конечно работать с листовой загрузкой списков, а не как обычно ... ;)
Приносим Вам свои неудобства !
Ответить