Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 26/01/2012
look's Avatar
look look is offline
Miembro
 
Join Date: Sep 2007
Location: The Shire
Posts: 656
Poder: 19
look Va camino a la fama
Guardar y cargar imagen en campo blob

Hola amigos, estoy tratando de guardar una imagen en un campo blob desde el componente timage,tambiem me gustaria saber como cargarla luego a ese timage...
¿Me hechan una mano?

Saludos
__________________
all your base are belong to us
Reply With Quote
  #2  
Old 26/01/2012
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 27
Caral Va por buen camino
Hola
Este código lo Hizo nuestro amigo ChackAll:
Esta hecho para ado (access), pero sera facil cambiarlo a IBX (firebird).
Código Delphi [-]
implementation

{$R *.dfm}

uses jpeg;

var jpg: TJPEGImage;

procedure TForm1.FormCreate(Sender: TObject);
begin
 jpg := TJPEGImage.Create;        // Creamos el objeto que "entiende" al JPEG

end;

// Guardar la foto en la tabla
procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap; Stream: TStream;
begin
 if not OpenDialog1.Execute then Exit;

 bmp := TBitmap.Create;           // Creamos el objeto que "entiende" al Bitmap
 bmp.LoadFromFile(OpenDialog1.FileName);  // cargamos la imagen
 jpg.Assign(bmp);                 // signamos la imagen BMP al objeto del JPEG
 bmp.Destroy;                     // y liberamos el objeto. }

 ADOTable1.Open;                  // Abrimos la tabla
 ADOTable1.Insert;                // Insertamos una nueva tupla
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmWrite); // Asignamos el BLOB a un stream
 jpg.SaveToStream(Stream);        // y guardamos la imagen como JPEG (convertido), en el stream
 Stream.Destroy;                  // liberamos.
 ADOTable1.Post;                // Guardamos.

end;

// cargar la foto de la tabla.
procedure TForm1.Button2Click(Sender: TObject);
var  Stream: TStream;
begin
 ADOTable1.Open;                 // Abrimos la tabla
 ADOTable1.Last;                 // Nos vamos a la última tupla para ver la ultima imagen añadida.
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

 end;
Esta bien detallado, creo que se entiende bien.
Saludos
__________________
Siempre Novato
Reply With Quote
  #3  
Old 25/07/2017
rmora03 rmora03 is offline
Registrado
 
Join Date: Feb 2008
Posts: 7
Poder: 0
rmora03 Va por buen camino
Cargar Imagen hacia tImage desde Base de datos

Quote:
Originally Posted by Caral View Post
Hola
Este código lo Hizo nuestro amigo ChackAll:
Esta hecho para ado (access), pero sera facil cambiarlo a IBX (firebird).
Código Delphi [-]
implementation

{$R *.dfm}

uses jpeg;

var jpg: TJPEGImage;

procedure TForm1.FormCreate(Sender: TObject);
begin
 jpg := TJPEGImage.Create;        // Creamos el objeto que "entiende" al JPEG

end;

// Guardar la foto en la tabla
procedure TForm1.Button1Click(Sender: TObject);
var bmp: TBitmap; Stream: TStream;
begin
 if not OpenDialog1.Execute then Exit;

 bmp := TBitmap.Create;           // Creamos el objeto que "entiende" al Bitmap
 bmp.LoadFromFile(OpenDialog1.FileName);  // cargamos la imagen
 jpg.Assign(bmp);                 // signamos la imagen BMP al objeto del JPEG
 bmp.Destroy;                     // y liberamos el objeto. }

 ADOTable1.Open;                  // Abrimos la tabla
 ADOTable1.Insert;                // Insertamos una nueva tupla
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmWrite); // Asignamos el BLOB a un stream
 jpg.SaveToStream(Stream);        // y guardamos la imagen como JPEG (convertido), en el stream
 Stream.Destroy;                  // liberamos.
 ADOTable1.Post;                // Guardamos.

end;

// cargar la foto de la tabla.
procedure TForm1.Button2Click(Sender: TObject);
var  Stream: TStream;
begin
 ADOTable1.Open;                 // Abrimos la tabla
 ADOTable1.Last;                 // Nos vamos a la última tupla para ver la ultima imagen añadida.
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

 end;
Esta bien detallado, creo que se entiende bien.
Saludos

