Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-05-2013
ses27coves ses27coves is offline
Miembro
 
Registrado: may 2010
Posts: 16
Poder: 0
ses27coves Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 21-05-2013
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 29
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Buen día, ses27coves.

Cita:
Empezado por ses27coves Ver Mensaje
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.
Responder Con Cita
  #3  
Antiguo 21-05-2013
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.275
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
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?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 21-05-2013
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 21
defcon1_es Va por buen camino
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.?
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #5  
Antiguo 22-05-2013
ses27coves ses27coves is offline
Miembro
 
Registrado: may 2010
Posts: 16
Poder: 0
ses27coves Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Copiar el contenido de un DataSet a otro DataSet Javi2 Varios 82 22-11-2022 09:26:16
Actualizar un dataset desde otro dataset jafera Conexión con bases de datos 17 18-12-2008 23:57:10
rendimiento de PHP Ñuño Martínez PHP 1 20-09-2006 06:29:55
Rendimiento TStringList Delphius Varios 7 13-06-2005 07:16:46
rendimiento carlomagno Firebird e Interbase 14 06-07-2004 17:05:13


La franja horaria es GMT +2. Ahora son las 02:48:12.


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
Copyright 1996-2007 Club Delphi