Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   problemas con filtros (https://www.clubdelphi.com/foros/showthread.php?t=31525)

Coco_jac 10-05-2006 17:45:35

problemas con filtros
 
Hola amigos tengo problemas con filtrar en un Ttable, no se estoy haciendo mal, asi que recurro a ustedes , miren este es mi codigo utilizado, me arroja un error "APLICACION NO APLICABLE", utilizo tablas Paradox

Código Delphi [-]
procedure Tfrmcatalogo.EdtclienteChange(Sender: TObject);
begin
table1.Filter:=' nombre LIKE '+chr(39)+'%'+trim(edtcliente.text)+'%'+chr(39);
table1.Filtered:=true;
end;

Espero sus comentarios.
Gracias

nenufer 10-05-2006 18:00:06

Prueba a ponerle 1º filtered a false porque si lo dejas a true no puede poner la condicion, tienes que desactivarlo 1º.

Código Delphi [-]
Tabla1.filtered := false
Tabla1.filter := //lo q tienes
Tabla1.filtered := true;

No lo he probao a ver si es ese el error. Espero que te sirva.

Coco_jac 10-05-2006 18:06:40

Hola, probe lo que dijiste pero sigue saliendo el mismo mensaje....que puede estar mal ???

nenufer 10-05-2006 18:27:22

uff
 
Siento no poder ayudarte, porque la verdad es que no tengo ni idea. Si pudiera probarlo, pero ahora no puedo.
Siento no haber sido de mas ayuda

Coco_jac 10-05-2006 18:30:21

gracias por tu apoyo seguire probando que esta mal.........

Coco_jac 11-05-2006 18:17:54

Hola eh estado probando de otras maneras por ejemplo

Código Delphi [-]
 
 table.filter := 'nombre = ' +chr(39) + edtcliente.text + chr(39);

bueno aqui si obtengo resultados, pero me interesa obtener todo los parecidos, lo eh hecho con sentencias SQl, pero el tiempo de respuesta es lento, no me convence.....asi que quiero tratar de hacerlo asi, pero no me sale.No me funciona con un simple LIKE eh probado con '*' pero nada. me sale el mismo error, operacion no aplicable.

Como podria solucionar este inconveniente con el uso del evento : OnFilterRecord

Lepe 11-05-2006 19:40:45

Si el tiempo de respuesta en SQL no te convence es que faltan índices por crear sobre los campos de búsqueda.

Yo he usado muchos Querys con Paradox en red, y la respuesta es inmediata (sobre 12.000 registros). Trabajando de forma local con la base de datos, no da tiempo a parpadear ;).

Por cierto, usa QuotedStr(edCliente.text) en lugar del 39 es más legible ;).

EDITO: creo recordar que el like no puede usarse en filtros, debes usar:
Código SQL [-]
 nombre > 'C'  and nombre < 'D'
Pero no da los resultados que quieres :(

Saludos

Coco_jac 11-05-2006 20:28:25

Hola Lepe, entonces Lepe como podria combinar una sentencia SQl con los indices, la verdad si te resulta bien por favor como podria lograr esto, yo solo lo obtengo con una simple consulta sql, pero utilizando Tquery para tal operacion. como podria combinar esto usando indices???

Lepe y como podria utilizar LIKE en un Ttable ???

Gracias espero tus comentarios

Lepe 12-05-2006 18:26:12

Tienes un campo llamado "nombre" en la base de datos, pues abre el Database Desktop, dale a reestructurar tabla, arriba a la derecha tienes un combobox donde puedes elegir "secondary indexes", allí dale a nuevo y añade el campo "nombre", dale un nombre al índice y sobre todo, marca la casilla "maintained". Acepta todo y ya tienes el índice creado.

Ahora solo tienes que usar un Tquery más o menos así:
Código Delphi [-]
query1.close;
query1.sql.text := 'SELECT NOMBRE FROM NOMBRETABLA WHERE NOMBRE LIKE : prNombre';
query1.parambyname('prNombre').AsString := '%'+edcliente.text+ '%';
query1.open;

La consulta hará uso del índice sobre el campo "nombre" para acelerar las búsquedas.

Sobre un TTable como ya he comentado, no puede usarse un like.

Saludos

Coco_jac 12-05-2006 22:31:43

Hola LEPE, la verdad que no sabia que podia usar indices con un Tquery me parece fabuloso de verdad, pero tengo una duda aunque no lo eh probado....el Tquery no tiene que hacer una referencia al indice o por defecto esto ocurre, desearia me podrias explicar esto , pero de todas maneras probare lo que dices.................ah en el caso de un Ttable si es necesario especificar el indice no??
me olvidaba no se mucho de indices, pero solo es necesario el Maintained ?? en que caso utiizaria los demas , como el case sensitive, eh visto que el otro indice que hace referencia al codigo pone este mas.

Espero tus comentarios y muchas gracias.

Coco_jac 13-05-2006 01:31:05

Gracias Lepe, mira manejo una tabla de 17778 registros trabajando en RED y demora 6 a 7 segundos como maximo en cargar la data, creo q es una mejora al agregar el indice, gracias...............el indice le puse ademas sensitive

Me gustaria si me pudieras aclarar los demas casos que te mecione en el post anterior

Gracias.

Lepe 13-05-2006 21:53:20

La ayuda del Database Desktop en esa opción será más conciso que yo ;)

Cita:

Maintained

Specifies whether to maintain the secondary index automatically.

Maintained indexes are updated by Database Desktop every time the table changes.
This speeds up certain operations like queries.
Maintained indexes are available for keyed tables only.
Non-maintained indexes are updated only when the index is used; for example, when you link tables or run a query.
The operation that uses the secondary index takes slightly longer using a non-maintained index, because Database Desktop must first update the index to recognize values that you have added, deleted, or changed, and then sort the table according to the new index. Also, if a non-maintained index becomes out of date, you cannot use it to change the viewing order of records.

Non-maintained indexes are most useful on tables that are read-only.

Search and locate operations

Database Desktop uses a secondary index to speed up some search and locate operations on Paradox tables if the index is:

Single-field
Case-sensitive
Maintained


Vamos que es cuestión de F1 ;)

Saludos

nok 19-01-2007 14:05:19

usar '*'
 
Hola q tal este es mi primer mnsajillo aqi y bueno es para aclarar una cosa del mensaje #6 de Coco_jac que aunqe hace ia tiempo d ls mnsajes stos le vendra bien a cualqiera.

Para filtrar un campo y qe tome solo las primeras letras i el resto indiferentemente, Si qe se puede usar '*' pero debes introducirlo dentro de las comillas que igualas con el nombre del campo..

Ejemplo:
Código Delphi [-]
table.filter := 'nombre = ' +chr(39) + edtcliente.text + '*' + chr(39);

//o mejor cm han dicho después
table.filter := 'nombre = ' + QuotedStr(Edit1.Text+'*');


Creo qe se entiende bastante bien, ..no? =)

Venga un saludo a todos! :D


La franja horaria es GMT +2. Ahora son las 08:37:24.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi