Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.09.2023, 00:26
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Сообщение Как отображать картинки в Image

Здравствуйте! в blob загрузил c:\1.bmp но в DB Grid отображение идет каряво BLOB в место название файлов.
потом при нажатие на кнопку:
Код:
Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.FieldByName('name')));
картинка загружается в image, но можно как нибудь через grid т.е. если первая строка в гриде то первая картинка, если вторая строка то вторая картинка, а то одна и тажа грузиться . спасибо!
Ответить с цитированием
  #2  
Старый 11.09.2023, 08:40
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Лампочка 123

Код:
for i:=0 to dbgrid1.Columns.Count-1 do
begin
memo1.Visible:=true;
DBGrid1.Columns.FieldAddress('name');
memo1.Text:=DBGrid1.SelectedField.AsString;

Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.FieldByName(DBGrid1.SelectedField.AsString)));
что то все печально
Ответить с цитированием
  #3  
Старый 11.09.2023, 09:37
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Сообщение колонка

получается во второй колонке у меня картинка блоб.
Код:
Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.Fields[2]));
но читает только первую картинку из этой колонки, как остальные читать?
error2.jpg

Последний раз редактировалось leon2009, 11.09.2023 в 15:21. Причина: картинка
Ответить с цитированием
  #4  
Старый 11.09.2023, 18:19
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Картинку читает из текущей записи. Соотвеисвенно, тебе надо "отловить" момент смены текущей записи (соотв событие у TDataSource) и загрузить новую картинку в Image1. Нет кода под рукой, но в интернете достаточно примеров на эту тему...
Ответить с цитированием
  #5  
Старый 12.09.2023, 03:54
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Сообщение примеры

примеров много, на адо, Query и.т.п но я не могу сообразить может в саму базу не так гружу, что в поле отображается BLOB в место имени.
Код:
memo1.Lines.Add(DBGrid1.SelectedField.AsString);
ВМ60
error3.jpg
Ответить с цитированием
  #6  
Старый 12.09.2023, 04:03
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Лампочка компоненты

Код:
  SQLQuery: TSQLQuery;
begin
  SQLQuery := TSQLQuery.Create(nil);
  try
    SQLQuery.SQLConnection := SqlConnection1; // указываем соединение с базой данных
    image1.Picture.LoadFromFile(SQLQuery.FieldByName('name').AsString);
    SQLQuery.ExecSQL(); // выполняем запрос
  finally
    SQLQuery.Free();
  end;
error4-min.jpg
не может найти имя файла
error5.jpg
Ответить с цитированием
  #7  
Старый 12.09.2023, 07:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

"(BLOB)" отображается именно гридом, т.к. он понятия не имеет что там в BLOB поле сохранено и как его отображать. Если программисту хочется, то он может перекрыть отрисовку ячеек грида, бо как он, программист, в курсе, что там хранится.
Вот пример как это сделано у меня:
Код:
procedure TMainForm.dsMoviesDataChange(Sender: TObject; Field: TField);
var
  MovieId : Integer;
begin
  MovieId := qMovies.FieldByName('ID').AsInteger;
  lbMovieName.Caption := qMovies.FieldByName('MOVIE_TITLE').AsString;
  lbStudioYear.Caption := Format('%s (%d)',[qMovies.FieldByName('STUDIO_NAME').AsString,qMovies.FieldByName('MOVIE_YEAR').AsInteger]);
  LoadMovieInfo(MovieId);
end;
dsMovies - это TDataSource. Событие - OnDataChange
А вот процедурка, которая вызывается из LoadMovieInfoi:
Код:
  procedure LoadCover(Image : TJpegImage; Field : TBlobField);
  var
    Stream : TMemoryStream;
  begin
    Stream := TMemoryStream.Create;
    Try
      Field.SaveToStream(Stream);
      Stream.Seek(0,soFromBeginning);
      Image.LoadFromStream(Stream);
    Finally
      Stream.Free;
    End;
  end;
Я в BLOB поле храню JPEGи, так что для отображения в TImage приходится грузить вот твким образом, стандартный TDBImage JPEGи не поддерживает (в новых версия может и поддерживает, но лень проверять, написал как раньше делал).
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
leon2009 (12.09.2023)
  #8  
Старый 12.09.2023, 15:51
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Восклицание пример

на много проще все
Код:
Image: TImage;
Stream: TStream;
Memo: TMemo;
  begin
  Stream := ClientDataSet1.CreateBlobStream(ClientDataSet1.FieldByName('name'), bmRead);
  try
    Image1.Picture.Bitmap.LoadFromStream(Stream);
    //Memo.Lines.LoadFromStream(Stream); 
  finally
    Stream.Free;
  end;
это работает только на локалке, если фотки с адресм http://foto.html = то я еще пробую
Ответить с цитированием
  #9  
Старый 12.09.2023, 19:35
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,051
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В смысле? У тебя в блобе может быть картика или ее адрес?
Ну тогда тебе надо менять дизайн БД. Не надо так делать. Заведи отдельные поля для картинки и адреса. Если блоб не пустой, то грузим из блоба, в противном случае проверяем адрес (в другом поле).
Ответить с цитированием
  #10  
Старый 13.09.2023, 05:27
leon2009 leon2009 вне форума
Новичок
 
Регистрация: 18.03.2009
Сообщения: 71
Репутация: 10
Сообщение хостинг

Была картинка (хост free), пришлось менять на адреса
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 21:20.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter