Показать сообщение отдельно
  #7  
Старый 12.09.2023, 07:43
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,016
Версия 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и не поддерживает (в новых версия может и поддерживает, но лень проверять, написал как раньше делал).
Ответить с цитированием