Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Busqueda en un edit que no contemple acentos (https://www.clubdelphi.com/foros/showthread.php?t=74110)

jafera 31-05-2011 10:28:14

Busqueda en un edit que no contemple acentos
 
Uf cosa complicada el título, no sabia que poner.

En fin al grano que es lo que vale.

Uso Delphi 6 y Firebird 1.5.

Tengo una base de datos a la que le he cambiado el character set de win1252 a ISO8859_1 collate ES_ES ya que con la codificación anterior si una palabra iba acentuada, en la ordenación de un grid no me respetaba y me colocaba la palabra por ejemplo 'Àger' como la última de la lista.

Bueno pues eso se solucionó con el cambio de character set, ahora funciona bien.

Pero mi duda es la siguiente:

Puedo hacer que cuando haga la búsqueda por el campo en cuestión no controle los posibles acentos?, es decir si yo escribo en el edit de búsqueda 'Ag' me encuentre igual que si busco por 'Àg'.

La consulta de búsqueda que uso es la siguiente:

Código SQL [-]
 
OrdenarGrid.SQL.Add('select * from BOM0003 where upper('+ComboBox1.Text+') like ''%'+AnsiUpperCase(Edit1.Text)+'%''');
OrdenarGrid.SQL.Add('order by '+Combobox1.text+'');

Muchas gracias y saludos a todos

Lepe 31-05-2011 12:11:56

Parece que tienes un nuevo collate (cotejamiento de caracteres) que sí permite eso: ISO8859_1 ES_ES_CI_AI en FB 2.0 ¿es posible actualizar?

http://www.firebirdsql.org/refdocs/l...ollations.html

Otra cosa que se me ocurre, es crear uno o dos campos computed con el nombre y apellidos sin acentos y en mayúsculas, así siempre puedes hacer la comparación o búsqueda sin acentos y sin distinción de mayúsculas.

Saludos

jafera 02-06-2011 09:22:23

Gracias Lepe.

No puedo actualizar a 2.0 o superior ya que en el trabajo tengo el programa de gestión trabajando bajo 1.5 y si en mi ordenador de casa le pongo el 2.0 cuando me traiga la base al curro no funcionará.

Otra cosa sería poder tener dos motores Firebird distintos a la vez pero no se puede.

No se, yo pensaba en si existia algo parecido al uppercase que me hiciera esto.

Por cierto pase de win1252 a ISO8859_1 con el IBExpert, fue un poco laborioso el regenerar el script para cambiar los campos, aunque el resultado fue muy satisfactorio. A partir de ya solo usaré ISO8859_1 en mis campos varchar.

Saludos

Lepe 02-06-2011 09:42:30

Pues lo que queda no me gusta, pero es una alternativa.

Lo mismo de antes pero en el after_update/insert, creas un trigger y allí intentas buscas "Á" y lo sustituyes por "A" en otro campo computed. Supongo tendrías que instalar las FreeUDF o las de FB/IB para usar funciones más cómodas (leftstr, padstr, substr, etc).

Claro, el problema es que al buscar tendrás que hacerlo por otro campo :(


Otra solución, hacer una UDF tú, en una DLL y así te creas la función que quieras. El tema estaría en la lentitud... a ver si te puedo hacer una prueba porque ando con eso de las UDF en DLL ahora mismo...


Saludos

jafera 02-06-2011 10:04:49

Gracias Lepe, no he creado nunca una DLL, si me pasas un ejemplo me harás un gran favor.

Tambien debo decirte que la lista de busqueda no es nada extensa, tiene solo unos 100 registros por lo que la lentitud no creo que afecte demasiado y esta tabla no crecerá más (en el concepto de crisis actual ya que es el listado de parques de bomberos de Catalunya y no creo que la Generalitat cree de nuevos)

Saludos.


La franja horaria es GMT +2. Ahora son las 06:02:52.

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