|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как отображать картинки в Image
Здравствуйте! в blob загрузил c:\1.bmp но в DB Grid отображение идет каряво BLOB в место название файлов.
потом при нажатие на кнопку: Код:
Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.FieldByName('name'))); |
#2
|
|||
|
|||
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
|
|||
|
|||
колонка
получается во второй колонке у меня картинка блоб.
Код:
Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.Fields[2])); error2.jpg Последний раз редактировалось leon2009, 11.09.2023 в 15:21. Причина: картинка |
#4
|
|||
|
|||
Картинку читает из текущей записи. Соотвеисвенно, тебе надо "отловить" момент смены текущей записи (соотв событие у TDataSource) и загрузить новую картинку в Image1. Нет кода под рукой, но в интернете достаточно примеров на эту тему...
|
#5
|
|||
|
|||
примеры
примеров много, на адо, Query и.т.п но я не могу сообразить может в саму базу не так гружу, что в поле отображается BLOB в место имени.
Код:
memo1.Lines.Add(DBGrid1.SelectedField.AsString); error3.jpg |
#6
|
|||
|
|||
компоненты
Код:
SQLQuery: TSQLQuery; begin SQLQuery := TSQLQuery.Create(nil); try SQLQuery.SQLConnection := SqlConnection1; // указываем соединение с базой данных image1.Picture.LoadFromFile(SQLQuery.FieldByName('name').AsString); SQLQuery.ExecSQL(); // выполняем запрос finally SQLQuery.Free(); end; не может найти имя файла error5.jpg |
#7
|
|||
|
|||
"(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; А вот процедурка, которая вызывается из 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; |
Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
leon2009 (12.09.2023)
|
#8
|
|||
|
|||
пример
на много проще все
Код:
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; |
#9
|
|||
|
|||
В смысле? У тебя в блобе может быть картика или ее адрес?
Ну тогда тебе надо менять дизайн БД. Не надо так делать. Заведи отдельные поля для картинки и адреса. Если блоб не пустой, то грузим из блоба, в противном случае проверяем адрес (в другом поле). |
#10
|
|||
|
|||
хостинг
Была картинка (хост free), пришлось менять на адреса
|