Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-11-2011
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Alternativa para almacenar imagenes de la BD

Saludos a todos, hace poco hice una base de datos parecido a una agenda, pero incluia la foto, y se me hizo facil crear un campo BLOB para almacenar las fotos, y podriamos decir que todo hiba muy bien, las imagenes no rebasan los 500x500px o en tamaño los 200kb

Pero ahora que tengo como 500 contactos el problema es que se tarda mucho en cargarse la base de datos incluso a veces se bloquea, quisiera saber que me recomiendan, igual y crear otra tabla para las puras fotos o subirlas aparte a una carpeta del servidor, como cuando se hace en PHP ( del cual lo basico basico apenas lo conozco ) y despues se lee la ruta almacenada en un campo "Text"

Se aceptan sugerencias de preferencia la mas facil que duele menos
Responder Con Cita
  #2  
Antiguo 30-11-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si sale error es porque tienes algún error.
Deberías enseñarnos el código que usas para guardarlas y para leerlas y presentarlas, para poder ayudarte.
Ten en cuenta que esas 500 fotos no es nada, ahora mismo tengo aquí la BD de un cliente y tiene más de 3 millones de fotos de artículos, y no tiene ningún problema por ello.
Responder Con Cita
  #3  
Antiguo 30-11-2011
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Smile Buen Dia

Hola Casimiro Notevi

Gracias por tu respuesta, mir estoy probando los componentes UniDAC para conectar con MySQL,

Utilizo el componente de Conexion MySQL un TUnitDataSource que es la Alternativa para un DataSource, y un TUniTable para sustituir Al Componente Table

Solo coloco la direccion del servidor el usuario y contraseña para la base de datos y enlazo los componentes a la Tabla con la Agenda, Y utilizo los componentes DBEdit enlazados a los campos realmente nada fuera de lo normal y una DBGrid

Para abrir la tabla en el FormShow;

Código Delphi [-]
TUnitable.Open;

Y en el FormClose;

Código Delphi [-]
TUnitable.Close;

La base de datos la hice con un gestor de MySQL y asi carge las imagenes, realmente no me presenta ningun error cargar los datos y las imagenes en un TImage

Lo que pasa es que se tarda en cargar como 3 minutos la tabla, por lo que veo carga todos los datos de la base y despues los muestra.

Habra alguna forma de limitar el numero de regustros a cargar o tengo que cambiar al componente de TUniQuery?
Responder Con Cita
  #4  
Antiguo 30-11-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
El error es de diseño no de programación, a menos que sea una tabla muy pequeña casi nunca se debe hacer un "select * from nombre_tabla" sin restringir ni filtrar nada ya que te puede pasar lo que te está sucediendo. A Casimiro le pasaría exactamente lo mismo si pretendiera cargar los 3 millones de registros de su tabla.

Lo que puedes hacer es restringir el num de registros que vas a traer en cada consulta ya sea mediante filtros que pidas al usuario (de tal a tal fecha, de tal a tal numero) o bien paginando mediante un LIMIT

ejemplo, pensando en que vamos a paginar de 50 en 50 registros:

Código SQL [-]
select * from mitabla LIMIT 50
te trae los primeros 50 registros

Código SQL [-]
select * from mitabla LIMIT 50 OFFSET 50
te trae los siguientes 50 registros y así sucesivamente siempre vamos cambiando el valor de offset de 50 en 50.

Ojala pusieras el query que estas utilizando
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #5  
Antiguo 01-12-2011
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Thumbs up

AzidRain muchas gracias por tu sugerencia, pues si tienes razon estuve probando varias cosas y decidi cambiar a la UniQuery

Al principio me costo un poco de trabajo encontrar como relacionar entre los objetos de la form pero por fin lo logre

y para evitar que me pasara lo mismo que con la UniTable

Cambie el codigo de carga inicial

Código SQL [-]
Select * From MainDB

Por

