PDA

Ver la Versión Completa : termino tiempo de espera AdoConnection


laguilar59
16-08-2012, 23:29:05
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 (http://www.clubdelphi.com/foros/guiaestilo.php)?, 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
.... 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
La bases de datos es de SQL2000

¿Eso qué es?, ¿Microsoft sql?

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
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.

http://img717.imageshack.us/img717/6263/imagen1313s.png

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!!!