![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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), пришлось менять на адреса  
		
	
		
		
		
		
		
	
		
		
	
	
	![]()  |