| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 «  : 05-04-2005 10:20 »   | 
								
								 | 
							  
							 
							 :?Крутые Делфисты!!! Я новичок в Delphi! Помогите мне, глупой, найти ошибку в SQL-коде! Почему-то у меня вместо картинки в таблице в базе пустота добавляется. И в строке ParamByName('0').Assign(Form1.image_mapp.Picture) тоже пустота, когда в отладчике курсор поставить на Form1.image_mapp.Picture. В чем ошибка? Подскажите, пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
  Код был такой (с помощью этого кода хотела выбрать картинку из OpenPictureDialog1.FileName, а потом добавить эту картинку в таблицу "map_path" в поле "path"): 
  with modif_path do  if OpenPictureDialog1.Execute then begin  Form1.image_mapp.Picture.LoadFromFile(OpenPictureDialog1.FileName); 
  Close;  SQL.Clear;  SQL.Add('insert into map_path (path,InventoryID) values (:0, :1)');  ParamByName('0').Assign(Form1.image_mapp.Picture);  ParamByName('1').AsInteger := dm.Query1InventoryID.AsInteger;  Prepare;  ExecSQL;  Query1.Close;  Query1.Open;  end; 
  Пожалуйста, помогите мне!!!!!!!!!!!!!!!!
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:14 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #1 : 05-04-2005 14:58 »   | 
								
								 | 
							  
							 
							Demidova Aigul, попробуй так:   ParamByName('0').LoadFromFile(OpenPictureDialog1.FileName,ftGraphic); 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:15 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #2 : 06-04-2005 08:23 »   | 
								
								 | 
							  
							 
							 :lol:Ура!!! Получилось!!! Все работает!!! Спасибо большущее, Серж!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!  Удачи тебе!!! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #3 : 06-04-2005 08:49 »   | 
								
								 | 
							  
							 
							Ой, забыла спросить: а как теперь на форме в TImage отобразить картинку? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #4 : 08-04-2005 06:39 »   | 
								
								 | 
							  
							 
							Да так же, как и было:  Form1.image_mapp.Picture.LoadFromFile(OpenPictureDialog1.FileName); 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #5 : 11-04-2005 03:56 »   | 
								
								 | 
							  
							 
							А мне нужно рисунок не из файла загружать, а из базы данных, из таблицы. Как в этом случае нужно написать?      
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #6 : 11-04-2005 06:57 »   | 
								
								 | 
							  
							 
							Может быть, так: Form1.image_mapp.Picture.Assign(ParamByName('0').Value); 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:16 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #7 : 11-04-2005 08:07 »   | 
								
								 | 
							  
							 
							Все же скорее Form1.image_mapp.Picture.Bitmap.Assign(ParamByName('0').Value); 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:16 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #8 : 11-04-2005 11:04 »   | 
								
								 | 
							  
							 
							    Не получается! Ошибка выходит:"Project Project_katalog.exe raised exception class EInvalidGraphic with message 'Bitmap image is not valid'."  Код такой: with dm.Query_path do begin Close; SQL.Clear; SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open; if IsEmpty then begin image_mapp.Visible:=false; ShowMessage ('Нет рисунков!'); exit end else begin //image_mapp.Picture.Assign(dm.Query_path.FieldByName('path')); image_mapp.Picture.Bitmap.Assign(dm.Query_path.FieldByName('path')); end; end; end; Почему на Bitmap ругается (в строке image_mapp.Picture.Bitmap.Assign(dm.Query_path.FieldByName('path'))  , ведь у меня картинки JPEG? Правда, вместо ParamByName('0').Value написала FieldByName('path') - но ведь не в этом ошибка? Серж, не знаю, что делать? Помоги, пожалуйста!  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:17 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RomCom
							
						 | 
						
							
								  | 
								
									
									 « Ответ #9 : 11-04-2005 11:36 »   | 
								
								 | 
							  
							 
							image_mapp.Picture.Bitmap.Assign(dm.Query_path.FieldByName('path').Value); // без Value ты пытаешся вставить само поле  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:18 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
							 
							R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RomCom
							
						 | 
						
							
								  | 
								
									
									 « Ответ #10 : 11-04-2005 11:40 »   | 
								
								 | 
							  
							 
							без Value ты пытаешся вставить само поле т.е. класс TField а не значение хронящееся в этом поле. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #11 : 12-04-2005 04:23 »   | 
								
								 | 
							  
							 
							      Не помогло это. Когда добавляю value - у меня ошибка "Incompatible types: 'TPersistent' and 'Variant'". Может, еще чего-то не хватает?  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:19 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #12 : 12-04-2005 07:27 »   | 
								
								 | 
							  
							 
							Aigul, попробуй еще так, наконец-то должно получиться:   var MemoryStream:TMemoryStream;
  dm.Query_path.FieldByName('path').SaveToStream(MemoryStream); image_mapp.Picture.Bitmap.LoadFromStream(MemoryStream); 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:19 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #13 : 12-04-2005 07:38 »   | 
								
								 | 
							  
							 
							Забыл: конечно нужно еще вначале создать экземпляр класса, а в конце его уничтожить:  MemoryStream:=TMemoryStream.Create; .................  MemoryStream.Free;   
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #14 : 12-04-2005 09:42 »   | 
								
								 | 
							  
							 
							Дико извиняюсь, но с потоками почему-то тоже не получается.    Когда запускаю программу, она ни на что не ругается, но и в TImage картинку не показывает (там пустота - я проверяла с помощью отладчика).  Вот код: procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); var MemoryStream:TMemoryStream; begin with dm.Query_path do begin Close; SQL.Clear; //SQL.Add('SELECT path FROM map_path where InventoryID ='+dm.Query1InventoryID.AsString+''); SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open; if IsEmpty then begin image_mapp.Visible:=false; ShowMessage ('Нет картинок!'); exit end else begin MemoryStream:=TMemoryStream.Create; try //TBlobField(dm.Query_path.FieldByName('path')).SaveToStream(MemoryStream); TGraphicField(dm.Query_path.FieldByName('path')).SaveToStream(MemoryStream); image_mapp.Picture.Bitmap.LoadFromStream(MemoryStream); finally MemoryStream.Free; end; end; end; end; Что делать?А еще вот так попробовала - тоже не получается - появляется ошибка EAccessViolation в строке MyPic.LoadFromStream(MemoryStream). procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); var MemoryStream:TMemoryStream; MyPic: TGraphic; begin //with dm.modif3 do begin with dm.Query_path do begin Close; SQL.Clear; //SQL.Add('SELECT path FROM map_path where InventoryID ='+dm.Query1InventoryID.AsString+''); SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open; if IsEmpty then begin image_mapp.Visible:=false; ShowMessage ('Привязанных рисунков нет!'); exit end else begin MemoryStream:=TMemoryStream.Create; if dm.Query_path.FieldByName('path').Text = 'bmp' then   MyPic := TBitmap.Create ; if dm.Query_path.FieldByName('path').Text = 'jpg' then   MyPic := TJPEGImage.Create ; try TGraphicField(dm.Query_path.FieldByName('path')).SaveToStream(MemoryStream); MemoryStream.Seek(0, 0); MyPic.LoadFromStream(MemoryStream);   //  ругается на эту строку EAccessViolationimage_mapp.Picture.Assign(MyPic); finally MyPic.Free; MemoryStream.Free; end; end; end; end; Совсем запуталась. Помоги, пожалуйста! 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:20 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #15 : 12-04-2005 10:45 »   | 
								
								 | 
							  
							 
							У TDataSet есть еще метод CreateBlobStream. var B:TBlobStream;
  with dm.Query_path do begin ......  B:=CreateBlobStream(FieldByName('path'),bmRead);  И далее работать с этим потоком. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:21 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							RomCom
							
						 | 
						
							
								  | 
								
									
									 « Ответ #16 : 12-04-2005 11:38 »   | 
								
								 | 
							  
							 
							С самого начала был упущен один момент: Какой тип поля? Возможно проще положить на форму элемент TDBImage, назначить ему это поля и потом считывать картинку из него? (способ не оптимальный, но иногда проще решать проблему в лоб   . В любом случае, хотя бы для проверки правильности данных, это не плохо бы сделать.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
							 
							R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine 
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #17 : 13-04-2005 05:31 »   | 
								
								 | 
							  
							 
							to Серж:  Спасибо за подсказку, но все равно не работает!       Выходит ошибка "EDBEngineError with message " BLOB not opened". Почему так? Код был такой:  procedure TForm1.DBGridEh1CellClick(Column: TColumnEh); var BB:TBlobStream;begin with dm.Query_path do begin Close; SQL.Clear; SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open; if IsEmpty then begin image_mapp.Visible:=false; ShowMessage (Нет картинок!'); exit end else begin BB:=TBlobStream.Create(TBlobField(dm.Query_path.FieldByName('path')),bmRead);tryTBlobField(dm.Query_path.FieldByName('path')).SaveToStream(BB);image_mapp.Picture.Graphic.LoadFromStream(BB); finallyBB.Free;end; end; end; end; А при добавлении картинок вместо ParamByName('0').LoadFromFile(OpenPictureDialog1.FileName, ftGraphic) поставила   ParamByName('0').LoadFromFile(OpenPictureDialog1.FileName, ftBlob). to RomCom:  Спасибо за подсказку! Я уже тоже задумалась насчет TDBImage. Но когда я в свойствах выбрала свое поле "path", сразу появилось уже надоевшее и подозрительное ругательство "Bitmap image is not valid". Как это исправить?  to Серж и RomCom:  Вообще у меня база на SQL Server(e), а тип поля в таблице "path" указан как image, а сами картинки JPEG. Я вот думаю, что все не получается из-за  "Bitmap image is not valid". Мне кажется, если исправить эту ошибку, то заработает любой из выше перечисленных вами способов (и с потоками, и без потоков - как было предложено в начале, и с TDBImage). А может нужно что-то добавить или исправить в коде на добавление картинки - может там источник этой ошибки.  Вот код на добавление картинки: with modif_path do if OpenPictureDialog1.Execute then begin Form1.image_mapp.Picture.LoadFromFile(OpenPictureDialog1.FileName);   Close;   SQL.Clear;   SQL.Add('insert into map_path (path,InventoryID) values (:0, :1)');   //ParamByName('0').LoadFromFile(OpenPictureDialog1.FileName,ftGraphic);   ParamByName('0').LoadFromFile(OpenPictureDialog1.FileName,ftBlob);  ParamByName('1').AsString := dm.Query1InventoryID.AsString;   Prepare;   ExecSQL;   Query1.Close;   Query1.Open; end; В результате этого кода картинка добавляется нормально, но может JPEG-картинки добавляются не как  JPEG, а как-то по-другому - как bitmap? В общем, я совсем запуталась. Может как-то можно исправить эту ошибку "Bitmap image is not valid"?  Серж и RomCom !  Помогите, пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!           
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:21 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									«  Ответ #18 : 13-04-2005 07:06 »    | 
								
								 | 
							  
							 
							Aigul, вот у меня код, который я использовал для визуализации JPEG и который заведомо работал, может быть он тебе поможет!
  uses JPEG;
  var JP2:TJpegImage;     BMP3:TBitmap;     R:TRect; begin  BMP3:=TBitMap.Create;  BMP3.HandleType:=bmDIB;  BMP3.PixelFormat:=pf24bit;  BMP3.Palette:=0;  R.Left:=0;  R.Top:=0;  JP2:=TJpegImage.Create;  JP2.LoadFromStream(...);  JP2.DIBNeeded;  BMP3.Width:=JP2.Width;  BMP3.Height:=JP2.Height;  R.Right:=BMP3.Width;  R.Bottom:=BMP3.Height;  BMP3.Canvas.StretchDraw(R,JP2);  Image1.Picture.Bitmap.Assign(BMP3);  JP2.Destroy;  BMP3.Destroy; end; 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #19 : 13-04-2005 07:10 »   | 
								
								 | 
							  
							 
							Здесь предполагается, что в потоке находится JPEG-картинка, но по-моему, когда мы грузим картинку с помощью метода LoadFromFile, картинка хранится в памяти уже в виде Bitmap, но может быть, я и ошибаюсь. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #20 : 13-04-2005 07:41 »   | 
								
								 | 
							  
							 
							           
              BB:=TBlobStream.Create(TBlobField(dm.Query_path.FieldByName            ('path')),bmRead);
              TBlobField(dm.Query_path.FieldByName('path')).SaveToStream(BB);
               BB.Seek(0,soFromBeginning);              jp:=TJPEGImage.Create;              jp.LoadFromStream(MemoryStream);              Image1.Picture.Assign(jp); 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:23 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #21 : 13-04-2005 08:43 »   | 
								
								 | 
							  
							 
							Ой, Серж, а у меня ошибка "EDatabaseError 'BLOB not opened'" ! Причем, я заметила, когда после выхода ошибки "EDatabaseError 'BLOB not opened' нажимаешь "ОК" - стрелочкой выделяется строка BB.Seek(0,soFromBeginning).   Наверно, там ошибка. Может, я эту строку не туда поставила. Честно говоря, я вообще не знаю что означает BB.Seek(0,soFromBeginning) ?
  У меня вообще порядок строк может быть неправильным, потому что я не все понимаю.
  У меня такой получился код:
  procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
  var JP2:TJpegImage;     BMP3:TBitmap;     R:TRect;     //MemoryStream:TMemoryStream;     BB:TBlobStream;
  begin
  with dm.Query_path do begin Close; SQL.Clear; SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open;
  if IsEmpty then begin image_mapp.Visible:=false; ShowMessage (Нет картинок!'); exit end else begin
  BB:=TBlobStream.Create(TBlobField(dm.Query_path.FieldByName('path')),bmRead); TBlobField(dm.Query_path.FieldByName('path')).SaveToStream(BB);
  BB.Seek(0,soFromBeginning);
  BMP3:=TBitmap.Create; BMP3.HandleType:=bmDIB; BMP3.PixelFormat:=pf24bit; BMP3.Palette:=0; R.Left:=0; R.Top:=0; JP2:=TJPEGImage.Create; JP2.LoadFromStream(BB); JP2.DIBNeeded; BMP3.Width:=JP2.Width; BMP3.Height:=JP2.Height; R.Right:=BMP3.Width; R.Bottom:=BMP3.Height; BMP3.Canvas.StretchDraw(R,JP2); image_mapp.Picture.Bitmap.Assign(BMP3); JP2.Destroy; BMP3.Destroy;
  end; end; end;
 
  То, что жирным шрифтом - это то, что я не знаю - правильно или нет и в нужном месте или нет?  :oops: 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:24 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #22 : 13-04-2005 09:20 »   | 
								
								 | 
							  
							 
							По-моему правильно вот так:
  var JP:TJpegImage;        BB:TMemoryStream; begin
  BB:=TMemoryStream.Create; with dm.Query_path do begin  Close;  SQL.Clear;  SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID  ='''+dm.Query1InventoryID.AsString+'''');  Open;
 
  BB.Seek(0,soFromBeginning); TBlobField(SQLQuery.FieldByName('path')).SaveToStream(BB); BB.Seek(0,soFromBeginning); jp:=TJPEGImage.Create; jp.LoadFromStream(BB); image_mapp.Picture.Assign(jp); jp.Free;
  end;  BB.Free; end;
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:25 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #23 : 13-04-2005 09:38 »   | 
								
								 | 
							  
							 
							А, что,  BB.Seek(0,soFromBeginning); нужно 2 раза писать - перед TBlobField(SQLQuery.FieldByName('path')).SaveToStream(BB); и после ? Или это опечатка?
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:25 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #24 : 13-04-2005 09:50 »   | 
								
								 | 
							  
							 
							Это позиционирование в начало. В первый раз, наверно, не обязательно, но не повредит. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #25 : 13-04-2005 10:58 »   | 
								
								 | 
							  
							 
							Ой, не верю глазам своим! Получилось наконец-то показать картинку в TImage!!! Ура!!  Серж, спасибище тебе, не представляешь какое большууууууууууууууууууууууууууууууууууууууууууууууущее спасибище!!!!!!!!!   А еще один вопрос: у меня появившаяся на TImage картинка такая малююююююююююсенькая в левом нижнем углу. Как сделать, чтобы без искажения картинка полностью вписалась в TImage ?      
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #26 : 13-04-2005 11:35 »   | 
								
								 | 
							  
							 
							А какой итоговый текст программы? 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Demidova Aigul
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #27 : 13-04-2005 11:42 »   | 
								
								 | 
							  
							 
							Вот такой итоговый текст:
  procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
  var JP:TJpegImage;     BB:TMemoryStream;
  begin image_mapp.Visible:=True;
  BB:=TMemoryStream.Create; with dm.Query_path do begin Close; SQL.Clear; SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open;
  if IsEmpty then begin image_mapp.Visible:=false; ShowMessage ('Картинок нет!'); exit end else begin
  BB.Seek(0,soFromBeginning); TBlobField(dm.Query_path.FieldByName('path')).SaveToStream(BB); BB.Seek(0,soFromBeginning); jp:=TJPEGImage.Create; jp.LoadFromStream(BB); image_mapp.Picture.Assign(jp); jp.Free;
  end; BB.Free; end;
  end;
 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:26 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #28 : 13-04-2005 11:57 »   | 
								
								 | 
							  
							 
							Добавим растяжку:
  procedure TForm1.DBGridEh1CellClick(Column: TColumnEh);
  var JP:TJpegImage;     BB:TMemoryStream;     BMP3:TBitmap;     R:TRect;
  begin image_mapp.Visible:=True;
  BB:=TMemoryStream.Create; BMP3:=TBitmap.Create; BMP3.HandleType:=bmDIB; BMP3.PixelFormat:=pf24bit; BMP3.Palette:=0; R.Left:=0; R.Top:=0;
  with dm.Query_path do begin Close; SQL.Clear; SQL.Add('SELECT id, path, InventoryID FROM map_path where InventoryID ='''+dm.Query1InventoryID.AsString+''''); Open;
  if IsEmpty then begin image_mapp.Visible:=false; ShowMessage ('Картинок нет!'); exit end else begin
  BB.Seek(0,soFromBeginning); TBlobField(dm.Query_path.FieldByName('path')).SaveToStream(BB); BB.Seek(0,soFromBeginning); jp:=TJPEGImage.Create; jp.LoadFromStream(BB); JP.DIBNeeded; BMP3.Width:=JP.Width; BMP3.Height:=JP.Height; R.Right:=BMP3.Width; R.Bottom:=BMP3.Height; BMP3.Canvas.StretchDraw(R,JP); image_mapp.Picture.Bitmap.Assign(BMP3); jp.Free; end; BB.Free; BMP3.Free;
  end;
  end;
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
									« Последнее редактирование: 15-12-2007 17:27 от Алексей1153++ »
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	
		
		
			
				
					
						| 
							Серж
							 
								Гость 
							 
						 | 
						
							
								  | 
								
									
									 « Ответ #29 : 13-04-2005 12:10 »   | 
								
								 | 
							  
							 
							Тороплюсь. Если размер Image больше, чем ширина или длина рисунка, то надо записать R.Width:=Image_mapp.Width и аналогично для высоты. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									Записан
								 | 
							  
						 | 
					 
				 
			 |  
		 
	 | 
	 |