Despues de haber batallado y por fin resuelto gracias a vosotros, os pongo un minitutorial del cómo de hace.
No se si es la mejor manera pero funciona.
Uso lazarus y sqlite3 y esta realizado en windows 7.
Para guardar un archivo cualquiera en campo blob de la base de datos:
Código Delphi
[-]
PROCEDURE TFORM1.ANADIRBLOB;
VAR
BLOB:TSTREAM;
STREAM:TSTREAM;
BEGIN
if not OpenDialog1.Execute then Exit;
BLOB:=TFILESTREAM.Create(OPENDIALOG1.FileName,FMOPENREAD); ZQUERY1.INSERT; STREAM:=zquery1.CreateBlobStream(zquery1.FieldByName('factura'), bmWrite); STREAM.CopyFrom(BLOB,BLOB.Size); ZQUERY1.FieldByName('TIPO').ASSTRING:=RIGHTSTR(OPENDIALOG1.FileName,3); BLOB.DESTROY;
STREAM.DESTROY;
ZQUERY1.Post; end;
Para leer un archivo blob desde un registro de la base de datos.
Código Delphi
[-]
PROCEDURE TFORM1.LEERBLOB;
VAR
BLOB:TSTREAM;
TIPO:STRING;
BEGIN
TIPO:='ARCHIVO.'+ZQUERY1.FIELDBYNAME('TIPO').ASSTRING; blob := zquery1.CreateBlobStream(zquery1.FieldByName('factura'), bmRead); try
blob.Seek(0, soFromBeginning); with TFileStream.Create(TIPO, fmCreate) do try
CopyFrom(blob, blob.Size) finally
Free
end;
finally
blob.Free
end;
ShellExecute(0, 'open', PChar(TIPO), Nil,Nil, SW_SHOWNORMAL); END;
La verdad no se si es la mejor opcion para hacer estas cosas, pero funciona.
Lo publico porque he visto que bastantes foreros tienen problemas con estos campos.
Un saludo y gracias a todos.