PDA

Ver la Versión Completa : Buscar texto en campo con un Query


pgraciap
17-05-2003, 18:15:15
;) Como puedo buscar una cadena de txt en un campo de 50 caracteres, con un Query.

Tengo un campo en una tabla de access pero necesito buscar una cadena, por asi decir:

El campo completo dice:
Jose Angel Gutierrez Meraz, del cual existen varios Gutierrez en la tabla y necesito filtrar todos los Gutierrez de la tabla?

Alguien tiene una solucion a esto.

Nota: por desgracia los nombres estan juntos, cosas que suelen pasar con datos que uno no crea..... :rolleyes:

jhonny
17-05-2003, 18:33:10
Puedes usar la sentencia "Like" de SQL.

Ahora, supongamos que los "Gutierrez" estan en una tabla llamada "Clientes", entonces lo buscarias asi:

SELECT nombre FROM Clientes
where nombre like('%gutierrez%') order by nombre


y listo, espero te sirva :)

José Luis Garcí
17-05-2003, 20:20:53
Lo que te ha dicho Jhonny es correcto pero por si este fuese tu caso ten encuenta que el usuario puede meter datos en mayuscualas y minusculas simultaneamente, y esto es obligación de controlarlo por parte del programador para ello soló hay que modificar un poco el código.

SELECT nombre FROM Clientes
where upper(nombre) like('%GUTIERREZ%') order by nombre

El elegir mayusculas sobre minusculas es por que hay mucha gente que suele escribirlo todo en mayusculas, ten encuenta que el dato que le des este en mayusculas tambien. Espero que te valga.

Un saludo desde Canarias.

__cadetill
17-05-2003, 21:21:44
y, para asegurarte todabia mas, puedes utilizar el upper en ambos lados


SELECT nombre
FROM Clientes
where upper(nombre) like upper('%Gutierrez%')
order by nombre

delphi.com.ar
19-05-2003, 17:02:06
Y si querés buscar algo en un Query ya abierto, podes utilizar el método Locate:

Query1.Locate('NOMBRE', 'GUTIERREZ', [loCaseInsensitive, loPartialKey] );

Ruben_Cu
20-05-2003, 01:33:50
Hola a todos, dos comentarios:
He tenido problemas con el uso de la función UPPER y la letra 'ñ' tuve que cambiar a hacerlo con la función LOWER.
En segundo lugar quiero ver si me aclaro de una vez:
Según leo en la ayuda la función Locate busca el primer registro que coincide con la condición dada y lo convierte en el registro corriente devolviendo true si existe y false si no encuentra coincidencia, pero no devuelve un conjunto de resultados de una busqueda. Es segunda vez que veo que hacen esta propuesta en los ultimos días y quisiera que me explicaran mejor, pués puede ocurrir que, por deconocimiento, esté subutilizando la potencialidad de la función.
Gracias por sus respuestas

delphi.com.ar
20-05-2003, 02:18:33
Posteado originalmente por Ruben_Cu
la función Locate busca el primer registro que coincide con la condición dada y lo convierte en el registro corriente devolviendo true si existe y false si no encuentra coincidencia, pero no devuelve un conjunto de resultados de una busqueda.

Para eso en lugar del Locate podés utilizar Filtros, te recomiendo leer un poco sobre las propiedades Filter, Filtered, FilterOptions... de los datasets. Igualmente si el set de resultados es muy amplio, es MUY recomendable hacer el filtro en la consulta SQL, caso contrario tenés que tener en cuenta que el dataset recorrerá todos los registros del lado del cliente hasta encontrar los registros que coincidan con tu filtro.


Posteado originalmente por Ruben_Cu
He tenido problemas con el uso de la función UPPER y la letra 'ñ' tuve que cambiar a hacerlo con la función LOWER.
Pero si el nombre está escrito con Ñ mayúscula, vas a tener el mismo problema. ¿Que motor estas utilizando?

Ruben_Cu
20-05-2003, 04:06:24
Posteado originalmente por delphi.com.ar
Pero si el nombre está escrito con Ñ mayúscula, vas a tener el mismo problema. ¿Que motor estas utilizando?
Hola delphi.com.ar, probé con BDE y estoy llegué a la conclusión que utilizando la propuesta de cadetill de usar dos veces la función UPPER funciona bien tanto para la ñ como para la Ñ, igual resultado obtuve usando dos veces la función LOWER o sea se logra el mismo resultado por lo que lo que dije no vale. ;)

Posteado originalmente por delphi.com.ar
Para eso en lugar del Locate podés utilizar Filtros, te recomiendo leer un poco sobre las propiedades Filter, Filtered, FilterOptions... de los datasets. Igualmente si el set de resultados es muy amplio, es MUY recomendable hacer el filtro en la consulta SQL, caso contrario tenés que tener en cuenta que el dataset recorrerá todos los registros del lado del cliente hasta encontrar los registros que coincidan con tu filtro.


Mi pregunta se circunscribe al uso del locate, pgraciap quiere obtener un conjunto de registros que contienen una cadena dada y tu propones la función locate como alternativa al uso del query (o al menos eso entendí) de ahí el origen de mi comentario.
De todas formas seguiré tu consejo y repasaré las propiedades del dataset.
Saludos

delphi.com.ar
20-05-2003, 16:43:17
Posteado originalmente por Ruben_Cu
Mi pregunta se circunscribe al uso del locate, pgraciap quiere obtener un conjunto de registros que contienen una cadena dada y tu propones la función locate
Es que he entendido mal a pgraciap, no he notado que quería el conjunto de resultados, sinó le hubiera sugerido utilizar filtros.

Saludos!