PDA

Ver la Versión Completa : problema con Filter en paradox


seken
10-09-2004, 16:29:20
estimados......
estoy utilizando Delphi5 y bases Paradox. Tengo una base de datos de 3000 registros la cual estoy utilizando el FILTER para ver los registros que cumplen una condición (Etapa=0 o Etapa=1), usando 2 radio boton elijo uno u otro filtro.
El problema que tengo es que se me ha tornado sumamente lento la consulta, en la grilla que me mustra los datos me para pasar de un registro a otro me demora 4 segundos. Hace unos dias atras que tení 2700 registros funcionaba bien. Hay alfuna otra forma de ver filtrada información de una tabla y que no sea haciendo un query?????
muchas gracias ;)

marcoszorrilla
11-09-2004, 14:33:59
Pues es sumamente extraño, y además las opciones son las que indicas o un filtro o una consulta, existe otra más que sería utilizar los rangos, siempre y cuando se tengan los correspondientes índices.


Yo hago filtros en estas condiciones con 40.000 registros filtrando facturas entre fechas por ejemplo o de un cliente o pendientes de cobro y el puntero se mueve sin ningún problema.

Un Saludo.

seken
11-09-2004, 16:17:16
marcos.. simplemente a la TTable.filter le asignas el "filtro" o haces alguna otra cosa.
Yo utilizo Delphi 5 Enterprise, lo he instaklado y no modifique nada, solo lo que tengo por defecto. HAbra algo en el BDE que tenga que chequear???

Las TTables le haces Open cuando las usas?? o cuando entras al programa ya las tenes abiertas.

Muchas gracias por la repuesta y disculpa esta falta de prolijidad, lo que pasa es que me cambio todos los esquemas este problema y se me enlenteció un sistema vital.
saludos

Seken ;)

marcoszorrilla
11-09-2004, 22:34:30
Pues sí, simplemente les aplico el filtro que corresponda.

En cuanto a la apertura de las tablas, todas las que se utilizan de manera continuada en la aplicación están siempre abiertas, solamente aquellas cuyo uso no está previsto sea prolijo están cerradas y se abren solamente en el momento que es preciso cerrándose una vez no lo son.

Convendría saber si tienes índices creados, ya que puede ser uno de los motivos por los que no vaya con la suficiente rapidez.

Un Saludo.

seken
13-09-2004, 13:00:56
marcoszorrilla....
sobre los indices es un tema importante que no se si estoy trabajando bien.

Yo la tablas las creo en el Database Desktop y le defino los indices. El sistema me crea los archivos base.db, base.px y los indices indice.xg0, indices.yg0 ... indice.xgn, indices.ygn.

La duda mia es que muchas veces me da el error "'index out of date" por roturas de indices, ¿¿¿ como haga para solucionar esto??? hay algun proceso que me restablesca los indices si estos estan rotos??
una respuesta que me habian dado era hacer esto

with table1.Create(nil) do
try
TableName := 'codigos.db';
Exclusive := True;
Open;
Check(DbiRegenIndexes(Handle)); //*
finally
Free;
end;

pero me funciono muy pocas veces.
Tengo entendido que Paradox tiene estos problemas de rotura de indices, Interbase es mas seguro?????
Muchas Gracias
SEKEN ;)

marcoszorrilla
13-09-2004, 15:17:49
Esa respuesta que citas, solamente servirá si el índice únicamente está desactualizado, pero no si verdaderamente está roto, en las páginas del Club tienes una utilidad entre otras que se llama Caerques

Yo suelo crear con ella un programa de reconstrucción de índices, si hay algún problema se ejecuta este programa y se reparan los índices.

La manera de proceder, es ejecutar este programa cuando tenemos la aplicación terminada y todos los índices funcionando sin ningún problema, luego con el módulo creado te construyes una miniaplicación para generar los índices en caso de que fuera necesario.

Si las tablas están dañadas y no hay manera hay una utilidad entre otras también que se llama Sysutils, que repara también este tipo de problemas.

Por supuesto que tanto Interbase, como Firebird son más seguros en este sentido.

Un Saludo.

seken
13-09-2004, 15:47:42
la aplicacion sysutil la tengo y me funciona Ok
el problema es que tengo un sistema que estoy distribuyendo y si le pasa un error de indices tengo que darles una herraminta (una pequeño exe, como el que aconsejas) que le solucione el problema.

gracias ;)

marcoszorrilla
13-09-2004, 15:55:35
Pues entonces no dudes en bajarte lo que te recomiendo de las páginas del Club.


procedure TfrIndices.SpeedButton1Click(Sender: TObject);
begin
Empaqueta('DIP');
hazindices('DIP');
end;


Un ejemplo simple de llamada.


Un Saludo.

seken
13-09-2004, 23:04:16
marcos
estuve mirando y esta muy buena la herramienta, voy a ponerla en uso pronto.

Muchas gracias ;) :D :)

SEKEN