Ver Mensaje Individual
  #3  
Antiguo 28-05-2010
JCarlosas JCarlosas is offline
Miembro
 
Registrado: abr 2006
Ubicación: Habana. Cuba
Posts: 103
Reputación: 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