Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-07-2017
rmora03 rmora03 is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
rmora03 Va por buen camino
Cargar Imagen hacia tImage desde Base de datos

Cita:
Empezado por Caral Ver Mensaje
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
Responder Con Cita
  #2  
Antiguo 25-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Se supone que has añadido jpeg al uses:
Código:
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
Responder Con Cita
  #3  
Antiguo 28-07-2017
rmora03 rmora03 is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
rmora03 Va por buen camino
Claro Casimiro, el uses del jpeg esta añadido.
Responder Con Cita
  #4  
Antiguo 28-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Puede que no sea un jpg, aunque su extensión sea jpg.
Responder Con Cita
  #5  
Antiguo 29-07-2017
rmora03 rmora03 is offline
Registrado
 
Registrado: feb 2008
Posts: 7
Poder: 0
rmora03 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Puede que no sea un jpg, aunque su extensión sea jpg.
Claro yo mismo cree el archivo jpg.
Lo probé con un archivo bmp y otro jpg. Claro está que modifiqué el código para cada tipo de archivo.
No si tienes otra manera de hacerlo para intentarlo.

Saludos
Responder Con Cita
  #6  
Antiguo 29-07-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.052
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Desde aquí no podemos hacer mucho más, yo comprobaría con otro jpg, vaya a ser que ese esté mal.
Responder Con Cita
  #7  
Antiguo 03-08-2017
Avatar de GustavoCruz
GustavoCruz GustavoCruz is offline
Miembro
 
Registrado: jul 2006
Ubicación: Sampués Sucre (Colombia)
Posts: 293
Poder: 18
GustavoCruz Va por buen camino
Intenta de esta manera
en el private
Código Delphi [-]
ms: TMemoryStream;

Para cargar la imagen
Código Delphi [-]
if AbreImagen.Execute then
  begin
    FotoUsuario.Picture.LoadFromFile(AbreImagen.FileName);
    ms := TMemoryStream.Create;
    try
      ms.Position := 0;
      FotoUsuario.Picture.SaveToStream(ms);
      FotoUsuario.Visible := True;
    except
      FotoUsuario.Picture := nil;
      ms.Free;
    end;
  end;

y esto para guardar

Código Delphi [-]
  
begin    
  try
    with qEjecutar do
    begin
      Close;
      SQL.Clear;
      SQL.Add('update or insert into protable(proidentidad, protipo, ' +
        'proclave, prousuario, pronombre, prodireccion, protelefono, ' +
        'proespecialidad, prorm, firma, procc, abrevia)values(''' +
        usIdentidad.Text + ''', ''' + IntToStr(usOpciones.ItemIndex) + ''', '''
        + usConfirmar.Text + ''', ''' + usUsuario.Text + ''', ''' +
        usNombres.Text + ''', ''' + usDireccion.Text + ''', ''' +
        usTelefonos.Text + ''', ' + Codigo_ESP + ', ' + rm + ', :l1, ''' +
        usIdentidad.Text + ''', ''' + usAbreviatura.Text +
        ''')matching(proidentidad, protipo)');
      ParamByName('l1').DataType := ftGraphic;
      ParamByName('l1').LoadFromStream(ms, ftGraphic);
      ExecSQL;
      fDatos.Transaccion.CommitRetaining;

      MsgBox(Titulo, 'Datos guardados satisfactoriamente...', mtInformation,
        ['Aceptar'], 0);
      Close;
    end;
  finally
    ms.Free;
  end;

Saludos...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cargar imagen en Un TImage guardada en campo Blob o Objeto OLE en accsess gulder Varios 1 28-11-2008 18:54:43
guardar archivos en un campo blob a_f_g Firebird e Interbase 10 07-11-2008 20:46:28
Cargar imagen BLOB usando BDE leodenis784 Gráficos 3 12-09-2006 10:31:07
¿cargar un campo blob por codigo? fredo SQL 2 18-05-2005 14:56:59
guardar un fichero en un campo blob apicito Firebird e Interbase 2 02-03-2005 12:01:54


La franja horaria es GMT +2. Ahora son las 17:54:20.


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