Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   adoquery lento en aplicación (https://www.clubdelphi.com/foros/showthread.php?t=40495)

miquellg 19-02-2007 12:55:44

adoquery lento en aplicación
 
hola compañeros!
tengo el siguiente problema que ya no se por donde cogerlo:
He creado un pequeño programa que consulta una base de datos ubicada en un servidor. Tengo varias consultas que realizo mediante adoquery, pero alguna se queda "colgada" durante varios minutos. Sin embargo, la misma consulta realizada a través del "Analizador de consultas SQL" o cualquier aplicación para acceder a BBDD es instantanea!

Ejemplo: obtener lineas documento P10100 y stocks

SELECT L.AR_REF, L.DL_DESIGN, L.DE_NO, L.DL_QTE,
S.AR_REF, S.AS_QTESTO, S.AS_EMPLACEMENT, S.AS_PRINCIPAL
FROM F_DOCLIGNE L, F_ARTSTOCK S
WHERE L.DO_DOMAINE = 0 AND L.DO_TYPE = 1
AND L.DO_PIECE = 'P10100'
AND L.DE_NO = 1
AND L.AR_REF = S.AR_REF
AND S.DE_NO = 1
(las claves de las 2 tablas aparecen en la clausula where)

Consulta SQLSERVER : tiempo 0.5 segundos
Consulta Adoquery: tiempo 300 segundos!!

he probado poner la adoquery.cursorlocation := cluserserver pero no mejora nada el tema.

Alguna sugerencia?
Gracias por la ayuda

Neftali [Germán.Estévez] 19-02-2007 13:12:09

Revisa el plan de ejecución desde SQL server, por si acaso.
Otra cosa que se me ocurre es que se te esté produciendo un DeadLock con alguna otra consulta que tengas en el programa y te quede bloqueada. Eso explicaría porqué desde SQL server es instantánea.

¿Cuandos registros devuelve? ¿Trabajas con transacciones?

miquellg 19-02-2007 13:24:15

Gracias Neftali,
he puesto esta consulta la primera de la ejecución del programa para evitar "arrastrar" una ejecución anterior. Pero todo sigue igual de lento!
la consulta solo devuleve 1 o 2 filas y no puedo usar transacciones por culpa del driver que controla la BBDD.

Neftali [Germán.Estévez] 19-02-2007 14:07:15

¿Puedes diseñar la consulta utilizando JOIN's?

miquellg 19-02-2007 16:02:34

Creo que si puedo hacer JOIN.

Neftali [Germán.Estévez] 19-02-2007 17:10:44

Intenta hacer la Join a ver qué tiempos salen...
De todas formas aun haciendo producto cartesiano (que es lo que está pasando ahora), las tablas deberían tener muchos registros para llegar a esos tiempos.

luisgutierrezb 19-02-2007 20:36:29

a mi me paso algo que fue una tonteria pero bueno, cuando hacia una consulta sobre 100 mil registros en el programa se tardaba mucho y en el Servidor nada, solucion, el programa "apuntaba" al manejador de bases de datos de mi equipo no al del servidor...

waly2k1 19-02-2007 21:54:17

Time Out
 
Tratá de extender el timeout de la consulta, quizás no se da en el tiempo establecido y se 'muere' la consulta. Sino esa consulta volcala a un Stored Procedure y en la consulta apuntas al SP. Espero te sirva de algo...


La franja horaria es GMT +2. Ahora son las 17:31:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi