powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не пишется изображение в БД если Timage динамически создан.
17 сообщений из 17, страница 1 из 1
Не пишется изображение в БД если Timage динамически создан.
    #39963067
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрых суток,

Прошлая тема про запись/чтения картинок из БД , чтобы отпали теории типа "наверное ты не правильно пишешь в БД"


Теперь суть проблемы.

Создаю динамически на форме объект типа Timage

Код: pascal
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.
32.
33.
34.
35.
36.
37.
38.
39.
    function CreateObjectInto(perTypeOfObject:string):TObject;                                
      begin

        if perTypeOfObject = 'Timage' then CreateObjectInto:= TImage.Create(perSenderLocal as TComponent);        
      end;

....

perObject:=CreateObjectInto(TypeOfObject);


if TypeOfObject='Timage' then
  begin

  (perObject as Timage).OnClick       :=fmGeneral.OneClickByImage;

  if perName='' then                                                           
    (perObject as Timage).Name:='TimageComponent'+ FormatDateTime('ddmmyyyyhhnnsszzz', Now)+inttostr(perI) 
      else (perObject as Timage).Name:=perName;

  (perObject as Timage).Top           :=perTop;
  (perObject as Timage).Left          :=perLeft;
  (perObject as Timage).Height        :=perHeight;
  (perObject as Timage).Width         :=perWidth;

  if perAnchors[1]='1' then (perObject as Timage).Anchors:=(perObject as Timage).Anchors+[akLeft]   else (perObject as Timage).Anchors:=(perObject as Timage).Anchors-[akLeft];
  if perAnchors[2]='1' then (perObject as Timage).Anchors:=(perObject as Timage).Anchors+[akTop]    else (perObject as Timage).Anchors:=(perObject as Timage).Anchors-[akTop];
  if perAnchors[3]='1' then (perObject as Timage).Anchors:=(perObject as Timage).Anchors+[akRight]  else (perObject as Timage).Anchors:=(perObject as Timage).Anchors-[akRight];
  if perAnchors[4]='1' then (perObject as Timage).Anchors:=(perObject as Timage).Anchors+[akBottom] else (perObject as Timage).Anchors:=(perObject as Timage).Anchors-[akBottom];
    
  end;


После, загружаю в него jpeg изображение и пытаюсь сохранить в БД, но в бд пустое значение.
Если я загружаю BMP и пытаюсь сохранить в БД . то все ок, все сохраняется. 

В чем проблема?

Спасибо.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963073
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23,

ты не мог бы сделать и выложить здесь тестовый проект, в котором выполняется весь цикл действий?
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963082
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
Код: pascal
1.
2.
3.
4.
После, загружаю в него jpeg изображение и пытаюсь сохранить в БД, но в бд пустое значение.
Если я загружаю BMP и пытаюсь сохранить в БД . то все ок, все сохраняется. 

В чем проблема?


Проблемы две:
1. Нет кода сохранения.
2. Jpeg это не битмап, смотри DIBNeeded. Или в противовес - JPEGNeeded.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963085
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какая то мистика,

Сделал тестовый проект, чтобы сюда выложить. В нем все работает.

Полыхает. Буду разбираться.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963092
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23
Сделал тестовый проект, чтобы сюда выложить. В нем все работает.

Тестовые проекты - отличная практика! :)
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963100
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел ошибку ,

Находится в коде подсчета Хэш суммы рисунка.

Почему так?
Вот тут считается хэш сумма

Код: pascal
1.
2.
3.
4.
5.
      Ss :=TStringStream.Create('');                                         
      (perForm.Components[i] as Timage).Picture.Bitmap.SaveToStream(Ss);     
      perHAS:=MD5DigestToStr( MD5Stream(Ss) ); 
      SS.Position:=0;
      FreeAndNil(Ss);                                                 



А после мы записываем рисунок передавая его в процедуру. Так вот, если не считать хэш, то все хорошо записываться.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963101
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FIL23
Почему так?

Тестовый проект - на бочку. С хэшем и без хэша.
Меньше ляля.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963103
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой битмап в стринг стрим ...
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963104
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Arefiev
Какой битмап в стринг стрим ...


Да даже если TMemoryStream все равно не хочет
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963105
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос

Если мы создаем поток и читаем в него информацию. Получается что у нас две "копии" информации?
Т.е. одна в потоке, а вторая в моем случае в объекте Timage

Я же правильно понимаю?

Код: pascal
1.
2.
      Ss :=TMemoryStream.Create;                                           
      (perForm.Components[i] as Timage).Picture.Bitmap.SaveToStream(Ss); 
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963107
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23

Код: pascal
1.
2.
3.
4.
5.
      Ss :=TStringStream.Create('');                                         
      (perForm.Components[i] as Timage).Picture.Bitmap.SaveToStream(Ss);     
      perHAS:=MD5DigestToStr( MD5Stream(Ss) ); 
      SS.Position:=0;
      FreeAndNil(Ss);                                                 


если не считать хэш, то все хорошо записываться.

Что делает выделенная строчка перед уничтожением объекта?
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963112
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
FIL23

Код: pascal
1.
2.
3.
4.
5.
      Ss :=TStringStream.Create('');                                         
      (perForm.Components[i] as Timage).Picture.Bitmap.SaveToStream(Ss);     
      perHAS:=MD5DigestToStr( MD5Stream(Ss) ); 
      SS.Position:=0;
      FreeAndNil(Ss);                                                 


если не считать хэш, то все хорошо записываться.

Что делает выделенная строчка перед уничтожением объекта?


ни чего , я забыл ее удалить, думал может "вдруг" указатель виноват. Но нет. что с ним что без него - не работает.
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963161
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

После подсчета хэша указатель в стриме сдвигается. Вы его обратно возвращаете?
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963172
goldmi45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

После подсчёта хэша что вы делаете? Показывайте весь код сохранения. А то какие-то обрывки...
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963310
FIL23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goldmi45
FIL23,

После подсчёта хэша что вы делаете? Показывайте весь код сохранения. А то какие-то обрывки...


Я потом в процедуру объект Timage передаю, а не поток.

Ну и на всякий случай указатель ставлю на 0 вот этой командой SS.Position:=0;
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963336
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23,

Что такое MD5Stream? Какая версия Delphi? Почему вы поток на начало возвращаете после подсчёта контрольной суммы, а не до?..
Бонус: если вы в базе храните JPEG, то вы уверены что считать контрольную сумму от Bitmap - хорошая идея? Или вы там битмапы храните?
...
Рейтинг: 0 / 0
Не пишется изображение в БД если Timage динамически создан.
    #39963756
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FIL23
я забыл ее удалить, думал может "вдруг" указатель виноват

я вот это имел ввиду

alekcvp
Почему вы поток на начало возвращаете после подсчёта контрольной суммы, а не до?..
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Не пишется изображение в БД если Timage динамически создан.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]