База SQLite - blob в Timage и обратно
Модератор: Модераторы
База SQLite - blob в Timage и обратно
Пожалуйста научите неопытного начинающего программиста как организовать сие действие.
Есть база SQLite, в которой в одной из таблиц есть blob-поле с картинкой (jpg). Нужно взять картинку из базы и поместить её в Timage.
Так же интересует обратная процедура - запись картинки в blob-поле базы. Сам осилить не могу что-то. Понял только, что надо использовать stream, а как это в коде организовать не знаю.
Есть база SQLite, в которой в одной из таблиц есть blob-поле с картинкой (jpg). Нужно взять картинку из базы и поместить её в Timage.
Так же интересует обратная процедура - запись картинки в blob-поле базы. Сам осилить не могу что-то. Понял только, что надо использовать stream, а как это в коде организовать не знаю.
maser
Есть специальный компонент - TDBImage. Назначаете ему соответствующее поле и любуетесь картинками.
Есть специальный компонент - TDBImage. Назначаете ему соответствующее поле и любуетесь картинками.
Vadim, спасибо за совет, но меня интересует именно тот вариант, который я описал выше. Можно и с DBImage вместо . Я видел коды под делфи, а под лазарь не могу найти подглядеть, т.к. те не идут.
maser
Каким компонентом пользуетесь для изъятия данных из базы?
Каким компонентом пользуетесь для изъятия данных из базы?
maser писал(а):Пожалуйста научите неопытного начинающего программиста как организовать сие действие.
Есть база SQLite, в которой в одной из таблиц есть blob-поле с картинкой (jpg). Нужно взять картинку из базы и поместить её в Timage.
Так же интересует обратная процедура - запись картинки в blob-поле базы. Сам осилить не могу что-то. Понял только, что надо использовать stream, а как это в коде организовать не знаю.
именно с SQL lite не скажу но предполагаю что по анологии читаешь содержимое блоб поля в MemoryStream а из него в свой TImage...
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 полем не знаю.
Код: Выделить всё
var
bst: TStream;
begin
bst := SQLQuery1.CreateBlobStream(SQLQuery1.FieldByName('Photo'), bmRead);
Image1.Picture.Jpeg.LoadFromStream(bst);
bst.Free;
v-t-l, СПАСИБО! То что надо. Работает!
одно не понятно мне: что есть "bmRead"?
теперь попробую решить обратную задачу: запись в blob-поле из Timage.
одно не понятно мне: что есть "bmRead"?
теперь попробую решить обратную задачу: запись в blob-поле из Timage.
maser писал(а):что есть "bmRead"?
Создаётся поток "Только для чтения".
Vadim, понятно.
для полного раскрытия темы продолжу:
попытка записать содержимое картинки в Blob-поле SQLite:
Не может выполнить запись в базу.
Что не так?
для полного раскрытия темы продолжу:
попытка записать содержимое картинки в 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;
...
Не может выполнить запись в базу.
Что не так?
SQLQuery1 - у этого компонента должно быть заполнено поле UpdateSQL для модификации существующей записи или InsertSQL, для всртавки новой записи. Там должны быть соответствующие SQL-команды.
На будущее. Если у Вас выскакивает какая-нибудь ошибка - пишите её текст сюда, а то похоже практической телепатией тут никто не владеет и что такое "запинается" ( или прочие аналогичные гиперинформативные термины) никто без Ваших пояснений понять не сможет. И следовательно, невозможно Вам оказать помощь. Хорошо?
На будущее. Если у Вас выскакивает какая-нибудь ошибка - пишите её текст сюда, а то похоже практической телепатией тут никто не владеет и что такое "запинается" ( или прочие аналогичные гиперинформативные термины) никто без Ваших пояснений понять не сможет. И следовательно, невозможно Вам оказать помощь. Хорошо?
Модификации записей других типов, кроме blob происходят без проблем. А что надо писать в полях UpdateSQL и InsertSQL? Там сейчас пусто.
"Уведомление об исключении отладчика": Project такой-то raised exception class 'EDatabaseError' with message: SQLQuery1: Operation not allowed, dataset "SQLQuery1" is not in edit or insert state.
"Уведомление об исключении отладчика": Project такой-то raised exception class 'EDatabaseError' with message: SQLQuery1: Operation not allowed, dataset "SQLQuery1" is not in edit or insert state.
Код: Выделить всё
SQLQuery1.Edit;
...v-t-l писал(а):SQLQuery1.Edit;
помогло в плане сообщения ошибки. Теперь все делает без сообщения ошибки, но в blob-поле ничего не записывает.
поробовал сохранить содержимое bm в файл - все получается, т.е. bm содержит нужную информацию.
Не понятно, почему не записывает в базу. Код вроде правильный, в базе тоже все вроде путем прописано. Глюк?
