База SQLite - blob в Timage и обратно

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

База SQLite - blob в Timage и обратно

Сообщение maser » 26.01.2011 16:58:03

Пожалуйста научите неопытного начинающего программиста как организовать сие действие.
Есть база SQLite, в которой в одной из таблиц есть blob-поле с картинкой (jpg). Нужно взять картинку из базы и поместить её в Timage.
Так же интересует обратная процедура - запись картинки в blob-поле базы. Сам осилить не могу что-то. Понял только, что надо использовать stream, а как это в коде организовать не знаю.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение Vadim » 26.01.2011 17:52:09

maser
Есть специальный компонент - TDBImage. Назначаете ему соответствующее поле и любуетесь картинками.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 26.01.2011 18:59:18

Vadim, спасибо за совет, но меня интересует именно тот вариант, который я описал выше. Можно и с DBImage вместо . Я видел коды под делфи, а под лазарь не могу найти подглядеть, т.к. те не идут.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение Vadim » 27.01.2011 04:54:22

maser
Каким компонентом пользуетесь для изъятия данных из базы?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: База SQLite - blob в Timage и обратно

Сообщение grigoreo » 27.01.2011 10:17:52

maser писал(а):Пожалуйста научите неопытного начинающего программиста как организовать сие действие.
Есть база SQLite, в которой в одной из таблиц есть blob-поле с картинкой (jpg). Нужно взять картинку из базы и поместить её в Timage.
Так же интересует обратная процедура - запись картинки в blob-поле базы. Сам осилить не могу что-то. Понял только, что надо использовать stream, а как это в коде организовать не знаю.


именно с SQL lite не скажу но предполагаю что по анологии читаешь содержимое блоб поля в MemoryStream а из него в свой TImage...
Аватара пользователя
grigoreo
постоялец
 
Сообщения: 195
Зарегистрирован: 10.03.2009 15:43:43
Откуда: С нашей Раши

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 27.01.2011 10:30:05

Vadim писал(а):Каким компонентом пользуетесь для изъятия данных из базы?

SQLQuery.
к примеру:
Код: Выделить всё
SQLQuery1.Active:=false;
  SQLQuery1.SQL.Text:='select * From Rubrics';
  SQLQuery1.Active:=true;

  // Заполнение ComboBox8
  Combobox8.Clear;
  while not SQLQuery1.EOF do     // пока не дошел до конца столбца...
   begin
    ComboBox8.Items.Add(SQLQuery1.FieldByName('NAME').Value);   //заполнение списка ComboBox8
    SQLQuery1.Next;   // переход ниже по столбцу
   end;
  SQLQuery1.First; // переход на первую строку
  Combobox8.Items[0];   // переход на нулевую строку


Как быть с blob полем не знаю.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение v-t-l » 27.01.2011 12:36:36

Код: Выделить всё
var
  bst: TStream;
begin
  bst := SQLQuery1.CreateBlobStream(SQLQuery1.FieldByName('Photo'), bmRead);
  Image1.Picture.Jpeg.LoadFromStream(bst);
  bst.Free;
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 27.01.2011 13:05:20

v-t-l, СПАСИБО! То что надо. Работает!
одно не понятно мне: что есть "bmRead"?

теперь попробую решить обратную задачу: запись в blob-поле из Timage.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение Vadim » 27.01.2011 15:05:59

maser писал(а):что есть "bmRead"?

Создаётся поток "Только для чтения".
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 27.01.2011 15:30:20

Vadim, понятно.

для полного раскрытия темы продолжу:
попытка записать содержимое картинки в Blob-поле SQLite:
Код: Выделить всё
...
var bm: TMemorystream;
...
bm:=TMemorystream.Create;
Image2.Picture.Jpeg.SaveToStream(bm);
bm.Position:=0;
....{тут несколько операций проверки условий и загрузка таблицы}
(SQLQuery1.fieldbyname('Photo') as TBlobField).LoadFromStream(bm); {здесь запинается}
bm.Free;
...     


Не может выполнить запись в базу.
Что не так?
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение Vadim » 27.01.2011 18:24:20

SQLQuery1 - у этого компонента должно быть заполнено поле UpdateSQL для модификации существующей записи или InsertSQL, для всртавки новой записи. Там должны быть соответствующие SQL-команды.
На будущее. Если у Вас выскакивает какая-нибудь ошибка - пишите её текст сюда, а то похоже практической телепатией тут никто не владеет и что такое "запинается" ( или прочие аналогичные гиперинформативные термины) никто без Ваших пояснений понять не сможет. И следовательно, невозможно Вам оказать помощь. Хорошо? ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 27.01.2011 19:07:19

Модификации записей других типов, кроме blob происходят без проблем. А что надо писать в полях UpdateSQL и InsertSQL? Там сейчас пусто.

"Уведомление об исключении отладчика": Project такой-то raised exception class 'EDatabaseError' with message: SQLQuery1: Operation not allowed, dataset "SQLQuery1" is not in edit or insert state.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение v-t-l » 27.01.2011 22:46:54

Код: Выделить всё
SQLQuery1.Edit;
...
v-t-l
энтузиаст
 
Сообщения: 735
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 28.01.2011 10:48:49

v-t-l писал(а):SQLQuery1.Edit;

помогло в плане сообщения ошибки. Теперь все делает без сообщения ошибки, но в blob-поле ничего не записывает. :?
поробовал сохранить содержимое bm в файл - все получается, т.е. bm содержит нужную информацию.
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

Re: База SQLite - blob в Timage и обратно

Сообщение maser » 30.01.2011 00:33:26

Не понятно, почему не записывает в базу. Код вроде правильный, в базе тоже все вроде путем прописано. Глюк?
maser
новенький
 
Сообщения: 20
Зарегистрирован: 13.01.2011 11:42:25
Откуда: Волгодонск

След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 46

Рейтинг@Mail.ru
cron