| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
fvilanova Cdt

Registrado: 30 May 2007Mensajes: 13Ubicación: Castellón (UJI)
|
Publicado: Mar 25 Sep, 2007 10:31 am Asunto: optimizar ADOQuery |
|
|
Hola compañeros,
Estoy realizando una aplicación basada en una base de datos SQL-Server Express. Para ello utilizo DBGrids con un ADOQuery de datasource para mostrar los datos.
La aplicación funciona correctamente el problema es que tarda mucho en cargar los datos y mirando el administrador de tareas he visto que me chupa toda la CPU.
Alguien sabe a que se debe esto y como puedo optimizar el rendimiento de la aplicación???
Grácias. |
|
| Volver arriba |
|
 |
fvilanova Cdt

Registrado: 30 May 2007Mensajes: 13Ubicación: Castellón (UJI)
|
Publicado: Mar 25 Sep, 2007 10:33 am Asunto: Otro dato más!!!! |
|
|
| Estoy realizando la carga de datos en el formshow, puede ser este el problema??? |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
fvilanova Cdt

Registrado: 30 May 2007Mensajes: 13Ubicación: Castellón (UJI)
|
Publicado: Jue 27 Sep, 2007 10:25 pm Asunto: Solucionado!!!! |
|
|
El problema es que estaba ejecutando una función en cada inserción en el DBGrid que funcionaba bién.... Ahora me va rápido!!!!
El problema que tengo ahora es que no se como controlar el ancho de las columnas en un TDBGrid!!! Hay alguna manera de poner el width de las columnas de antemano???
Grácias |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 28 Sep, 2007 2:59 am Asunto: |
|
|
Verifica este enlace
Saludos!! _________________
 |
|
| Volver arriba |
|
 |
fvilanova Cdt

Registrado: 30 May 2007Mensajes: 13Ubicación: Castellón (UJI)
|
Publicado: Vie 28 Sep, 2007 8:39 am Asunto: Rendimiento muy bajo |
|
|
Hola Cesar,
He probado el código del enlace, pero va muy lento... Cada vez que intento cambiar el width de las columnas tarda como 15 segundos en responder.
Cargar los datos le cuesta muy poco, pero hecer el resize le cuesta mucho... Por que me pasa esto??? |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 28 Sep, 2007 8:49 am Asunto: |
|
|
Desconozco sinceramente como estas cargando tus datos, pero imagino que estas haciendo alguna operación en algún evento del DBGrid, puede ser OnDrawCell, puesto que los DBGrids solo son para consulta y la operaciones, de insercción o modificación, deben hacerse fuera de los eventos del DBGrid, imagino que si es una consulta estas trayendo TODOS los registros de tu Tabla, si puedes ponernos el codigo para revisar e indicarte donde esta el problema, no solo yo, si no qué todos podemos ayudarte.
Saludos.!! _________________
 |
|
| Volver arriba |
|
 |
fvilanova Cdt

Registrado: 30 May 2007Mensajes: 13Ubicación: Castellón (UJI)
|
Publicado: Vie 28 Sep, 2007 9:51 am Asunto: Código de la carga |
|
|
El código de carga de datos es el siguiente:
void TFPrincipal::RefreshOFGrid(AnsiString where)
{
AnsiString sql;
TDBGridColumnItem *col;
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
sql = "SELECT OFs.OFNum, OFs.Descripcion, CLIENTES.Nombre, OBRAS.Direccion, SECCIONES.Seccion, OFs.TiempoEstimado, dbo.SINO(OFs.Presupost) as Presupuesto, OFs.numPresupost, dbo.SINO(OFs.Albaran) as Albaran, OFs.Estado, OFs.idCliente, OFs.idObra, OFs.Seccion ";
sql += "FROM OFs INNER JOIN CLIENTES ON OFs.idCliente = CLIENTES.idCliente INNER JOIN ";
sql += "OBRAS ON OFs.idObra = OBRAS.idObra INNER JOIN ";
sql += "SECCIONES ON OFs.Seccion = SECCIONES.idSeccion";
sql += " WHERE " + where;
ADOQuery1->SQL->Add(sql);
ADOQuery1->Open();
//Tengo el datasource del TDBGrid asociado aL ADOQuery1
}
Hasta aquí lo hace rápido, el problema es cuando cambio el width de las columnas:
grdOFs->Fields[0]->DisplayWidth = 20;
grdOFs->Fields[1]->DisplayWidth = 50;
grdOFs->Fields[2]->DisplayWidth = 100;
grdOFs->Fields[3]->DisplayWidth = 20;
grdOFs->Fields[4]->DisplayWidth = 50;
grdOFs->Fields[5]->DisplayWidth = 20;
estas opeaciones le cuestan como 15 segundos... Muchísimo!!
La verdad es que no tengo más de 100 registros, estoy perdido seguro que hay otra forma más eficiente.... |
|
| Volver arriba |
|
 |
|