La Web del Programador: Comunidad de Programadores
 
    Pregunta:  7415 - EN ACCESS VA MUY LENTO
Autor:  Alex
estoy programando en una Trial de Delphi 5.0 y uso el BDE para una access de 5 tablas y un tamaño de unos 59 MBs la tablamayor tiene 240.000 registros y un tamaño de registro de unos 130 bytes en 80 campos (es una migracion).
La cuestion es que debo partir de este diseño para hacer una replica de una aplicacion programada en Centrix.

En un TQuery me tarda en cargar un Db grid unos 30 segundos y eso que en la SQl solo cojo unos 15 campos y unos 30 registros (con condicion).

Lo que mas tarda es cuando activo el control (active:=true;).

Pregunta:
¿Por que tarda tanto?
¿Debo migrar en otro Sistema?
¿Puedo ahorrar tiempo en Oracle?
¿El BDE es lento pero el ODBC de Windows (access97) en delphi no me lee los indices. hay otra configuracion para access?
¿hay otra forma de extraer datos para el dbgrid?
¿uso un grid normal y cargo los datos con un table filtered?
¿existe vida fuera de la Tierra?Vamos que se que son demasiadas preguntas.... Perdones las molestias y muchas gracias por anticipado.

  Respuesta:  Silvio Moschen
yo tuve el mismo problema que vos y... via sql, si pones filtros o consultas multitablas, te moris de la angustia...

la solucion es hace el rastre de los registros por medio de un indice, armar una lista (TStringList) y a partir de la misma desplegar los registros en un StringGrid en lugar de un dbgrid, da mas trabajo pero... te soluciona por arte de magia el tiempo de las demoras.

espero aportarte algo. suerte !!!

  Respuesta:  Mario Alejandro Montoya
Una mejor opción es usar ADO. Usa un ADODATASET,Configuralo con ComandType=cmdTableDirect, CursorType=adFowardOnly (si no necesitas ir hacia atras) o adStatic y CursorLocation=clUseServer para mayor rendimiento.

No uses filtros. Mejor emplea tecnicas Cliente/Servidor. Utiliza consultas SQL para extraer "pedazos" de informacion.
Con tablas tan grandes, puedes utilizar la estrategia de las claves. Es muy simple. Primero ejecutas una consulta con todas las claves primarios (SELECT Id FROM..). Vas navegando con este recordset y solicitas de 1 o mas registros, etc...

Sobre la vida fuera de la tierra, pues aparte de Jehová, los angeles, etc... no se

Suerte :)