Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   búsqueda en BD (https://www.clubdelphi.com/foros/showthread.php?t=31670)

edusus 14-05-2006 17:51:18

búsqueda en BD
 
Que tal, como están todos?
He hecho una agenda con una base de datos. El problema lo tengo para la búsqueda ya que si no pongo exactamente (por ejemplo si busco por el campo Nombre) todo el nombre, no me lo encuentra y si lo pongo me sale solamente ese registro.
¿Cómo puedo hacer para que encuentre poniendo solamente una cadena de caracteres que esté contenida en el nombre y por lo tanto si hay más de un registro que contenga en el campo buscado esa cadena me devuelva todos los registros que lo contengan?
Muchas gracias por adelantado y un saludo para todos.

freelance 14-05-2006 18:05:05

Pues ....
 
Usa LIKE.

Ejemplo: SELECT * FROM TBCLIENTES WHERE NAME LIKE '%lopez%'

Espero haberte ayudado

Casimiro Notevi 14-05-2006 18:09:57

y si quieres que te lo encuentre aunque esté en mayúsculas o minúsculas y en cualquier parte de la cadena, usa containing

Código SQL [-]
SELECT * FROM TBCLIENTES WHERE NAME containing 'lopez'

edusus 16-05-2006 22:36:46

busqueda en bd
 
Muchas gracias por responderme, pero ¿no hay una solución con código delphi? Gracias nuevamente.

Casimiro Notevi 17-05-2006 01:19:02

Cita:

Empezado por edusus
Muchas gracias por responderme, pero ¿no hay una solución con código delphi? Gracias nuevamente.

Pon un edit para teclear lo que buscas, un botón para aceptar, un query y un dbgrid con un datasource que los enlaces, y escribe algo así en el onclick del botón:
Código:

qrBuscarClientes.Close;
qrBuscarClientes.SQL.Text:='SELECT * FROM TBCLIENTES WHERE NAME containing '+QuotedStr(edQueBuscar.Text);
qrBuscarClientes.ExecQuery;

Si tienes el query enlazado a un datasource y el datasource a un grid, entonces verás el resultado en el grid

P.D.: Es un simple ejemplo, depende de lo que quieras hacer.

vtdeleon 17-05-2006 02:39:21

Cita:

Empezado por Casimiro
Código Delphi [-]
qrBuscarClientes.ExecQuery;

:confused: :confused: :confused:
En vez de ExecQuery, no será Open :confused:

Casimiro Notevi 17-05-2006 08:57:16

Cita:

Empezado por vtdeleon
:confused: :confused: :confused:
En vez de ExecQuery, no será Open :confused:

Pues depende, suponiendo que hablamos de componentes IBX o derivados (FIB,FIBplus...), si se usa un IBDataSet es open. Si se usa un IBSql es ExecQuery.
El IBDataSet es de la clase TIBCustomDataSet->TDataSet
El IBSql es de la clase TComponent.

El primero, IBDataSet, es mejor para "moverse" por los registros devueltos, poder editar, borrar, etc

El segundo, IBSql , es más indicado para consultas más rápidas, para "traerse" unos datos determinados, búsquedas, sentencias de actualización, etc.

Al menos, así lo uso yo.

edusus 17-05-2006 12:24:19

No me funciona
 
De todos modos agradezco la buena voluntad en explicarme. Seguramente el error es mio.
Casimiro te importaría que te mande el proyecto para ver que es lo que tengo mal hecho. Te lo pregunto sin ningún compromiso y estoy de todos modos muy agradecido.
Un saludo

Casimiro Notevi 17-05-2006 13:08:40

Cita:

Empezado por edusus
De todos modos agradezco la buena voluntad en explicarme. Seguramente el error es mio.
Casimiro te importaría que te mande el proyecto para ver que es lo que tengo mal hecho. Te lo pregunto sin ningún compromiso y estoy de todos modos muy agradecido.
Un saludo

claro, envíalo, no hay problema

edusus 17-05-2006 13:49:15

aquí va
 
1 Archivos Adjunto(s)
Aquí te adjunto un zip con el proyecto.
Gracias

Casimiro Notevi 17-05-2006 22:36:58

:D has olvidado enviarme el código fuente, el .pas :D

De todas formas, veo que usas una tabla, creo que paradox, y las explicaciones que he estado dando antes eran para componentes de acceso a interbase/firebird.

No sé si es igual para los componentes que uses para paradox, la verdad es que jamás he programado nada en paradox, access y esas cosas... pero seguro que algún compañero te puede ayudar... si envías el código fuente, claro ;)

José Luis Garcí 18-05-2006 16:26:19

Prueba lo siguiente haber si te funciona,

Código Delphi [-]
     Query1.Active:=False;
     Query1.SQL.Clear;
     Query1.SQL.Add('SELECT nombre FROM Agenda WHERE UPPER(NOMBRE) LIKE upper('+chr(39)+'%'+ Edit2.Text+'%'+chr(39)+')');
     Query1.Active:=true;
Lo uso dentro del evento onchage del edit, si te interesa te mando una agenda con un par de curiosidades y tres sistemas de busqueda, dos por código y uno con un componente, si te interesa mandame tu correo electronico ya que temando los fuentes y el ejecutable, te advierto que usos componentes no estandar pero que se encuentran en la red y son freeware.

Un saludo desde canarias

edusus 19-05-2006 00:08:19

Perdona, ahora va completo
 
1 Archivos Adjunto(s)
Perdona Casimiro, quitando archivos para que ocupara menos había quitado por error el Pas y otros necesarios.
El archivo Agenda.db cógelo del zip anterior.
Gracias


La franja horaria es GMT +2. Ahora son las 04:10:44.

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