Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-04-2007
mangels mangels is offline
Registrado
 
Registrado: oct 2006
Ubicación: Barcelona
Posts: 4
Poder: 0
mangels Va por buen camino
Question Cómo cerrar conexión? Delphi, Zeos y Postgres

Accedo a Postgres a través de Zeos, la aplicación la usan unos 300 usuarios simultáneamente. El problema es que se me quedan las conexiones "idle in transaction" y me peta por exceder el número máximo de usuarios conectados.

Sólo desaparecen los usuarios "idle in transaction" cuando cierran el programa. ¿Cómo se cierra "bien" la conexión? Yo hago lo siguiente:

***************
ZConnection.AutoCommit := true;
ZConnection.Connect;

ZQuery.Connection := ZConnection;
ZQuery.RequestLive := true;
ZQuery.CachedUpdates := false;
ZQuery.SQL.Text := 'bla bla bla';
ZQuery.Open;
...
ZQuery.Close;
ZConnection.Disconnect;

***************

He probado también con ZConnection.Destroy, pero aún así no desaparecen las conexiones del servidor hasta que no cierro el programa. Alguien me puede ayudar?
Responder Con Cita
  #2  
Antiguo 11-04-2007
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
Por supuesto que es un grave problema, y la solución es sumamente sencilla.

Solo que debes modificar un poco la manera en que manejas tus conexiónes.

De entrada, todos tus objetos conexión deberán estar en un DataModule, de esta manera despúes de que destruyas la instancia del datamodule solo necesitaras lo siguiente:

ObjectoConexion.Close;
InstanciaDatamodule.Free
InstanciaDatamodule := Nil;

Con esto la conexión será eliminada en postgress.

Ahora, te comento que Con ADO puedes hacer uso de datos en frio, es decir, puedes mantener un dataset con datos resultado de una consulta o de la ejecución de un procedimiento almacenado sin la necesidad de tener abierta la conexión, esto te permite desarrollar aplicaciónes cliente servidor que no necesitan de conexiónes persistentes, logrando un sustancial ahorro de recursos en tu sevridor y oviamente un mejor performance.

Suerte
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #3  
Antiguo 11-04-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por poliburro
Ahora, te comento que Con ADO puedes hacer uso de datos en frio, es decir, puedes mantener un dataset con datos resultado de una consulta o de la ejecución de un procedimiento almacenado sin la necesidad de tener abierta la conexión, esto te permite desarrollar aplicaciónes cliente servidor que no necesitan de conexiónes persistentes, logrando un sustancial ahorro de recursos en tu sevridor y oviamente un mejor performance.
Esto ¿no puede hacerse también insertando un ClientDataSet y un Provider entre los controles y el Zeos? Lo pregunto porque de esa forma no se tendría que cambiar de componentes.

// Saludos
Responder Con Cita
  #4  
Antiguo 11-04-2007
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
Coincido contigo román en que el clientdataset es una buena opción para que no tenga que cambiar su capa de conexión, aunque déjame decirte que al tener postgress un proveedor OleDb, la mejor opción sobre zeos es ADO. :P

pero como te digo, coincido en el uso del clientdataset.
__________________
Conoce mi blog http://www.edgartec.com
Responder Con Cita
  #5  
Antiguo 16-11-2007
mangels mangels is offline
Registrado
 
Registrado: oct 2006
Ubicación: Barcelona
Posts: 4
Poder: 0
mangels Va por buen camino
Smile Solucionado!

Al final lo he hecho con DataSetProvider y ClientDataSet de la siguiente forma:

1 - Asocio el ZConnection con la base de datos
2 - Asocio el ZQuery con el ZConnection
3 - Asocio al DataSetProvider el ZQuery (propiedad DataSet)
4 - Asocio un ClientDataSet con el DataSetProvider (propiedad ProviderName)

La verdad es que funciona de maravilla. Gracias por la ayuda
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
Conexión delphi-postgres con driver open source Leviatan PostgreSQL 0 28-03-2007 16:21:45
Postgres, Zeos y Delphi 7 quali PostgreSQL 3 15-03-2007 22:41:39
Ayuda con la conexión de Postgres con Ruby on Rails elgocho PostgreSQL 0 05-12-2006 22:59:31
Como realizar la conexion con Postgres SQL alastor PHP 2 14-08-2006 21:07:18
Conexion xon Postgres nuquen Linux 6 25-06-2003 20:33:08


La franja horaria es GMT +2. Ahora son las 14:31:16.


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