Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Dbgrid Filter edit lento (https://www.clubdelphi.com/foros/showthread.php?t=91745)

shoulder 12-04-2017 18:13:11

Dbgrid Filter edit lento
 
Hola lo hago desde delphi7 base mysql, hago un filtro en un edit funciona rapido pero de repente (a veces) cuando empiezo a borrar un apellido Ejemplo: Garcia, borro la a y me trae todos los semejantes por cada letra que borro me tarda muchisimo. No se que puede ser. Gracias.

Código Delphi [-]
procedure TForm1.Edit4Change(Sender: TObject);
begin
DBGrid1.DataSource.DataSet.Filtered:= False;
DBGrid1.DataSource.DataSet.Filter:=  'apellido  like'+ QuotedStr('*'+trim(EDIT4.Text)+ '*');
DBGrid1.DataSource.DataSet.Filtered:= True;
end;

Caminante 12-04-2017 18:30:34

Hola

Primero seria bueno saber con que componentes de conexion trabajas. La lentitud puede deberse a que la cantidad de registros es muy alta. Ahora, si tienes todos los datos en local (Digamos en un clientdataset) deberia ser mas rapido caso contrario estas moviendo muchos registros desde el servidor.
Saludos

shoulder 12-04-2017 19:15:13

Dbgrid lento
 
Hola uso delphi7 mysql conexion zeos la tabla tiene aproximadamente 400000 registros.
Gracias.

Casimiro Notevi 12-04-2017 19:23:25

Utiliza intrucciones sql, en lugar de lo que estás haciendo.

bitbow 12-04-2017 19:41:47

Puedes reducir el impacto del filter (sea con query o tablas) haciendo que solo realice la busqueda cuando se tengan 5 caracteres (menos o mas) dependiendo de lo que requieras para limitar el numero de resultados, esto ya que dependiendo del campo puede que todos tus registros contenga el caracter por el cual estas filtrando por ejemplo que busquees en una clave y sean en formato "000###", si buscas el "0" todos van a tener y te regresara 3 veces 40000 registros.

Saludos.

Caminante 12-04-2017 21:40:14

Cita:

Empezado por Casimiro Notevi (Mensaje 515511)
Utiliza intrucciones sql, en lugar de lo que estás haciendo.

Definitivamente es la mejor opcion. ^\||/

Neftali [Germán.Estévez] 18-04-2017 16:24:59

Cita:

Empezado por shoulder (Mensaje 515510)
mysql conexion zeos la tabla tiene aproximadamente 400000 registros.

Definitivamente usar búsqueda incremental (o filtros) con una tabla de 400.000 registros creo que no es una buena idea.
Ya hemos discutido aquí que conceptualmente y de diseño no es una buena decisión. A los clientes les gusta y es una costumbre que tienen de cuando las Bases de Datos eran locales, pero con un SGBD, personalmente creo que es un error.

No comentas si estás trabajando en red o monopuesto y si el SGBD está en el mismo equipo o en otro. Si estás trabajando en red (o hay la posibilidad de que lo hagas en un futuro), la "mala decisión" se convierte en "horrible" (siempre como opinión personal). Por lentitud/rendimiento, sobrecarga del servidor, tráfico de red,...

shoulder 27-04-2017 17:51:23

Dbgrid lento
 
Hola lo solucione asi, no se en que me beneficio el Disablecontrols y el enable... pero funciono.


Código Delphi [-]
DBGrid1.DataSource.DataSet.DisableControls;
DBGrid1.DataSource.DataSet.Filtered:= False;
DBGrid1.DataSource.DataSet.Filter:=  'apellido  like'+ QuotedStr('*'+trim(EDIT4.Text)+ '*');
DBGrid1.DataSource.DataSet.Filtered:= True;
DBGrid1.DataSource.DataSet.EnableControls;


La franja horaria es GMT +2. Ahora son las 16:52:01.

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