Ver Mensaje Individual
  #5  
Antiguo 19-02-2011
Avatar de burgosrodas
burgosrodas burgosrodas is offline
Miembro
 
Registrado: sep 2008
Ubicación: Colombia
Posts: 24
Reputación: 0
burgosrodas Va por buen camino
Solución guardando archivos en postgres campo BYTEA

Muchas gracias por tu ayuda
pero intenté creando la tabla con el campo 'lo' y me arroja lo siguiente

Código SQL [-]
ERROR:  no existe el tipo «lo»
LINE 4:         picture lo,
                        ^

********** Error **********

(utilizo Delphi XE, ZeosLib, y postgres 9.02)
seguí investigando en el foro y me encontré con unas pistas muy practicas
como la siguiente
(obviamente hablo pascal, tu ya lo traducirás a C)

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
stream:TMemoryStream;
begin
    if fileexists('C:\Archivo.dat') then
      begin
      try
       stream:=TMemoryStream.Create;

         stream.LoadFromFile('C:\Archivo.dat');

            ZQuery1.SQL.Add('INSERT INTO temp(imagen) VALUES(:ARCHIVO);');
            ZQuery1.ParamByName('ARCHIVO').LoadFromStream(stream,ftBlob);
            ZQuery1.ExecSQL;

      finally

            stream.Free;
      end;

      end;
end;


funciona siempre y cuando el campo declarado en la base de datos postgres sea de tipo BYTEA, y se hubiese cambiado la configuración en el archivo "postgresql.conf" del postgres, pues hubo un cambio en la forma en que se comporta este campo de la versión 8 a la 9 de postgres, y el cambio que hay que realizar es el siguiente:

buscar la linea comentada en el postgresql.conf
# bytea_output = 'hex'
y cambiarla por
bytea_output = 'escape'

si no se realiza este cambio, el campo por defecto entregara nuestros datos en hexadecimal, asi los hubiesemos guardado en binario.(esto lo averigüe despues de horas de documentación, pues casi no vi documentación al respecto) lo publico para quienes tienen el mismo problema
aclaro que es para postgres 9.02
ahh!!
y para leer el dato almacenado o guardarlo...
un simple casting
Código Delphi [-]
...
TBlobField(ZQuery1.FieldByName('imagen')).SaveToFile('C:\archivo.jpg');
...

muchas gracias por tu información y tu ayuda KATODO
saludos desde Colombia
Responder Con Cita