Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Cerrar conexiones que quedan abiertas (https://www.clubdelphi.com/foros/showthread.php?t=42837)

arantzal 24-04-2007 11:34:50

Cerrar conexiones que quedan abiertas
 
Buenas,
tengo un problemilla que no consigo solucionar, a ver si alguien me puede ayudar.
Trabajo con Delphi 7 y SQL Server. La cuestión es que cuando algún usuario cierra mal la aplicación, se quedan conexiones abiertas. ¿Cómo puedo cerrarlas? ?Hay alguna forma de hacerlo?.
Gracias de antemano.
Saludos.

droguerman 24-04-2007 15:36:41

en el evento onClose:

Código Delphi [-]
adoConexion.active := false;

arantzal 24-04-2007 15:55:41

Muxas gracias droguerman por la ayuda.

Pero lo que quiero, es de alguna forma, mediante una sentencia sql o algo así eliminar las conexiones que mi aplicación ha dejado abiertas. Lo que pasa es que tengo una query con subquerys, y al hacer el open se me abren varias conexiones. Y si un usuario cancela cuando la query se está ejecutando, por mucho que pongo el active de la query a false, o cierre la query... no se cierran todas las conexiones. Lo que quiero es cerrar las que me han quedado abiertas.

Si alguien me puede ayudar...

Gracias de antemano.
Saludos.

marcoszorrilla 24-04-2007 16:00:30

Puedes crear un procedimiento y le llamas cuando proceda para que te cierre todo lo que creas conveniente.
Código Delphi [-]
Procedure Cierra_Conexiones();
begin
Try
MiQuery1.Close;
LoqueSea.Close;
{Aquí cierras todo lo que sea necesario}
except
end;
end;

Por lo que veo, quizás te convenga más un bucle que recorra todas las tablas y consultas y vaya cerrándolas una a una.
Un Saludo.

arantzal 02-05-2007 12:40:45

Buenas,
antes que nada gracias por contestarme.
He intentado haciendo .free y .close tanto de la conexión, como de la query y no me hace caso.
Yo creo que lo que me vendría bien sería detectar las conexiones que se quedan abiertas en el SQL Server y hacer un kill de esos procesos. Qué opinais?. Es seguro hacer esto?.

Pero aqui también tengo una duda, xk yo puedo tener que la misma aplicación se esté ejecutando varias veces en un mismo equipo, pero en ese caso sólo quiero cerrar las conexiones abiertas de la aplicación o versión que se cierra mal, las otras ejecuciones de la aplicación debería de seguir ejecutandose correctamente.

Hasta el momento he llegado a detectar todas las conexiones abiertas de la siguiente forma:

select spid
from master.dbo.SysProcesses where Program_name = 'xx xxx' así me obtiene los spid de los procesos abiertos para la aplicación 'xx xxx' . Siendo el spid el identificador de los procesos. Pero,¿cómo se puede diferenciar de qué ejecución o versión se trata????

Gracias.
Saludos.


La franja horaria es GMT +2. Ahora son las 23:39:40.

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