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

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


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

Создаю динамически на форме объект типа 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
27.05.2020, 21:08
    #39963073
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пишется изображение в БД если Timage динамически создан.
FIL23,

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

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


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

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

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

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

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

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

Код: 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
27.05.2020, 23:07
    #39963101
ъъъъъ
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пишется изображение в БД если Timage динамически создан.
FIL23
Почему так?

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


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

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

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

Код: pascal
1.
2.
      Ss :=TMemoryStream.Create;                                           
      (perForm.Components[i] as Timage).Picture.Bitmap.SaveToStream(Ss); 
...
Рейтинг: 0 / 0
27.05.2020, 23:33
    #39963107
Док
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пишется изображение в БД если Timage динамически создан.
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
27.05.2020, 23:50
    #39963112
FIL23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пишется изображение в БД если Timage динамически создан.
Док
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
28.05.2020, 08:08
    #39963161
goldmi45
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не пишется изображение в БД если Timage динамически создан.
FIL23,

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

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

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


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

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

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

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

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


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