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)
-   -   Tabla relativamente pequeña, muy lenta al indexarla... (https://www.clubdelphi.com/foros/showthread.php?t=20070)

JuanBCT 05-04-2005 14:37:06

Tabla relativamente pequeña, muy lenta al indexarla...
 
Hola a todos, espero q me puedan dar una mano con este problemita...
Tengo una tabla Paradox de Clientes, estos están ordenados por número... mi intención es que uno los pueda ubicar por nombre cuando se va escribiendo el mismo en un edit, lo q me obliga a indexarlo por nombre. Todo me funciona bien pero el problema es que es muy lento... el dbgrid tarda aproximadamente 5 segundos en cargarse, y cuando voy escribiendo el nombre, luego de apretar cada tecla tarda, también, alrededor de 5 segundos (uno puede terminar de teclear el apellido entero y por ahí ni apareció la segunda letra).

¿Hay alguna alternativa para hacer esto más rápido? La tabla tiene 1757 registros, me parece chica ya que leyendo el foro veo que los problemas de lentitud comienzan a aparecer cuando se tienen registros en el orden de decenas de miles...

Acá les paso el código, desde ya les agradezco su tiempo...

Código Delphi [-]
//Al activar el form
procedure TeMark_ConsuCli_form.FormActivate(Sender: TObject);
begin
Datamodule1.Client.indexname:='indexnom';
end;

Código Delphi [-]
//Al presionar una tecla en el Edit
procedure TeMark_ConsuCli_form.Edit1Change(Sender: TObject);
begin
Datamodule1.Client.setkey;
Datamodule1.Client['CLI_NOM']:=Edit1.Text;
Datamodule1.Client.GotoNearest;
end;

Código Delphi [-]
//Al cerrar el form
procedure TeMark_ConsuCli_form.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
Datamodule1.Client.indexname:='indexnum';
end;

El dbgrid lo tengo relacionado directamente con la tabla Paradox, traté de hacerlo con un Query pero no me da la función GotoNearest...

De nuevo, gracias.
Juan

marcoszorrilla 05-04-2005 14:51:38

Si se trata de tablas Paradox, mejor utiliza FindNearest.

Un Saludo.

JuanBCT 05-04-2005 15:15:12

Hola Marcos, gracias por responder tan rápido...
Te comento que cambié GotoNearest por FindNearest, por lo que el código quedó así:

Código Delphi [-]
//Al presionar una tecla en el Edit
procedure TeMark_ConsuCli_form.Edit1Change(Sender: TObject);
begin
Datamodule1.Client.setkey;
Datamodule1.Client.FindNearest([Edit1.Text]);
end;

Sin embargo sigue tardando lo mismo... yo creo que tiene algo que ver con los índices; si no le cambio el índice se carga / busca rápido... ¿alguien tendrá alguna otra idea?

marcoszorrilla 05-04-2005 15:26:40

Código Delphi [-]
procedure TeMark_ConsuCli_form.Edit1Change(Sender: TObject);
 begin
 Datamodule1.Client.FindNearest([Edit1.Text]);
 end;

SetKey se utiliza solamente con Dbase.

Un Saludo.

JuanBCT 05-04-2005 15:51:37

Cita:

Empezado por marcoszorrilla
Código Delphi [-]
procedure TeMark_ConsuCli_form.Edit1Change(Sender: TObject);
  begin
  Datamodule1.Client.FindNearest([Edit1.Text]);
  end;

SetKey se utiliza solamente con Dbase.

Un Saludo.

Gracias Marcos, saqué el setkey y funciona.... pero sigue siendo lento... :confused:

marcoszorrilla 05-04-2005 16:30:26

Y cuántos registros tiene esa tabla?.


Un Saludo.

JuanBCT 05-04-2005 16:38:37

La tabla tiene 1757 registros, si no cambio el índice funciona rápido... el tema es cuando paso el nombre al indexname (indexnom en este caso) y cuando realiza la búsqueda con cada FindNearest...

marcoszorrilla 05-04-2005 19:28:01

Pues no tiene explicación que con tampocos registros vaya lento, porque no generas los índices de nuevo y nos dices como resulta, yo busco con más de 100.000 registros y va rápido.

Un Saludo.

vtdeleon 05-04-2005 20:20:45

Saludos.

Otro asunto es que tipo de maquinas utilizas?
Cuanto Procesador, memoria,....?
Estas en Red?

Ing_Fajardo 05-04-2005 20:54:33

Mi metodo
 
Mi metodo es el siguiente

Uso un control combobox que tenga autocompletar ( como los de kdsdev.com, con skin)

La lista de nombres las paso al combobox por programacion y listo, valido el nombre cuando pierde el foto el combobox.

Es mas programacion, pero es mas rapido que cualquier otro metodo.

jachguate 05-04-2005 22:40:07

Cita:

Empezado por vtdeleon
Saludos.

Otro asunto es que tipo de maquinas utilizas?
Cuanto Procesador, memoria,....?
Estas en Red?

La búsqueda sobre un índice de mil y tantos nodos debiera volar incluso en una 286 con unos cuantos Kb de memoria...

Hasta luego
;)

JuanBCT 07-04-2005 17:05:15

Hola! Gracias a todos por sus respuestas... en un principio pensé que se trataba de los índices por lo q los volví a definir, probé otra vez y seguía lento. Luego hice una prueba haciendo un programa nuevo; con un form con dbgrid q me mostrase la tabla y un RadioButton para cambiar el índice... funciona bien (rápido)!!

Evidentemente hay algo en el programa que lo lentifica, que podría llegar a ser? Estoy buscando pero no encuentro nada.... alguna idea?

Les agradezco a todos por su tiempo.

Juan

vtdeleon 07-04-2005 22:20:11

Saludos.

Cuales y cuantos componentes(DB) usas en ese formulario?
Es un formulario MDI y/o usas Datamodule?
muestranos los codigos que utilizas para la funcionabilidad de ese form!

Hasta luego.

JuanBCT 08-04-2005 03:47:10

Hola vtdeleon! Uso un DbGrid para mostrarla, pero no creo q sea esa la causa ya que en todo el programa anda así; porque no sólo ahí la muestro. Tengo la "ficha de clientes" donde muestro todos los campos para hacerles Alta / Baja / Modificaciones, etc., y con el bóton que uso para cambiar de ficha (NombreDeTabla.Next o NombreDeTabla.Prior) también noto que tarda bastante.
Uso un Datamodule para manejarlo, en la prueba que hice también lo definí asi y anduvo bien...
Mañana en el trabajo te muestro el código de los form... (no tengo el proyecto aquí), aunque creo q el problema pasa por otro lado.
Gracias...

JuanBCT 11-04-2005 21:16:48

Solucionado!
 
Hola! Solucioné el problema, lo que pasaba era que cada query que había en mi programa estaba en Active:=true desde la creación del form... los puse en false (igual los desactivaba y volvía a activar al ejecutar los queries).....
Ahora funciona todo como debería, gracias a todos por ayudarme.
Saludos!
Juan


La franja horaria es GMT +2. Ahora son las 05:55:56.

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