Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Campos Blob con imagenes y stringgrid

Hola, buenas tardes... Tengo una situación... Tengo un sistema externo que trabaja con MySql y en una tabla se guarda la imagen capturada en un campo blob. Lo que necesito hacer es procesar esa tabla poniendo los datos en un stringgrid para despues volcar esos datos del stringgrid a la base de datos central que es en firebird donde tambien tengo un campo blob. He probado copiar en el stringgrid el contenido del campo blob como string y pasarlo a la base de datos como blob, pero luego al querer mostrar la imagen da error.
Agradezco si me dan una mano.
Saludos!!
Responder Con Cita
  #2  
Antiguo 09-12-2016
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por rruffino Ver Mensaje
He probado copiar en el stringgrid el contenido del campo blob como string y pasarlo a la base de datos como blob, pero luego al querer mostrar la imagen da error.
Pero, ¿cómo podemos ayudarte si no pones ni el código que usas ni el mensaje de error que te da?

Lo único que puedo decirte es que para pasar el contenido de un dato de la base en MySQL a Firebird no necesitas un StringGrid de intermediario. Los campos BLOB se leen y escriben con streams. Por ejemplo, puedes usar un TMemoryStream para leer el contenido del campo de MySQL usando el método SaveSTotream del campo BLOB y luego LoadFromStream del otro campo para leer el contenido del stream al campo de FireBird. Algo así:

Código Delphi [-]
MySQLBlob.SaveToStream(Stream);
Stream.Seek(0, soFromBeginning);
FirebirdBlob.LoadFromStream(Stream);

LineComment Saludos
Responder Con Cita
  #3  
Antiguo 09-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Respuesta

Hola Roman, gracias por la respuesta... Necesito el stringgrid intermedio porque es ahi donde el usuario del sistema decide que información se pasa a la base de datos central, por eso mi necesidad de almacenar el campo blob en el mismo stringgrid al momento de la lectura de la tabla mysql. Voy a probar lo de los metodos que me comentas y aviso.
Gracias!
Responder Con Cita
  #4  
Antiguo 09-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Prueba

Mira, entre otras cosas he probado esto, dond Zquery_lectura es mi origen de donde tengo la imagen y quiero pasarla a mi tabla. Copia algo pero no lo puedo ver como imagen.

Código Delphi [-]
    bs:=TMemoryStream.Create;
    blobF:=TBlobField(DM.ZQuery_lectura.FieldByName('FOTO'));
    blobF.SaveToStream(bs);
    bs.Position:=0;

    with(DM.ManejaDatos)do
      begin
         SQL.Clear;
         SQL.Add('update rel_concepto_suministro set imagen=:ima where id_relacion=1');
         ParamByName('ima').AsBlob:=blobF.AsVariant;
         Open;
      end;

Gracias!!
Responder Con Cita
  #5  
Antiguo 10-12-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

La verdad es que no sé si comprendí realmente que es lo que buscas...
Creo haber entendido que tenes un query origen (donde está la imágen) y otro de destino donde se copiará ("mi tabla").

Entonces, si no inferí mal:
Código Delphi [-]
...
var
  Stream : TStream;
begin
  Stream := TMemoryStream.Create;
  try
    TBlobField( qryOrigen.FieldByName( 'IMAGEN' ) ).SaveToStream( Stream );
    Stream.Seek( soFromBeginning, 0 );
    qryDestino.Close;
    qryDestino.SQL.Text := 'UPDATE REL_CONCEPTO_SUMINISTRO SET IMAGEN = :IMAGE WHERE ID = :ID';
    qryDestino.ParamByName( 'ID' ).AsInteger := numero_id ; // ID de la tabla destino
    qryDestino.ParamByName( 'IMAGEN' ).LoadFromStream( Stream, ftBlob  );
    qryDestino.ExecSQL;
  finally
    Stream.Free;
  end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 10-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Respuesta

Hola!, gracias por la respuesta.... En realidad estoy intentando lo que has entendido, pero al no resultar hacerlo, lo que estoy intentando hacer para ver donde tengo el problema es tratar de leer de la base de datos origen (SQLlite) y pasar la imagen a un compronente TImage, con el siguiente código:

Código Delphi [-]
                    Stream:=TMemoryStream.Create;
                    TBlobField(DM.ZQuery_lectura.FieldByName('foto')).SaveToStream(Stream );
                    Stream.Seek(soFromBeginning, 0);
                    jpg:=TJPEGImage.Create;
                    Image10.Picture.Bitmap.LoadFromStream(Stream);
                    Stream.Free;

Utilizo Delphi 7, y los componentes Zeos. Al momento de la ejecución tira el error "Stream read error", como si el stream no tuviera dato alguno.
Mas alla del error, la imagen la puedo ver cargada en campo foto desde el gestor, es una imagen PNG.
Aguardo su ayuda compañeros, esto me esta secando la cabeza.
Gracias!!
Responder Con Cita
  #7  
Antiguo 10-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Problema encontrado

Estuve leyendo como loco, y me entró la duda acerca del funcionamiento de los componentes Zeos, y para probar he bajado el de LiteDac, Eureka!! ese mismo código que he pegado en el mensaje anterior me funciona perfecto. Alguien sabe si eso del Zeos se puede solucionar, aparentemente no genera el steam de datos...
Saludos!
Responder Con Cita
  #8  
Antiguo 10-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Problema Resuelto

Luego de mil pruebas, baje la version 7 de los componentes Zeos, instale esos y el código que anda dando vuelta por todos los foros funciona correctamente.
Gracias por la ayuda a todos los interesados.
Saludos!!!
Responder Con Cita
  #9  
Antiguo 13-12-2016
rruffino rruffino is offline
Miembro
 
Registrado: dic 2004
Ubicación: Berrotaran, Cordoba - Argentina
Posts: 215
Poder: 20
rruffino Va por buen camino
Otro Problema

Buenas tardes.... siguiendo con el hilo, he podido al final poder obtener la imagen del campo BLOB y guardarla en disco usando:
Código Delphi [-]
                    MS:=TStringStream.Create('');
                    TBlobField(DM.ZQuery_lectura.FieldByName('foto')).SaveToStream(MS);
                    MS.Position:=0;
                    ImagenTablet.Picture.Graphic:= nil;
                    ImagenTablet.Picture.Graphic:= TPNGGraphic.Create; 
                    ImagenTablet.Picture.Graphic.LoadFromStream(MS);
                    ImagenTablet.Picture.Graphic.SaveToFile('C:\Imagen.png');

hasta aca todo bien... grabo la imagen y vía explorador de windows la puedo ver con doble click, editarla con el paint por ejemplo....
Pero lo que quiero ahora es cargar esa imagen en un TImage de la sieguiente manera:
Código Delphi [-]
      foto:='C:\Imagen.png';
      Stream := TMemoryStream.Create;
      try
        IF FileExists(FOTO)THEN
          Stream.LoadFromFile(foto);
        Stream.Position := 0;
        ImagenTablet.Picture.Graphic:= nil;
        ImagenTablet.Picture.Graphic:= TPNGGraphic.Create;
        ImagenTablet.Picture.Graphic.LoadFromStream(Stream);
      finally
        Stream.Free;
      end

Cuando lo ejecuto, tengo el hermoso error:
CANNOT LOAD IMAGE, INVALID OR UNEXPECTED PNG IMAGE FORMAT

Al momento de exportar tambien he probado de exportarlo con formato JPG y en ese caso obtengo el error
JPG ERROR #54

Agradezco cualquier sugerencia.
Mil gracias!!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Compatibilidad de imagenes en campos Blob ElMug Conexión con bases de datos 54 13-05-2017 01:46:58
TClienDataSet Problemas con Campos Blob y Campos Calculados LEVV Conexión con bases de datos 2 11-05-2012 02:25:43
DB firebird meter y sacar texto e imagenes a campos blob , con delphi JXJ Firebird e Interbase 1 11-10-2010 12:52:34
Imagenes en campos BLOB y Delphi 7 s_dominguez Varios 0 15-02-2005 18:08:01
Imagenes en Campos Blob subzero Firebird e Interbase 11 26-11-2004 18:27:59


La franja horaria es GMT +2. Ahora son las 20:06:51.


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