Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Query se bloquea (https://www.clubdelphi.com/foros/showthread.php?t=94731)

Angel.Matilla 15-06-2020 10:03:27

Query se bloquea
 
Tengo este query:
Código SQL [-]
SELECT SUM(A.Votos) Suma, C.Sigla, D.Electos, B.Municipio, CASE WHEN C.Codigo < 0 THEN C.Codigo ELSE 1 END Orden
  FROM Resultados A, Mesas B, Partidos C, NumElectos D 
 WHERE A.CodPrv = '13'
   AND A.Proceso = (SELECT MAX(Codigo) FROM Elecciones WHERE CodPrv = A.CodPrv 
                       AND Proceso = (SELECT Codigo FROM Proceso WHERE CodPrv = A.CodPrv 
                       AND Nombre = 'MUNICIPALES'))
   AND A.CodPrv = B.CodPrv AND A.Mesa = B.Codigo 
   AND B.Municipio IN (SELECT Municipio FROM Junta WHERE CodPrv = A.CodPrv AND Zona = 15)
   AND A.CodPrv = C.CodPrv AND A.Partido = C.Codigo 
   AND A.CodPrv = D.CodPrv AND D.Tipo = 'J' AND D.Circunscripcion = B.Municipio 
   AND A.Partido = D.Partido 
 GROUP BY 2, 3, 4, 5
 ORDER BY 4, 5 DESC, 3 DESC, 1 DESC
Si lo ejecuto en IBManager tarda en ejecutarse 0,5 segundos (literal); si lo ejecuto desde la aplicación en la que tiene que funcionar se queda colgado y tengo que matar el programa. ¿Alguna idea de que puede estar pasando?

Casimiro Notevi 15-06-2020 18:44:06

Asegúrate de que es la misma base de datos y también de que el problema es el query y no una línea posterior de código, algún bucle que hagas después, etc.

Angel.Matilla 16-06-2020 09:37:12

Gracias. Es la misma base de datos seguro y cuando lo ejecuto desde la aplicación del Query->Open() no pasa.

Casimiro Notevi 16-06-2020 09:53:25

Pon un "break point" en el qr.open y cuando se pare ahí, copia el cotenido del sql que va a ejecutar. Luego lo pegas y lanzas desde el ibexpert/ibmanager.

Angel.Matilla 16-06-2020 10:34:34

Cita:

Empezado por Casimiro Notevi (Mensaje 537648)
Pon un "break point" en el qr.open y cuando se pare ahí, copia el cotenido del sql que va a ejecutar. Luego lo pegas y lanzas desde el ibexpert/ibmanager.

Es lo que hago para comprobarlo, por eso sé que se "cuelga" en el Open.

Casimiro Notevi 16-06-2020 11:12:24

Pero tú sabes que eso es imposible, si es exactamente el mismo select con la misma base de datos, no puede ocurrir eso, salvo que devuelva tantos millones de registros que no quepan en memoria.

Angel.Matilla 16-06-2020 13:41:18

Ya lo sé y por eso me tiene muy mosqueado. Debe devolver un único registro.

kuan-yiu 16-06-2020 14:15:15

Yo lidié con un fallo así de misterioso y al final era debido a una StringList en la que le pasaba los parámetros a la query, no la query en si. Pero no fue sencillo encontrarlo porque no era un error evidente.
Puse un break point justo antes del problema y activé al llegar a ese punto: tools|debugger options|language exceptions|stop on delphi exceptions (después hay que sacarlo sino saltan avisos por todos lados)
A continuación recorrí unha por una todas las llamadas de cada línea hasta localizar el elemento exacto que daba el error.
Pero aparentemente (en una ejecución normal) el error parecía de la query cuando no lo era.

mamcx 16-06-2020 15:07:21

Si el problema es del qr.open, se puede confirmar haciendo un test minimo: Haz una app de consola que solo tenga el conexión, el query y ejecutar el open. Si te pasa ahi, entonces si es lo que dices.

Si no? Entonces existe otro factor en tu app que lo causa.

cloayza 16-06-2020 18:49:10

El objeto Query tiene algún evento asociado como BeforeOpen, AfterOpen, etc...

De igual manera podrías revisar y de tener estos eventos desactivar y verifica su funcionamiento.

Ojala puedas dar solución al problema y comentar lo que encuentres...

Saludos cordiales

Casimiro Notevi 16-06-2020 18:53:47

Y otra prueba más: aunque parezca una tontería, a veces sirve, elimina el componente y vuelve a poner otro.

Angel.Matilla 17-06-2020 13:20:03

Probaré y ya os diré que pasa. Gracias.


La franja horaria es GMT +2. Ahora son las 02:59:14.

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