
Como detener una consulta en proceso
#1
Posted 31 January 2010 - 08:29 PM
Quiero saber si hay alguna forma de abortar una consulta sql en proceso y que esta tardando demasiado.
Uso Zeos y Firebird 2.1
gracias de antemano
#2
Posted 31 January 2010 - 08:54 PM
Saludos.
#4
Posted 31 January 2010 - 09:14 PM
pensaba que habria algun evento en el query que me permitiera detener la consulta o algo asi.
#5
Posted 31 January 2010 - 09:17 PM
gracias enecumene dejame revisar como hacer funcionar esto en mi programa y cualquier cosa informare el avance.
pensaba que habria algun evento en el query que me permitiera detener la consulta o algo asi.
Pues por el momento desconozco otra opción para lo que necesitas.

#6
Posted 01 February 2010 - 01:55 AM
Cancel executing query
Information about executing queries is available from the table MON$STATEMENTS. If you want cancel any query you must delete record from the MON$STATEMENTS, for example:
delete from mon$statements where mon$sql_text = :sql_text
Sometimes query text doesn’t available, however you can detect required query by alternate parameters like MON$STATE (query activity [1 - active, 0 - idle]) or MON$TIMESTAMP (query start time).
NOTA: No lo he probado nunca, ya que aún utilizo FB 2.0
Saludos.
#7
Posted 01 February 2010 - 06:27 AM
#8
Posted 01 February 2010 - 08:33 PM
Me podrias dar una idea mas detallada de como usar estas tablas de monitoreo de firebird 2.1
Se que has dicho que no las has utilizado, pero con tu experiencia, me gustaria oir una sugerencia de como utilizarlas.
Todo esto no es excluyente de los demas miembros del foro, sus ideas son bienvenidas. Solo le explico en principio a Marc, porque el fue quien me dio esa idea.
talvez al final tenga que usar la idea de enecumene sobre los hilos y talvez unirla a la idea de marc.
#9
Posted 01 February 2010 - 09:49 PM
luk2009, las aplicaciones de por si es un hilo "permanente" hasta que la misma finaliza.
Por ende, cuando realizas cualquier proceso y toma tiempo la aplicación tiende a colgarse o a tardar en responder; te exhorto a que hagas uso de lo mencionado por Enecumene más ligado a lo mencionado por Marc.
Así que al momento de lanzar tu consulta creas un hilo y tu aplicación podrá responder a otro proceso simultaneo, aquí es donde entra la explicación de Marc, pones un botón con la sentencia de cancelar la consulta.
Has este ejercicio y nos cuenta.
#10
Posted 02 February 2010 - 03:59 AM
Esto se puede solucionar ejecutando las consultas en threads separados, como te han comentado, o bastante más sencillo (aunque no tan cómodo para el usuario) : poniendo el monitoreo y cancelación de consultas en una segunda aplicación independiente.
Como es una aplicación independiente no tendrás el problema de que esté bloqueada hasta que finalice la ejecución de la consulta problemática.
Yo lo que haría es que esa aplicación mostrase las consultas que tiene el usuario en activo (mediante un select sobre MON$STATEMENTS), y desde ahí permitiese borrar un registro para cancelar la consulta.
Saludos.
#11
Posted 02 February 2010 - 09:17 AM
#12
Posted 02 February 2010 - 09:46 AM