Hola a Todos
Buscando una solución a mi problema, me encontré con este hilo. El procedimiento de guardar la imagen en el campo blob parece que lo hace sin problemas, sin embargo al tratar de obtener la imagen y asignarlo a un TImage me da problemas.
Estoy utilizando Delphi 5 con base de datos Firebird.
Les comparto el código

Procedimiento que guarda la Imagen:

procedure TfrmDetalleProducto.GuardarClick(Sender: TObject);
Var
tabla : tTable;
Stream: TStream;
bmp: TBitmap;
jpg : TJPEGImage;
begin
tabla := tTable.Create(nil);
tabla .DatabaseName := Sessions[0].Databases[0].DatabaseName;
tabla .TableName := 'Productos';
tabla .Active := True;
tabla.Insert;

jpg := TJPEGImage.Create;
bmp := TBitmap.Create;
bmp.LoadFromFile(Global.POS.FRutaImagenBtn + EdRutaImagen.text);
jpg.Assign(bmp);
bmp.Destroy;
Stream := tabla.CreateBlobStream(tabla.FieldByName('IMAGEN'), bmWrite);
jpg.SaveToStream(Stream);
Stream.Destroy;
tabla.post;
end;

Procedimiento para asignar la imagen al componente tImage
procedure TfrmDetalleProducto.CargarImagen(Sender: TObject);
Var
tabla : tTable;
Stream: TStream;
bmp: TBitmap;
jpg: TJPEGImage;
begin
tabla := tTable.Create(nil);
tabla .DatabaseName := Sessions[0].Databases[0].DatabaseName;
tabla .TableName := 'Productos';
tabla .Active := True;


If tabla.Locate('CODIGO',245,[loCaseInsensitive]) then
begin
jpg := TJPEGImage.Create;
Stream := tabla.CreateBlobStream(tabla.FieldByName('IMAGEN'), bmRead);
jpg.LoadFromStream(Stream); <------------ AQUI DA EL ERROR
Stream.Destroy;
bmp.Assign(jpg);
ImgProducto.Picture.Assign(bmp);
end;
end;

El error que despliega es: Project x.exe raised exception class EJPEG with message 'JPEG error #50'. Process stopped. Use Step or Run to continue.

Agradezco me puedan colaborar

Saludos
Reply With Quote
  #4  
Old 25/07/2017
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Se supone que has añadido jpeg al uses:
Code:
uses jpeg;
Por cierto, bienvenido a clubdelphi, como siempre aconsejamos a los nuevos, no olvides leer nuestra guía de estilo, gracias por tu colaboración

Y recuerda poner los tags al código fuente, ejemplo:



Gracias
Reply With Quote
  #5  
Old 28/07/2017
rmora03 rmora03 is offline
Registrado
 
Join Date: Feb 2008
Posts: 7
Poder: 0
rmora03 Va por buen camino
Claro Casimiro, el uses del jpeg esta añadido.
Reply With Quote
  #6  
Old 28/07/2017
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,669
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Puede que no sea un jpg, aunque su extensión sea jpg.
Reply With Quote
  #7  
Old 26/01/2012
look's Avatar
look look is offline
Miembro
 
Join Date: Sep 2007
Location: The Shire
Posts: 656
Poder: 19
look Va camino a la fama
Hola amigo , gracias por responder pero.... estoy utilizando consultas para guardar los datos...lo que pasa es que estoy modificando mi formulario de alta de articulos tratando de agregar la funcion de que el usuario pueda seleccionar una imagen para un producto, ya tengo todo el formulario muy funcional , pero este funciona con consultas para guardar la info... lo que me esta dando palos es guardar la imagen

Saludos!
__________________
all your base are belong to us
Reply With Quote
  #8  
Old 26/01/2012
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 27
Caral Va por buen camino
Hola
No entiendo amigo, el codigo que puse es lo que hace, guardar imagenes ??.
Saludos
__________________
Siempre Novato
Reply With Quote
  #9  
Old 26/01/2012
look's Avatar
look look is offline
Miembro
 
Join Date: Sep 2007
Location: The Shire
Posts: 656
Poder: 19
look Va camino a la fama
Quote:
Originally Posted by Caral View Post
Hola
No entiendo amigo, el codigo que puse es lo que hace, guardar imagenes ??.
Saludos
si, pero utilizando tablas , necesito querys
por cierto , me da error en esta linea:
Código Delphi [-]
 bmp := TBitmap.Create;

