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)
-   -   Rendimiento DataSet (https://www.clubdelphi.com/foros/showthread.php?t=83197)

ses27coves 21-05-2013 13:49:50

Rendimiento DataSet
 
Hola.

Tengo una aplicación con Delphi XE3 la cual esta conectada a una DB Firebird 2.5 con DBExpress. La tabla en cuestión tiene alrededor de 20.000 registros. Accedo a los registros con un DBXQuery --> DataSetProvider --> ClientDataSet --> DataSource y se muestran los resultados en un DBGrid.

El problema es que al intentar moverme por el DBGrid con la barra de desplazamiento tarda mucho en reaccionar, la barra de scroll no se mueve y al cabo de varios segundos se mueve la barra y se muestran los datos.

He modificado la consulta de SQL para solo me muestre los 50 primeros registros, pero sigo teniendo el mismo problema.

Alguien sabe de donde puede venirme el problema o como optimizarlo?

Saludos y Gracias

Al González 21-05-2013 15:06:14

Buen día, ses27coves.

Cita:

Empezado por ses27coves (Mensaje 460846)
He modificado la consulta de SQL para solo me muestre los 50 primeros registros, pero sigo teniendo el mismo problema.

¿Exactamente el mismo problema con sólo 50 registros? ¿Podrías mostrar la consulta SQL que haces? ¿Ya verificaste que son sólo 50 registros los que terminan viéndose en la rejilla?

Saludos. :)

Neftali [Germán.Estévez] 21-05-2013 17:03:18

Que pase lo primero me parece normal con 20.000, que te pase lo segundo sólo con 50, me parece muy extraño.
¿Puedes dar más datos?

defcon1_es 21-05-2013 18:31:42

Hola.
¿Tienes código en algún evento de DBGrid, como por ejemplo OnRowChange, OnColumnChange, etc.?

¿Tienes código en algún evento de algún field del clientdataset, como por ejemplo OnChange, etc.?

ses27coves 22-05-2013 12:15:16

La consulta SQL que utilizo para limitar los registros es:
Código:

Select FIRST 50
ID, NOMBRE, MUNICIPIO, LONGITUD, LATITUD, ALTITUD, PROFUNDIDAD, DESARROLLO, (ORDEN || '-' || SUBORDEN) AS ORDEN, ENTIDAD, PUBLICACION, VERIFICADO, PROTEGIDO, PROPIETARIO,ORDEN AS ORDEN1,SUBORDEN,NOMBREDISCRIMINANTE,TOPO
from CUEVAS
order by
MUNICIPIO, NOMBREDISCRIMINANTE ASC
;

Sobre los eventos, tengo en el DBGrid OnDrawColumnCell que muestra el texto de las celdas de un color o otro dependiendo del valor de uno de los campos
Código:

//>>>>>>>>>>>>>>>>>>>> Color Filas Grid Cuevas >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><
procedure TFPrincipal.DBGridCuevasDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (Column.Field.Dataset.FieldbyName('VERIFICADO').asstring = 'SI') or (Column.Field.Dataset.FieldbyName('VERIFICADO').asstring = 'si') then
    begin
      DBGridCuevas.Canvas.Font.Color:= clGreen;
    end;
    DBGridCuevas.DefaultDrawColumnCell(rect,DataCol,Column,State);
end;
//>>>>>>>>>>>>>>>>>>>>

En el DataSet en el evento OnDataChange tanbien tengo otros procedimientos. Pero estos no se ejecutan hasta haber pasado 0,5 segundos.
Código:

procedure TDataModule1.DSCuevasDataChange(Sender: TObject; Field: TField);
begin
  UPrincipal.FPrincipal.Statusbar1.Panels[2].Text:='Cargando mapa y topo...';
  TimerCuevas.Enabled := False;
  TimerCuevas.Enabled := True;
end;

Les explico mejor el problema por si acaso puede haber algún mal entendido.
Si me muevo por el DBGrid con la rueda del ratón o con las flechas de desplazamiento del teclado, este responde bien. El problema esta en el uso de la barra de desplazamiento. Al intentar usarla esta no se mueve. Y al soltarla en algún punto(aunque no se mueva), pasados unos segundos se mueve.

Si bien es cierto que con la tabla entera (20.000 registros) tarda 1 o 2 segundos y con 50 registros tarda menos. Pero en ningún caso se mueve cuando pinchas sobre ella i la mueves.

Gracias por vuestro interés y ayuda.


La franja horaria es GMT +2. Ahora son las 04:21:15.

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