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)
-   -   termino tiempo de espera AdoConnection (https://www.clubdelphi.com/foros/showthread.php?t=79860)

laguilar59 16-08-2012 23:29:05

termino tiempo de espera AdoConnection
 
Hola!!!

Soy nuevo en este foro por lo cual les doy las gracias por adelantado a quién pudiera ayudarme con lo siguiente:


Tango una aplicación que al realizar la consulta de la información se tarda y finalmente manda el mensaje de Termino tiempo de espera

Si el mismo script lo hago en el Administrador corporativo, directamente en la tabla me manda el mismo mensaje pero si lo hago en el analizador de consultas de SQL se tarda 35 segundos y arroja el resultado

La conección la hago a través del ADOConnection en donde el CommandTimeOut y el CommandConecction estan en 0.

Ojala pudieran orientarme para poder realizar las consultas sin que mande este mensaje.

La tabla tiene aproximadamente 375,000 registros.

No pude subir las imágenes para que vieran las pantallas pero si alguien me puede orientar como hacerlo se los agradecería bastante.

Saludos

Luis Aguilar

Casimiro Notevi 16-08-2012 23:36:02

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)


En principio, lo que no es normal es que tarde tanto, ¿la BD está bien?, en caso afirmativo ¿tienes los índices oportunos?, ¿qué sentencia estás usando?, ¿qué tipo de base de datos es?, ¿cual es el mensaje exacto de error?, etc...

TiammatMX 17-08-2012 00:18:30

Cita:

Empezado por laguilar59 (Mensaje 439780)
.... y el CommandConecction estan en 0....

Precisamente éste es el problema. TADOConnection tiene el problema que con ciertos drivers de MS SQL Server y otros motores de bases de datos no hace caso al "supuesto" infinito que representa el cero en ésta propiedad.

Yo tuve un problema similar y lo solucioné poniéndoles explícitamente valores a ésta propiedad, de entre 20 y 60 minutos (así de pesada estaba la consulta) y funciona a las mil maravillas. Te aconsejo que tú hagas lo mismo.

Saludines...

laguilar59 17-08-2012 00:30:42

Tengo una Tabla maestra y a partir de esa genere otras mas, una por año o ciclo escolar, no manejo indices, la sentencia es la siguiente:

SELECT Estado, IdCentro, Centro, IdAlumno, IdControl, ApellidoPaterno, ApellidoMaterno, Nombre, Nivel, SituacionFinal, FolioBoleta, FolioCertificado,
FechaNacimiento, CURP, Descripcion
FROM Alumnos0910
WHERE (IdEstado = '26') AND (ApellidoPaterno = 'AGUILAR')

La bases de datos es de SQL2000, y el mensaje textual es Termino el tiempo de espera o en Delphi
es: Project ProjectConsultas.exe raised exception class OleException with message "Termino el tiempo de espera" Procces Stoped

Acabo de ponerle 50 y 50 al CommandTimeOut y al CommandConecction pero sigue persistiendo el mensaje.

Casimiro Notevi 17-08-2012 00:39:55

Cita:

Empezado por laguilar59 (Mensaje 439786)
La bases de datos es de SQL2000

¿Eso qué es?, ¿Microsoft sql?

Cita:

Empezado por laguilar59 (Mensaje 439786)
no manejo indices

Amigo, y ¿quieres que sea rápido? :confused:

laguilar59 17-08-2012 04:06:16

Gracias por la atención y sus tips.
Si es microsoft SQL Server 2000.
Podrían orientarme en como decidir cual indice es el mejor para las tablas?
Las tablas tienen un campo que es irrepetible para cada registro, podría ser éste mi indice?
Ojala Pudieran orientarme al respecto.

Mil gracias

laguilar59 17-08-2012 04:12:45

Quizá valga la pena comentar que utilizo en mi aplicación aparte del AdoConnection uso un ADOQuery, y un Dbgrid en donde muestro los resultados, además de otra opción para poder exportar el resultado a excel.

Gracias por la atención.

Casimiro Notevi 17-08-2012 09:16:18

Código SQL [-]
SELECT Estado, IdCentro, Centro, IdAlumno, IdControl,  ApellidoPaterno, ApellidoMaterno, Nombre, Nivel, SituacionFinal,  FolioBoleta, FolioCertificado, 
       FechaNacimiento, CURP, Descripcion
FROM   Alumnos0910
WHERE  (IdEstado = '26') AND (ApellidoPaterno = 'AGUILAR')

Hombre, si tienes un campo que no se puede repetir, ese sería del tipo 'único'.
Para el índice, además de un campo 'clave' para cada registro, en tu caso debes tener como mínimo los que uses en las búsquedas y condicionantes: 'idEstado' y 'ApellidoPaterno'.

Neftali [Germán.Estévez] 17-08-2012 10:00:59

Lo primero que hay que saber es en qué parte de la consulta se están perdiento esos 35 segundos.
Para eso hay que analizar la consulta.

Desde el Query Analizer de SQL Server, lanza la consulta y visualiza el plan de ejecución de la consulta.



Una vez que sepas a qué se dedica el tiempo de la consulta, entonces podemos ver cómo actualizar (filtros, índices,...)

Ejecuta y pon el plan, a ver qué se puede mejorar.

laguilar59 17-08-2012 21:39:10

Gracias a todos por el apoyo.
Lo solucione creando los indices.
Nuevamente muchas gracias por los consejos y orientaciones!!!


La franja horaria es GMT +2. Ahora son las 17:06:59.

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