Código SQL [-]
SELECT *
FROM MainDB
WHERE
MainDB.NOMBRE LIKE '% %' AND
MainDB.APELLIDOPATERNO LIKE '% %' AND
MainDB.APELLIDOMATERNO LIKE '% %' 
ORDER BY
MainDB.NOMBRE ASC,
MainDB.APELLIDOPATERNO ASC,
MainDB.APELLIDOMATERNO ASC

Para que me aparezca un registro en blanco y con eso el tiempo de carga de 4 minutos se redujo a unos cuantos segundos

Ahorita me estoy familiarizando con cargar solo el registro que necesito y poder actualizarlo... ahi la llevo

Pero ahora que me sugeriste cargar por lotes de 50 me parece mucho mejor

Solo que como le indico al componente o la Grid que cuando llegue al final de los 50 y quiero ver los siguientes 50 me los muestre o regresar a los anteriores 50, se agradece la ayuda
Responder Con Cita
  #6  
Antiguo 01-12-2011
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Recuerda que la grid solo es un componente visual, no tiene control real sobre los datos. El valor de 50 es solo un ejemplo, tu puedes experimentar y traer los que te resulten mas rápidos. Para hacer que funcione lo de la paginacion tienes que implementar algunas rutinas que lleven la cuenta de en que pagina estas para lanzar el query de acuerdo con los registros que necesites traer. En el el ejemplo que te puse tienes el primer query que lanzarías (digamos "la página 1") y el otro query te trae las páginas que siguen, de manera que puedes guardar en una variable en que página estas para saber que valor ponerle al offset que siempre será el valor de la página multiplicado por el número de registros por pagina

Código Delphi [-]
var pagina: integer;
     registros_por_pagina: integer;

Begin
  pagina := 1;
  registros_por_pagina:=50;
  offset_query := pagina * registros_por_pagina;
    
 //  Abrimos el primer query que seria el que te puse en el otro ejemplo

  
end;

Ya nada pones 2 botones "pagina anterior" y "página siguiente" y segun el caso incrementas o decrementas el valor de la variable página y recalculas el offset del query, lanzando la segunda query que te puse.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #7  
Antiguo 02-12-2011
erikmx erikmx is offline
Miembro
 
Registrado: nov 2007
Posts: 40
Poder: 0
erikmx Va por buen camino
Thumbs up Muchas Gracias

Muchas Gracias Azid, lo voy a probar

Por cierto estaba pensando cargar solo los registros por la fecha actual, voy a intentarlo y haber que sale porque se me ocurren 2 formas en la query meter una variable que se asigne al DateToStr(DATE) para que lo lea la query

O checar si hay alguna funcion en MySQL que lo pueda hacer solo que aqui no estoy en la maquina que tengo delphi

Ahora como el sistemita se supone que almacenara funcionara para varias personas que tendran su propia agenda, mi intencion ( claro tengo que pensar bien si poner una tabla por usuario o una sola con el nombre del usuario en cada registro para diferenciarlos ) es que pueda yo realizar una consulta para los registros de los X usuarios y me diga si un mismo telefono o conocido tienen en comun

Algo asi como lo que hacen algunas redes sociales que te dicen que quizas conoscas a esa persona, claro que con las agendas de pocos usuarios que van a trabajar con el sistemita pero cada uno tendra su agenda con conocidos o clientes y es para saber a quienes conocen en comun

Pero por mientras pues a darle a lo basico
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
Como almacenar imagenes Bracus SQL 2 26-05-2008 22:02:19
almacenar imagenes video y paginas html en interbase carasucia Conexión con bases de datos 0 15-11-2007 18:43:03
Se pueden almacenar imágenes en una BD en Access?? oracle Conexión con bases de datos 6 02-08-2005 17:11:54
Almacenar imagenes .jpg en SQLServer tannyk Varios 3 25-05-2005 23:57:29


La franja horaria es GMT +2. Ahora son las 08:50:41.


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