"(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и не поддерживает (в новых версия может и поддерживает, но лень проверять, написал как раньше делал).