Ir al contenido


Foto

Campo Para foto en firebird


  • Por favor identifícate para responder
5 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 10 febrero 2010 - 10:16

Hola a todos

Utilizo firebird 2.1


Me gustaria saber cual es la mejor opcion para manejar fotos en un formulario. Habia oido o leido que no era bueno poner un campo foto en una tabla porque ralentiza el funcionamiento de la base de datos y hace mas pesadas las consultas.

Preguntas:

-El campo debe ser blob, pero que mas debo hacer para declarar un campo que va a ser usado para fotos.
-Habia leido que habia que crear un campo adicional para guardar el formato de la foto.
-como insertar la foto a la base de datos.
-Deberia crear una tabla independiente  solo para fotos y tener una llave foranea o campo llave.
- con que componente debo ver las fotos en mi form y si con el puedo insertar nuevas fotos.

Que debo saber y que no debo hacer para usar correctamente fotos en mi base de datos

gracias de antemano a todos.
  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 10 febrero 2010 - 10:36

Hola Luk,
La decisión de si o no almacenar fotos en una base de datos depende de muchas cosas. No basta con descartarla por el simple hecho de que se hacen más pesado.

La respuesta es un DEPENDE. En ocasiones es bueno, y en otras no.

Naturalmente, cuanto más fotos y más grandes sean más pesado será la base de datos. Y si, puede afectar un poco el rendimiento de las consultas, pero no exageradamente.

Respecto a tus preguntas:
1. No debes hacer demasiado, cuanto mucho podrías indicarle el SUBTYPE.
2. No necesariamente. Firebird solito se encarga de como interpretar adecuadamente el formato. Sólo te podría ser útil este campo cuando en tu aplicativo se emplean diversos formatos y debes aplicar la conversión adecuada.
3. DEPENDE. Deberías analizar objetivamente el diseño de tu base de datos y como están establecidas las relaciones. NO hay una respuesta exacta a esta pregunta.
4. Puedes verlas con el TImage o incluso con el TDBImage (aunque tengo entendido que éste solo funciona con BMPs... no estoy totalmente seguro).

Para guardar y/o leer puedes hacer uso de TStreams, o directamente del campo... depende de como estés llevando la programación. Necesitaríamos más información sobre este punto.

No termino de comprender a que viene la 5ta pregunta. Por favor explícate.

Esto es en forma breve, si es necesario ser más detallista sugiero que a medida que vayas avanzando y tengas las dudas las vayamos tratando.

Saludos,

  • 0

#3 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 10 febrero 2010 - 11:40

-El campo debe ser blob, pero que mas debo hacer para declarar un campo que va a ser usado para fotos.


Sí, un BLOB es lo adecuado. Pero también podría darte una solución alterna, que te consignaré adelante.

-Habia leido que habia que crear un campo adicional para guardar el formato de la foto.


Nope. Las versiones adelante de Firebird 1.5.4 hacen una maravilla el guardar una imagen o cualquier objeto en un campo de la tabla.

-como insertar la foto a la base de datos.


Con un vil INSERT, como cualquier dato.

-Deberia crear una tabla independiente  solo para fotos y tener una llave foranea o campo llave.


Es lo recomendable. Tener tus datos texto y objetos en la misma tabla, baja horrorosamente el rendimiento de las búsquedas.

- con que componente debo ver las fotos en mi form y si con el puedo insertar nuevas fotos.


Con un TImage es más que suficiente. De hecho, es el único que yo te recomendaría.

Ahora, una solución que me dió un PHPero. Guardar en una carpeta especial las imágenes y en cada registro la ruta y nombre de cada imagen. Las búsquedas se agilizan mucho, tu base de datos no crece en exceso, es más manejable y sobre todo, previene que se corrompa el campo que contiene al objeto y termines con un plato de spaghetti de bits donde antes había una foto de Monica Belucci.
  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 11 febrero 2010 - 03:36

Totalmente de acuerdo con los compañeros. La costumbre de guardar documentos como fotos, aparte de la base de datos, empezó con otras bases de datos, como los primeros SQL Server, con los que era tremendamente incómodo e ineficiente el trabajar con campos BLOB.

Por eso tardé mucho en utilizar BLOB's con Firebird, hasta que me di cuenta de que la gente que los recomendaba tenía razón: con Firebird no tienes esos problemas. Los campos BLOB apenas van a tener el menor impacto sobre el rendimiento de la base de datos, y son muy sencillos de utilizar. Así pues te recomiendo que no te compliques y utiliza un campo Blob.

Ni siquiera te recomiendo que crees una tabla independiente, exclusiva para los BLOB's. Puedes poner la imagen directamente en la tabla del cliente/producto/... con el resto de datos. Simplemente acuérdate de que tienes ese campo, y por lo tanto, si vas a mostrar los datos en una grid, no hagas un SELECT * FROM XXX, puesto que estás cargando ese dato para todos los registros, y eso es un desperdicio de tiempo para la consulta y memoria, puesto que no lo muestras. En mi experiencia, si en tu consulta solo recuperas los campos estrictamente necesarios, no vas a notar ninguna diferencia con que la tabla tenga un campo Blob muy grande, o no lo tenga.

Donde vas a encontrar diferencias al utilizar BLOB's es en el tamaño de la base de datos, ahora te va a crecer mucho, puesto que lleva todas las fotos dentro. Así que tienes que elegir, tiene sus ventajas e inconvenientes. INCONVENIENTES : Tardas mucho más en hacer un Backup, copiar la base de datos, ... VENTAJAS : En un Backup de la Base de Datos tienes absolutamente todos tus datos. No hace falta que además hagas copias de una carpeta en el servidor donde tienes tus archivos de fotos, pdf's, etc. ...

Saludos.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 11 febrero 2010 - 06:45

Saludos.

1.- El campo blob debe ser:

sql
  1. BLOB SUB_TYPE 1 SEGMENT SIZE 100



2, 4.- Todo depende de que quieras lograr, por ejemplo si no te interesa que las imágenes se repitan y es sólo una imagen por registro pues con que tengas un campo en la misma tabla trabaja de manera fenomenal; ahora bien si quieres tener enlazado varias imágenes a un registro pues una tabla adicional te servirá.  En cuanto al formato Firebird se maneja bien con esto, creo que todo dependerá el componente.

3.- TBlobField(CAMPO).LoadFromFile es la manera más común, también tienes la indicada por Delphius para cargarlo desde un Stream.

5.- Con un simple Image debería de funcionar correctamente.
  • 0

#6 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 12 febrero 2010 - 05:44

Gracias a todos por sus respuestas e indicaciones, las cuales son muy claras. voy a trabajar en esto y les contare como va funcionando.

Gracias de nuevo.
  • 0




IP.Board spam blocked by CleanTalk.