PDA

Ver la Versión Completa : Postgres, Zeos y Delphi 7


quali
15-03-2007, 19:36:47
Hola Gente.

Estoy trabajando con Deplhi 7 y Postgres 8.1, conectando a la base de datos con Zeos.

Estoy desarrollando una aplicación que tiene dos tablas muy grandes (300 mil registros aprox. cada una).

En tiempo de diseño, si en un form pongo un componente ZTable, especifico su conexión y un tablename, se supone que haciendo un doble click sobre el ztable puedo agregar cuales campos de la tabla quiero ver. No veo nada si la tabla esta cerrada. Y si abro la tabla (poniendo la propiedad Active en true desde el ObjectInspector), al parecer se leen todos los registros de la tabla antes de abrirla. O por lo menos, me quedo mirando el relojito de arena un buen rato hasta que recupero el control.
Cuando ejecuto la aplicación, pasa lo mismo al abrir las tablas. Lo hago con un simple tabla.Open, y si es una de las tablas grandes puedo esperar mas de cinco minutos.

No se que puede estar pasando, mi sensación es que se leen todos los registros de la tabla antes de que se abra. Además, veo con el administrador de recursos del Windows como va creciendo el consumo de memoria.

Vale aclarar que la base de datos está instalada en un servidor y la accedo desde otra maquina.

Si hago una consulta SQL sobre la base de datos, esta se ejecuta muy eficientemente, por lo que no creo que sea un tema de performance del servidor.

Agredeceré cualquier comentario.

Saludos

luisgutierrezb
15-03-2007, 20:38:07
Generalmente los componentes table leen TODOS los registros a memoria, la recomendacion es que uses puro query para obtener datos especificos

Caral
15-03-2007, 20:42:10
Hola quali
El Ztable trae todos los registros y se torna lenta, el zquery, trae solo lo que te interese, es mucho mas eficiente, te recominedo que cambies los ztable por zquery y que le asignes cantidad de registros a traer por consulta, esto agilizara todo, aunque me parece raro que pase esto con zeos.
saludos

quali
15-03-2007, 22:41:39
Gracias a todos por las respuestas.
Encontré la solución acá: http://www.clubdelphi.com/foros/showthread.php?t=35579
Como bien dicen ustedes, al usar Ztables se hace un select *
Pero poniendo la propiedad tablename igual a : nombreTabla limit xx, donde xx es la cantidad de registros que quiero que recuperar, anda barbaro.

No quería usar querys ya que en mi interface intento asociar componentes (un dbgrid por ej) directamente con la bd y hacer inserciones. Con un query puedo hacer eso??

Saludos