Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > Lazarus, FreePascal, Kylix, etc.
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-09-2012
Avatar de anubis
anubis anubis is offline
Miembro
 
Registrado: mar 2007
Posts: 863
Poder: 18
anubis Va por buen camino
minitutorial como leer y escribir campos blob cualquiera

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); //Asignamos el archivo abierto al stream blob.
    ZQUERY1.INSERT; // Insertamos un nuevo registro.
   STREAM:=zquery1.CreateBlobStream(zquery1.FieldByName('factura'), bmWrite); //Preparamos el campo blob para escritura.
   STREAM.CopyFrom(BLOB,BLOB.Size); //Copiamos el archivo que hemos abierto al Stream para que el query lo guarde.
   ZQUERY1.FieldByName('TIPO').ASSTRING:=RIGHTSTR(OPENDIALOG1.FileName,3); //guardo la extensión del archivo.
   BLOB.DESTROY; 
   STREAM.DESTROY;
   ZQUERY1.Post; //guardo el registro.
 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; // Se extrae la extensión del archivo guardado y se le añade a un nombre temporal (archivo).
     blob := zquery1.CreateBlobStream(zquery1.FieldByName('factura'), bmRead); //asignamos al stream el blob
   try
    blob.Seek(0, soFromBeginning); //nos posicionamos al principio del stream (sino lo pongo no funciona bien).
    with TFileStream.Create(TIPO, fmCreate) do //preparamos el archivo para guardar posteriormente.
      try
        CopyFrom(blob, blob.Size) //copiamos del stream quedando guardado como archivo.extension.
      finally
        Free
      end;
  finally
    blob.Free
   end;
  ShellExecute(0, 'open', PChar(TIPO), Nil,Nil, SW_SHOWNORMAL); // abrimos externamente con el programa predeterminado.
  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.
Responder Con Cita
 



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
¿Delphi XML como escribir leer NameSpaces? JXJ Varios 15 07-03-2017 03:19:44
Delphi 2010 + MySql, Como Leer y Escribir? martini002 Conexión con bases de datos 8 15-08-2012 19:52:57
cómo leer y escribir variables en un SWF? (as3) kokorini Varios 2 06-12-2007 23:18:13
Como Leer y escribir en txt con flash CamiloVI HTML, Javascript y otros 13 06-10-2005 17:45:08
Como Leer y escribir puertos Seriales sandragm API de Windows 1 28-04-2004 05:42:00


La franja horaria es GMT +2. Ahora son las 00:44:49.


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