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)
-   -   Buscar Registro Semejantes (https://www.clubdelphi.com/foros/showthread.php?t=69645)

servicomp 31-08-2010 01:09:07

Buscar Registro Semejantes
 
Hola compañeros

Tengo una pequeña base de datos, con los campos, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL. Deseo que el usuario busque por uno de los campos de la tabla, asi no conozca el nombre completo, y me lo envie a un DBGrid.

Estos usando Firebird y para hacer la conexión estoy usando IBX, pero como arranco para este proceso

Agradeciendo de antemano la atención prestada


Macana

Casimiro Notevi 31-08-2010 01:18:49

Pues tendrás que hacerlo como "en la vida real", o sea, comparar cada campo. Me explico, el usuario escribe una cadena a buscar en un TEdit. (por ejemplo)

Ahora debes pedir al servidor de datos lo que te interesa buscar, puede ser algo parecido a esto:

Código:

select *
from tbclientes
where  NOMBRE1 containing :cQueBusco
or NOMBRE2 containing :cQueBusco
or APELLIDO1 containing :cQueBusco
or APELLIDO2 containing :cQueBusco
or NOMCOMERCIAL containing :cQueBusco

Puedes crear el select desde delphi o pasarle el valor a buscar como un parámetro a un IBQuery (por ejemplo) que ya tenga creada la sentencia.

servicomp 31-08-2010 01:26:27

Perdon.

el usuario ya ha seleccionado por cual de los campos desea buscar, mi problema aparece es cuando deseamos buscar por uno de los campos por ejemplo la palabra 'ALBERTO', pero el usuario solo escribe 'ALBE', y deberian sali en mi dbgrid, todos los registros que el campo NOMBRE1, inicien con 'ALBE', hay algun comodin para usarlo, o alguna instrucción.


Agradeciendo de antemano la ayuda


Macana

Casimiro Notevi 31-08-2010 01:48:18

Entonces puedes usar "like"

servicomp 02-09-2010 19:40:25

Agradezco la colaboración amigos, con la siguiente espreción que deseo colocar por si alguien en un futuro lo necesita, resolvi parte del problema

Código SQL [-]
SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 LIKE'+Edit1.Text+'%

El problema es que la consulta la realizo con in IBQuery, y deseo que los resultados me aparezcan en un DBGird. ¿Como direcciono los datos que me da el IBQuery al DBGrid?

Agradeciendo de antemano la atención prestada

IVAND 04-09-2010 21:14:14

Enlazas al Ibquery con un componente Datasource (Propiedad Dataset colocas en nombre del Ibquery) y a este con el dbgrid en su propiedad Datasource

servicomp 14-09-2010 01:33:52

con otro problema Trivial
 
Bueno amigos, le cuanto que estoy usando para mi busquedad la sentencia SQL que escribi en la antigua consulta y que coloco de nuevo a continuación.

Código SQL [-]
IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 LIKE "J% " ORDER BY NOMBRE2' );

Le he colocado la "J%", como por ejemplo me busque los registros que inician por J y el comodin, pero al ejecutar la opcion IBuscar.Open, para activar la busqueda, me lanza el siguiente error

Código:

SQL Error Code = -206
Column Unknown
J%

Al parecer no me esta tomando el LIKE y me esta tomando la J% como una columna.

Agradezco sus comentarios para resolver esta trivial consulta.


Macana

ARPE 14-09-2010 08:06:03

Hola, me temo que es cuestión de comillas y cuentan por ahí que es más eficiente "starting with" que "like xxx%".

La consulta quedaría algo así:

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 LIKE ''' + edit1.text + '%'' ORDER BY NOMBRE2');

Todo son comillas simples, pero cuentan que es mejor esta

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 starting with ''' + edit1.text + ''' ORDER BY NOMBRE2');

y lo malo como el usuario te escriba L'Andreu

saludos.

mcs 14-09-2010 10:44:58

Cita:

Empezado por ARPE (Mensaje 376333)
Hola, me temo que es cuestión de comillas y cuentan por ahí que es más eficiente "starting with" que "like xxx%".

La consulta quedaría algo así:

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 LIKE ''' + edit1.text + '%'' ORDER BY NOMBRE2');

Todo son comillas simples, pero cuentan que es mejor esta

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 starting with ''' + edit1.text + ''' ORDER BY NOMBRE2');

y lo malo como el usuario te escriba L'Andreu

saludos.

No sería mejor pasar el nombre por parámetros? No sé como funcionan estos componentes que usáis, pero en los IBDAC sería algo como:

Código:

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1,  APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 starting with '':NOMBRE'' ORDER BY NOMBRE2');
IBuscar.ParamByName('NOMBRE').AsString:=edit1.text;

Así nos ahorramos los problemas de escribir L'Andreu y cosas similares...

Ah, observar que :NOMBRE no está entre comillas, está entre apostrofes... Las comillas producen el error que comentaba antes servicomp (el -206 de "Column not found")

guillotmarc 14-09-2010 10:52:07

Cita:

Empezado por ARPE (Mensaje 376333)
Todo son comillas simples, pero cuentan que es mejor esta

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 starting with ''' + edit1.text + ''' ORDER BY NOMBRE2');

y lo malo como el usuario te escriba L'Andreu

Para evitar eso se utilizan consultas con parámetros :

IBuscar.SQL.Add('SELECT IDENTIFICADOR, NOMBRE1, NOMBRE2, APELLIDO1, APELLIDO2, NOMCOMERCIAL FROM NOMBRE WHERE NOMBRE1 starting with :NOMBRE ORDER BY NOMBRE2');

IBuscar.ParamByName('NOMBRE').Value := 'J';

Saludos.


La franja horaria es GMT +2. Ahora son las 16:27:21.

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