Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Busqueda con tildes o sin tildes. (https://www.clubdelphi.com/foros/showthread.php?t=93089)

usuario1000 15-05-2018 23:38:39

Busqueda con tildes o sin tildes.
 
Hola a todos.

Tengo un problemilla que en principio parecía mas sencillo de resolver y que ya se me está enconando y requiero de vuestra estimada ayuda. Gracias de antemano.

Utilizo una base de datos FIREBIRD y delphi 10 seattle.

Tengo un TEdit(eBuscar) que se llama "descripcion" y una tabla donde hago un filtro para buscar por los elementos que coinciden con el TEdit.

es decir:
Código Delphi [-]
        cdsTabla.Filter := 'descripcion like'+ QuotedStr('%'+ebuscar.Text+'%');

El problema surge cuando quiero buscar "JOSE' y si en la base de datos está escrito "JOSÉ", pues no aparece y debería aparecer.

¿Como hago para que me filtre independientemente si la palabra tiene tilde o no?. No me gustaria utilizar el comodin "_" puesto que no me parece una solución muy adecuada.

Gracias.

Casimiro Notevi 15-05-2018 23:48:52

Mira este hilo, de hoy mismo.


Y por cierto, para otra ocasión no olvides usar las etiquetas para el código, gracias.



Casimiro Notevi 16-05-2018 00:42:56

Tienes que modificar la definición del campo en la base de datos.
Código SQL [-]
create table tbPrueba (
  id integer not null,   
  cNombre varchar(64) character set ISO8859_1 collate ES_ES_CI_AI default '',      //  -> sería tu campo descripcion
  primary key (id) 
)

usuario1000 16-05-2018 00:45:46

Cita:

Empezado por Casimiro Notevi (Mensaje 526290)
Tienes que modificar la definición del campo en la base de datos.
Código SQL [-]create table tbPrueba ( id integer not null, cNombre varchar(64) character set ISO8859_1 collate ES_ES_CI_AI default '', // -> sería tu campo descripcion primary key (id) )


Uff, me da yuyu, cambiar la definicion de la base de datos, la cual está funcionando ahora con datos reales. No obstante haré pruebas con lo que me dices.

Gracias.

Casimiro Notevi 16-05-2018 01:31:17

Pues tienes que añadirle: collate ES_ES_CI_AI
No hay otra solución.

orodriguezca 16-05-2018 09:36:16

Tengo una duda con la solución propuesta: entiendo que se solucionaría el problema si lo que se está haciendo es una consulta de selección a la base de datos, pero en el caso que presenta usuario1000 lo se que hace es aplicar un filtro a un TClientDataset; ¿sigue siendo válida la solución?. Pregunto porque hasta donde sé la propiedad Filter de cualquier "localdataset" solo afecta a los datos actualmente en memoria dejando sin efecto el "truco" de collate ES_ES_CI_AI; ¿es así o o me estoy perdiendo de algo?

Casimiro Notevi 16-05-2018 09:49:43

No lo sé, no suelo usar TClientDataset.

Es una pregunta interesante.


La franja horaria es GMT +2. Ahora son las 00:49:42.

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