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

Respuesta
 
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
  #2  
Antiguo 23-09-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por anubis Ver Mensaje
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.
Gracias a ti, por compartirlo
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
¿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 05:51:32.


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