Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 19.06.2014
Сообщений: 3
SQLite

XE4 + Zeos, хранение Jpeg

19.06.2014, 21:44. Показов 2337. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую форумчан. Весь день борюсь с ерундовой задачей, но не могу решить.

Есть БД SQLite3, тестовая форма с парой кнопок и TImage. В двух словах: файл jpg загружаю в базу в поле blob, тут же читаю обратно (в TJpeg->TImage) - всё отображает хорошо.

Стоит перезапустить приложение -- читает из базы "что-то" уже большего размера, по внутреннему содержанию на jpg совсем не похожее.

Код - запись в базу:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var
  BlobStream: TStream;
  FileStream: TStream;
begin
 
  if Dataset.Active then begin
    if dlgOpenFile.Execute then
      begin
        if Dataset.State <> dsEdit then
          Dataset.Edit;
 
        Image1.Picture.LoadFromFile(dlgopenfile.FileName);
 
        if Image1.Picture.Graphic <>nil then  begin
 
            BlobStream := Dataset.CreateBlobStream(Dataset.FieldByName('PIC'), bmWrite);
           try
            FileStream := TFileStream.Create(dlgOpenFile.FileName, fmOpenRead);
           try
            BlobStream.CopyFrom(FileStream, FileStream.Size);
            Log(inttostr(BlobStream.Size)+' bytes saved to BLOB'); // <- проверка размера
          finally
            FileStream.Free;
          end;
        finally
          BlobStream.Free;
        end;
        Dataset.Post;
      end;
    end;
  end;
К этой процедуре претензий нет, беру картинку 30000 байт -- заливает 30000 байт. Картинк видно в SQLite Expert.

Теперь чтение из базы:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var
  blob: TStream;
  jpg: TJpegImage;
begin
 
  image1.Picture.Graphic:=nil;
 
  try
    if dataset.FieldByName('PIC').IsNull then begin
       Log('PIC empty');
       exit;
    end;
 
    jpg:=TJPegImage.Create;
 
    blob:=dataset.CreateBlobStream(dataset.FieldByName('PIC'), bmRead);
    Log('loading from blob '+inttostr(blob.Size)+' bytes'); // <- контроль размера
    jpg.LoadFromStream(blob);
    image1.Picture.Assign(jpg);
 
  except
      log('error loading image');
  end;
В общем, повторюсь, если сразу после загрузки в базу -- всё ок, и размеры совпадают. После перезапуска приложения -- вместо 30000 байт читается 50000 (образно) внутри - каша, Jpeg вываливается в exception. SQLite Expert при этом все загруженные изображения прекрасно видит.

Ткните пожалуйста. Спасибо за внимание.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.06.2014, 21:44
Ответы с готовыми решениями:

Хранение jpeg в файле
Привет. Передо мной стоит такая задача - пользователь имеет возможность выбирать рисунок, который является частью record. Я бы хотел все...

Resize JPEG, BMP, GIF, PNG --> JPEG
Доброго дня! Стала задача сделать ресайзер. Требования: картинка по соотношению вес/качество должна примерно соответствовать...

Бд, ZEOS и Делфи 7
Всем привет. Работаю на Делфи 7+ ZEOS С пом след. кода нахожу данные из SQL DB ZQuery1.sql.clear; ZQuery1.SQL.add('SELECT * FROM...

6
 Аватар для Cold
87 / 87 / 65
Регистрация: 22.05.2014
Сообщений: 485
20.06.2014, 04:05
Это создание: jpg:=TJPegImage.Create;
а где очистка?
тоже самое и с "blob"

Добавлено через 4 минуты
А вообще для проверки утечки памяти добавь в проект вот это:
Delphi
1
2
3
initialization
  ReportMemoryLeaksOnShutdown := True;
end.
0
0 / 0 / 0
Регистрация: 19.06.2014
Сообщений: 3
20.06.2014, 04:06  [ТС]
Пока не работает, как надо, чего очисткой заморачиваться. Код меняю слишком часто.

Стандартный SQLQuery вытаскивает картинки на ура, но там другие грабли. Так что хотелось бы добить этот момент.
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
20.06.2014, 09:22
На чистом проекте с БД Аксес все работает.
0
0 / 0 / 0
Регистрация: 19.06.2014
Сообщений: 3
20.06.2014, 11:04  [ТС]
FIL, спасибо, человек. А не поможете воспроизвести окончательно, с SQLIte?

Вот база (ID, Name, PIC) и sqlte3.dll: https://yadi.sk/d/Y9TASuKpUCCG8
zconnection -- TZConnection
dataset -- TZTable (Table: FBroker)
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
20.06.2014, 11:29
С SQLIte не работал и компонентов таких у меня нет.
Так что воспроизвести не могу.
1
129 / 129 / 41
Регистрация: 17.10.2013
Сообщений: 335
21.06.2014, 01:36
чистый проект - работает
Вложения
Тип файла: zip project1.zip (1.18 Мб, 48 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.06.2014, 01:36
Помогаю со студенческими работами здесь

ZEOS + PostgreSQL
BCB6 с установленным ZEOS DBO. По началу использовал MySQL, и все было хорошо. Но пришлось перейти на Postgre. При run-time создании...

SQL Zeos
procedure TIP_cam.btn6Click(Sender: TObject); begin InputQuery('Ïîèñê', 'Ââåäèòå èñêîìîå', poisk) ; ZQuery5.Active:=False; ...

ZEOS + FireBird
Доброго времени суток, уважаемые. Имеется проблема следующего характера: на моей машине установлен FireBird 2.1. Коннект через ZEOS...

Delphi с компонентами ZEOS
На форме имеются компоненты Label1, Button1 , ZConnection, и ZQuery (Данные компоненты подключены к БД) Необходимо чтобы текст с...

Не устанавливаются компоненты Zeos
Доброго времени суток! Говорю сразу - я новичок и много чего не сразу понимаю, поэтому не ругайтесь. Проблема следующая - пытаюсь...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru