Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #8  
Antiguo 19-04-2015
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Yo antes no usaba campos blob (no puedes buscar en su interior, pesan más, etc), optaba por guardarlos fuera de la BBDD, pero eso también tiene sus inconvenientes (alguien puede borrar el archivo, debes compartir la carpeta de facturas en la red para que sean accesibles a todos los puestos, con la inseguridad que genera; las copias de seguridad tienes que incluir más archivos, etc).

Para eficiencia no hay problema con los campos Blob, porque cuando haces un select, lo único que se trae es el ID del campo Blob (es decir, no se trae el contenido del campo). Firebird guarda el contenido del campo en otra página de la Base de datos, solo se accede cuando fuerzas la lectura del contenido (por eso la mayoría de grids te ponen el texto (blob), para no realizar la búsqueda.

Por supuesto la BBDD pesará mucho más, por los campos blob, pero si tu aplicación los necesita, al final el espacio se ocupa igual (BBDD + ficheros).

A remarcar que se puede partir el archivo de BBDD llegado cierto tamaño (se especifica al crear la BBDD y ya Firebird se ocupa del resto), aunque si no usarás FAT (con su límite de 4 GB) y el disco duro es de 1 TB, pues quizás ni tengas que valorarlo.


Si los campos blob están definidos como subtipo texto, desde Firebird 2.0 puedes hacer un select buscando en su interior, algo tipo:
Código SQL [-]
select campoBlob where campoBlob containing 'pepe'
Firebird ya hace el moldeo de tipos de Blob a string automáticamente.

Si son binarios (como los pdf), tienes que andar con loadfromstream, savetoStream y Assign (no hay drama).

Cargar en un campo desde Archivo (el control de errores lía un poco el código... pero en realidad solo son 3 líneas):
Código Delphi [-]
procedure cargaFicheroEnCampo( fichero : TFilename; campo : TField );
var
  fs: TFileStream;
begin 
  if not fileExists(fichero) then raise exception.Create(Format( 'el fichero %s no Existe', fichero ));
  fs := TFileStream.Create(fichero, fmOpenRead) ; // el segundo parámetro consulta la ayuda.
  try 
    try 
        campo.loadFromStream(fs)
    except:
        ShowMessage(' Error al leer del fichero');
        raise ; 
    end;
    guardar la tabla que pertenece el campo!!  
  finally
    fs.Free; 
  end;
end;

Si el archivo es una foto y lo tienes en un TImage, en Image1.Picture tienes el SaveToStream y LoadFromStream

Y si necesitas cargarlo en memoria, para después transferirlo, usas un TMemoryStream:
Código Delphi [-]
var 
  fm : TMemoryStrem; 
begin
  fm := TMemoryStream.Create;
  image1.Picture.SaveToStream(fm);
  tabla1CampoBlob.LoadFromStream(fm);  //  campo persistente en el dataset correspondiente.
  tabla1.Post; 
  fm.free;
end;
Si un fichero es texto plano, tienes el TStringStream, todos son desdendientes de TStream y funcionan igual.

Saludos!
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 19-04-2015 a las 18:32:04.
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
DB firebird meter y sacar texto e imagenes a campos blob , con delphi JXJ Firebird e Interbase 1 11-10-2010 12:52:34
Error al insertar un nuevo registro FGarcia Firebird e Interbase 3 19-07-2008 23:01:25
Como Insertar Registro Nuevo ENTRE los demás Registros???? AGAG4 Conexión con bases de datos 1 18-01-2006 04:03:45
Insertar Nuevo Registro perillan Conexión con bases de datos 3 24-04-2005 15:30:23
Error al insertar nuevo registro Humberto Firebird e Interbase 13 06-05-2004 23:45:01


La franja horaria es GMT +2. Ahora son las 19:27:54.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi