![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте! в blob загрузил c:\1.bmp но в DB Grid отображение идет каряво BLOB в место название файлов.
потом при нажатие на кнопку: Код:
Image1.Picture.Bitmap.Assign(TBlobField(SQLTable1.FieldByName('name'))); т.е. если первая строка в гриде то первая картинка, если вторая строка то вторая картинка, а то одна и тажа грузиться . спасибо! |
|
#2
|
|||
|
|||
|
Код:
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), пришлось менять на адреса
![]() |