Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-07-2008
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 20
Chogo Va por buen camino
Question ADOTable y ACCESS lentos al cargar

Hola.

Estoy usando access 2003 y ado en Delphi 7. corriendo en WinXP tengo un programa que ya tiene cierta cantidad de datos. pero veo que se pone muy lento en las maquinas cliente al cargar los adotable. el sistema corre en una red de cable utp y la distancia es pequeña solo son tres computadoras conectadas.

Eh estado viendo la propiedad maxrecords de los adotable para redusir el tiempo de carga. para que no me cargue todos lo registros. pero parece que no funciona esta propiedad.

Que pudeo hacer para mejor el rendimiento en la carga de los adotable

Última edición por Chogo fecha: 04-07-2008 a las 21:30:47.
Responder Con Cita
  #2  
Antiguo 04-07-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Yo usaria un AdoQuery con TOP para limitar la cantidad de registros.
Saludos
Responder Con Cita
  #3  
Antiguo 04-07-2008
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 20
Chogo Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Yo usaria un AdoQuery con TOP para limitar la cantidad de registros.
Saludos
Gracias por tu pronta repuesta pero lo que pasa es que son como unos 40 adotables. No puedo cambiarlos a esta hora del partido.

Si hicera eso como haria con los formulario maestro-detalle los adoquery no estan diseñados para eso. habria que programar mas.
Responder Con Cita
  #4  
Antiguo 05-07-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
¡Hola!

No te preocupes, lo que experimentas ahora es parte de un proceso cotidiano de aprendizaje en el que terminas comprendiendo por qué muchas veces es mejor utilizar bases de datos cliente-servidor y por qué en la mayoría de los casos no tiene lógica alguna leer de la base de datos todos los registros de una tabla.

La lentitud que presenta ahora tu programa es normal debido a la gran cantidad de bytes que estás "jalando" de la base de datos (los procesadores y los cables de red tienen sus límites ).

Cita:
Empezado por Chogo Ver Mensaje
La mas grande tiene 279,133 registros. ¿ creen que son demasidos registros para no usar Adotable?
Depende para qué uses ese componente tabla. Si es para imprimir un listado de todos esos 279133 registros, o bien para exportar, vaciar o transmitir toda la tabla a donde se requiere por parte de otro sistema, podría tener sentido. Pero si sólo la abres para captura y, durante dicha sesión, tu aplicación emplea solamente un porcentaje menor de todos esos registros, cargar en memoria esa gran mayoría que no se utiliza para nada es un enorme desperdicio de recursos (tiempo).

Debes acostumbrarte a ver a las bases de datos como un almacén y no como un remolque, no puedes andar llevando la bodega de aquí para allá, como si nada. Las aplicaciones deben tomar de la base de datos solamente la información que requieren, grabando en ellas resultados de sus procesos.

Para permitirle al usuario navegar en una tabla y capturar información en ella, generalmente hago una apertura de la misma trayéndome tan solo las últimas 100 filas que fueron modificadas. Y cuando el usuario desea ver otros registros, le proporciono mecanismos de búsqueda que utilizan un "data set" alterno parametrizado e integran los resultados al listado que ya tengo abierto. Para esto es importante utilizar componentes que te permitan discriminar registros en la extracción de la base de datos que realizan internamente. Casi* ningún componente "Table" te permite hacer esa discriminación, por lo que usualmente se aconseja la alternativa de los componentes "Query", ya que en estos colocas una sentencia SQL Select que lleva condiciones en su cláusula Where para "sacar" de la base de datos sólo ciertos registros.

Cita:
Empezado por Chogo Ver Mensaje
Gracias por tu pronta repuesta pero lo que pasa es que son como unos 40 adotables. No puedo cambiarlos a esta hora del partido.

Si hicera eso como haria con los formulario maestro-detalle los adoquery no estan diseñados para eso. habria que programar mas.
Todo error de diseño tiene sus consecuencias, Chogo. Pero para eso están estos foros . Vayamos por partes:

Por un lado los componentes Query pueden establecerse en relaciones maestro-detalle. En la Red y en estos mismos foros podrás encontrar muchos ejemplos.

Por otra parte, si tu aplicación corresponde a las características típicas de un programa de gestión, es muy probable que sólo unas cuantas tablas tengan miles de registros (¿o acaso las 40 almacenan casi 300 mil?). Podrías empezar por convertir a TADOQuery los cuatro o cinco TADOTable más críticos, como medida de alivio transitorio. Después tendrás más tiempo para revisar tu proyecto a profundidad y plantearte seriamente el usar una base de datos más adecuada (cliente-servidor, como Firebird, por ejemplo).

Espero te resulte orientadora mi aportación.

Un abrazo selectivo.

Al González.

*Por mi experiencia con los componentes IBX, sé que TIBTable maneja la carga de registros de manera eficiente al establecer un valor en su propiedad Filter antes de la apertura (con Filtered en True, desde luego). Internamente se ejecuta una consulta Select con cláusula Where, donde ésta lleva como condiciones el texto de la propiedad Filter. No conozco a fondo el componente TADOTable, pero dudo que haga lo mismo.
Responder Con Cita
  #5  
Antiguo 08-07-2008
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 20
Chogo Va por buen camino
Cita:
Empezado por Al González Ver Mensaje
¡Hola!

No te preocupes, lo que experimentas ahora es parte de un proceso cotidiano de aprendizaje en el que terminas comprendiendo por qué muchas veces es mejor utilizar bases de datos cliente-servidor y por qué en la mayoría de los casos no tiene lógica alguna leer de la base de datos todos los registros de una tabla.
Realmente si usare una base de datos cliente-servidor para mis proximos proyectos y por otro lado, si necesito hacer unos arreglos de diseño de mi programa. esto me paso por no tener la experiencia necesaria. aveces los manuales de principiantes no te abren los ojos a problemas futuros como el rendimiento de la aplicacion. esto prueba que la experiencia es comprada.
Responder Con Cita
  #6  
Antiguo 04-07-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Chogo Ver Mensaje
Hola.

Estoy usando access 2003 y ado en Delphi 7. corriendo en WinXP tengo un programa que ya tiene cierta cantidad de datos. pero veo que se pone muy lento en las maquinas cliente al cargar los adotable. el sistema corre en una red de cable utp y la distancia es pequeña solo son tres computadoras conectadas.

Eh estado viendo la propiedad maxrecords de los adotable para redusir el tiempo de carga. para que no me cargue todos lo registros. pero parece que no funciona esta propiedad.

Que pudeo hacer para mejor el rendimiento en la carga de los adotable

si tus tablas tienen cientos de miles de registros, nada, lo mejor es que uses querys
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #7  
Antiguo 04-07-2008
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 20
Chogo Va por buen camino
Cita:
Empezado por poliburro Ver Mensaje
si tus tablas tienen cientos de miles de registros, nada, lo mejor es que uses querys
La mas grande tiene 279,133 registros. ¿ creen que son demasidos registros para no usar Adotable?
Responder Con Cita
  #8  
Antiguo 04-07-2008
Avatar de Chogo
Chogo Chogo is offline
Miembro
 
Registrado: may 2005
Ubicación: Pto Cortes,Honduras,C.A.
Posts: 148
Poder: 20
Chogo Va por buen camino
La base de datos mide 100 Mb
Responder Con Cita
  #9  
Antiguo 04-07-2008
Avatar de poliburro
[poliburro] poliburro is offline
Miembro Premium
 
Registrado: ago 2004
Ubicación: México D.F
Posts: 3.068
Poder: 23
poliburro Va por buen camino
Cita:
Empezado por Chogo Ver Mensaje
La mas grande tiene 279,133 registros. ¿ creen que son demasidos registros para no usar Adotable?

Pero claro que son demasiados para usar un AdoTable. Imaginate, estás cargando 100 megas en memoria.

modifica tu aplicación a AdoQuery
__________________
Conoce mi blog http://www.edgartec.com
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
Access Violation al cargar forma jcarteagaf Varios 1 16-03-2007 21:57:59
Procesos lentos...., Luis Castillo Conexión con bases de datos 4 22-12-2005 00:20:47
cargar imagen en access detybel Conexión con bases de datos 1 07-04-2005 09:37:35
Access Violation al cargar un Tbitmap en mi componente pepe2000 OOP 3 22-01-2005 13:27:59
Cargar tabla Access en un TListView dabas OOP 2 23-10-2003 11:09:36


La franja horaria es GMT +2. Ahora son las 20:50:58.


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