Code:
object or class type requierd
__________________
all your base are belong to us
Reply With Quote
  #10  
Old 26/01/2012
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 27
Caral Va por buen camino
Hola
No entiendo la necesidad de un query si solo se va y actualiza un campo, que mas da ?.
Revisa este:

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls, DB, ADODB,  DBCtrls, ExtDlgs;

type
  TForm1 = class(TForm)
    Button2: TButton;
    ADOConnection1: TADOConnection;
    ADOTable1: TADOTable;
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    OpenPictureDialog1: TOpenPictureDialog;
    Button3: TButton;
    Image2: TImage;
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
    procedure Button3Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses jpeg;

var jpg: TJPEGImage;

procedure TForm1.FormCreate(Sender: TObject);
Var BaseDeDatos, ConStr : String;

begin
   // Obtiene la ruta y el nombre de la base de datos
   BaseDeDatos := ExtractFilePath(Application.ExeName)+'xxx.MDB';
   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
             'Data Source='+BaseDeDatos+';'+
             'Persist Security Info=False;'+
             'Jet OLEDBatabase Password=admin';
   ADOConnection1.ConnectionString := ConStr;
   ADOConnection1.Open;

 jpg := TJPEGImage.Create;        // Creamos el objeto que "entiende" al JPEG

end;

procedure TForm1.Button2Click(Sender: TObject);
var  Stream: TStream;
begin
 ADOTable1.Open;                 // Abrimos la tabla
 ADOTable1.Last;                 // Nos vamos a la última tupla para ver la ultima imagen añadida.
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

 end;

procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn);
var  Stream: TStream;
begin
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmRead); // Lo mismo que el anterior caso pero ahora en modo de escritura.
 jpg.LoadFromStream(Stream);     // Cargamos el BLOB al objeto JPEG
 Stream.Destroy;                 // liberamos...
 Image2.Picture.Assign(jpg);     // y asignamos la imagen al TPicture.

end;

procedure TForm1.Button3Click(Sender: TObject);
var bmp: TBitmap; Stream: TStream;
begin
 if not OpenPictureDialog1.Execute then Exit;
 jpg.LoadFromFile(OpenPictureDialog1.FileName);
 ADOTable1.Open;                  // Abrimos la tabla
 ADOTable1.Insert;                // Insertamos una nueva tupla
 Stream := ADOTable1.CreateBlobStream(ADOTable1.FieldByName('photo'), bmWrite); // Asignamos el BLOB a un stream
 jpg.SaveToStream(Stream);        // y guardamos la imagen como JPEG (convertido), en el stream
 Stream.Destroy;                  // liberamos.
 ADOTable1.Post;
end;

end.
Saludos
__________________
Siempre Novato
Reply With Quote
  #11  
Old 09/05/2016
genyus00 genyus00 is offline
Miembro
 
Join Date: Jun 2010
Posts: 31
Poder: 0
genyus00 Va por buen camino
Hola tengo una duda, respecto a la solucion dada.. En que formato se guarda la imagen en la base de datos? como una cadena stream o como una imagen?
Reply With Quote
  #12  
Old 30/05/2016
rastafarey's Avatar
rastafarey rastafarey is offline
Miembro
 
Join Date: Nov 2003
Posts: 927
Poder: 23
rastafarey Va por buen camino
Lo que se guarda en una imagen, asi de sencillo, que al guardarla la puedes transformar a .jpg o un formato de menor tamaño, por el tamaño y a la hora de recuperación no sea lento.

Enviado desde mi SM-G900H mediante Tapatalk
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Cargar imagen en Un TImage guardada en campo Blob o Objeto OLE en accsess gulder Varios 1 28/11/2008 18:54
guardar archivos en un campo blob a_f_g Firebird e Interbase 10 07/11/2008 20:46
Cargar imagen BLOB usando BDE leodenis784 Gráficos 3 12/09/2006 10:31
¿cargar un campo blob por codigo? fredo SQL 2 18/05/2005 14:56
guardar un fichero en un campo blob apicito Firebird e Interbase 2 02/03/2005 12:01


All times are GMT +2. The time now is 06:38.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi