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 26-05-2010
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
FireBird, ZeosLib y JPEG en BLob

Hola a todos.
Estoy tratando de almacenar imagenes en un campo de una BBDD en FireBird.
He probado lo tipico para otras BBDD de almacenar dicha imagen en un campo de tipo BLOB y no me funciona.
Estoy usando FireBird 2.5 y ZeosLib.
No encuentro la manera que me funcione.
Queria saber si alguien ha logrado almacenar imagenes en algun campo de una tabla de FireBird usando ZeosLib.
Si lo ha logrado le agradeceria ver el fragmento de codigo lo mas detallado posible con el cual lo logro.
Saludos coridales.
JCarlos
Responder Con Cita
  #2  
Antiguo 26-05-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si haces una búsqueda en clubdelphi seguro que encuentras sobre ese tema porque se ha tratado en muchas ocasiones.
Independientemente que sea con zeoslib, ibx, fibplus, etc.
Aquí tienes un documento en formato pdf bastante completo que también te explica lo que necesitas sobre los campos blob.

Más o menos es algo así:
Código Delphi [-]
  Var TheStream : TMemoryStream;
Begin
  TheStream := TMemoryStream.Create;
  Try
    Image1.Picture.Bitmap.Savetostream(TheStream);
    With qryBlobInsert do 
    Begin
      Sql.Text := 'INSERT INTO EVENTS (EventNo,EVENT_PHOTO) VALUES (100,:ThePicture)';
      Params.Clear;
      Params.CreateParam(ftBlob,'ThePicture', ptInput);
      ParamByName('ThePicture').LoadfromStream(TheStream,ftBlob);
      ExecSQL;
    End;
  Finally
    TheStream.Free;
  End;
End;

Y en todo caso... explícanos qué es lo que no te funciona, cómo lo estás haciendo, etc.
Responder Con Cita
  #3  
Antiguo 28-05-2010
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Poder: 19
JCarlosas Va por buen camino
Hola. Muchas gracias por su rápida respuesta. Yo había probado con un código parecido a ese y no me funciono. Volví a probar con ese y tampoco me funciono pero quizás es por mi ignorancia respecto a la configuración de los parámetros.
Sin embargo tengo colegas que me han asegurado que el código que me muestras les ha funcionado con Delphi y otros componentes distintos a ZEOS.
Yo estoy trabajando con Lazarus y con Zeos.
Por suerte encontré otra forma también de hacerlo las cual les pongo debajo.

Código Delphi [-]
//Formato de la tabla
(*
CREATE TABLE BIOLIFE (
  ID INTEGER NOT NULL,
  CATEGORY VARCHAR(15) CHARACTER SET WIN1251 COLLATE WIN1251,
  GRAPHIC BLOB);
*)
Procedure TForm1.ButtonCargarImagenEnBBDDClick(Sender: TObject);
var
    fs : TFileStream ;
    blob: Tstream;
begin
   if odpict.Execute
     then Begin
            //Este ejemplo utiliza un TZtable (ztbBioLife), pero debe funcionar igual para TZQuery
            //Se supone que ztbBioLife esta posicionado en el registro adecuado.
            //Se puede usar tambien un TZQuery con una setencia Select * from table where id=xxx
            //Y despues de parado en el registro adecuado hacer lo que se muestra en el codigo.
            //Si esta utlizando un DBGrid. No necesita hacer ninguna otra modificacion al codigo
            //En este caso se insertara la imagen en el registro que este seleccionado en el dbgrid
            DM.ztbBioLife.Edit;
            blob := DM.ztbBioLife.CreateBlobStream(DM.ztbBioLife.FieldByName('graphic'), bmWrite);
            try
              blob.Seek(0, soFromBeginning);
              fs := TFileStream.Create(odpict.FileName, fmOpenRead or fmShareDenyWrite);
              try
                blob.CopyFrom(fs, fs.Size);
              finally
                  fs.Free
                end;
              finally
                blob.Free
               End;
          end;

End;

//*****************************************************************************
Procedure TForm1.DBGrid2SelectEditor(Sender: TObject; Column: TColumn;
  Var Editor: TWinControl);
var
   blob: TStream;
Begin
  blob := DM.ztbBioLife.CreateBlobStream(DM.ztbBioLife.FieldByName('graphic'), bmRead);
  blob.Seek(0, soFromBeginning);
  try
   Image2.Picture.LoadFromStreamWithFileExt(blob, '.jpg');
   Image2.Update;

  finally
    blob.Free;
    Image2.Update;
  end;
end;

Lo anterior fue probado con FireBird. Quiero ver si con postgressql funciona también, pero no encontre el tipo de campo BLob en Posgresql. Tengo que averiguar aun cual es el equivalente.

El ejemplo anterior supone que fue insertado el registro con anterioridad y que después se le va a insertar la imagen en el campo adecuado.
Muchas gracias por todo.
JCarlos

Última edición por JCarlosas fecha: 28-05-2010 a las 17:45:54.
Responder Con Cita
  #4  
Antiguo 08-04-2014
keine1lust keine1lust is offline
Miembro
NULL
 
Registrado: sep 2012
Posts: 17
Poder: 0
keine1lust Va por buen camino
solución es que se debe incluir en la unidad db

Buenas la solución es que se debe incluir en la unidad db para que funciones con lazarus y con eso el ejemplo anterior que muestra la guia de zeos funciona perfecto y para mi parecer es bastante sencilla
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
Error al guardar Jpeg en Campo Blob El_Perrito Gráficos 6 28-04-2012 20:06:38
Blob en Firebird subzero PHP 0 29-02-2008 06:25:26
Blob´s en firebird pzhero Firebird e Interbase 6 02-05-2004 17:39:47
Problemas alguardar imagenes jpeg y gif en un campo blob Flycket Firebird e Interbase 3 20-02-2004 09:29:02


La franja horaria es GMT +2. Ahora son las 09:10:58.


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