Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Talking Busqueda en un DBF sin SQL

Saludos.

Siempre tuve una gran duda sobre las búsquedas en los campos de un dbf.

Resulta que si se utiliza “Locate” para buscar en un determinado campo por ejemplo
ModuloDatos.TCliente.Locate('NOMBRE',Edit.Text,[loPartialKey, loCaseInsensitive]);

En el Edit tienes que poner el nombre exacto del cliente a buscar, y si no es exacto no lo encuentra.

Mi pregunta es la siguiente.
¿Hay alguna forma de filtrar los nombres de búsquedas sin utilizar SQL para que tan solo utilizando varios caracteres que contengan la palabra a buscar la encuentre?

Pongo un ejemplo.

Necesito buscar la palabra CIENPIES, con Locate siempre tengo que poner la primera letra por lo menos para que aparezca.

Y yo necesito que con solo poner PIES aparezca.

¿Es eso posible sin utilizar SQL en una base de datos DBF?

Espero y deseo haberme explicado bien.

Gracias
Responder Con Cita
  #2  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
no entiendo porq complicarlo, si con una sql es tan facil como:

Código SQL [-]
Select * from cliente where nombre like %:nom%
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Sí, seguramente es facil.
Pero nunca he trabajado con SQL y no tengo ni idea donde poner ese codigo que tu me comentas.

¿En el onkeypress del edit?

¿Me vale el TTable o tengo que cambiarlo por el TQuerry?

No se como hacerlo, tampoco pretendo que me enseñeis paso a paso. Con un sencillo y pequeño empujón tengo suficiente.

Gracias Eduarcol
Responder Con Cita
  #4  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
voy a tratar de ponerlo facil

1.- Coloca un TQuery
2.- Configuralo como si fuera el TTable
3.- En el evento que deseas realizar la busqueda escribe el siguiente codigo:

Código Delphi [-]
begin
   //Cierra el query
   MiQuery.Active := False;
   //Establece la sentencia donde clientes es el nombre de la tabla,
   //Nombre es el campo por el que se realizara la busqueda y
   //txNombre la caja de texto por la que va a buscar
   MiQuery.Sql.Text := 'Select * from Clientes where Nombre Like ' + QuotedStr(txNombre.Text + '%');
   MiQuery.Active := True;
end;

Lo coloco de memoria, si te da un error avisas para ayudarte a corregirlo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Vale de acuerdo.

Solo una duda, ¿ya tengo en el Datamodule un TTable Clientes, que hago, lo dejo o lo sustituyo por TQuerry Clientes?

¿Pueden estar los dos o juntos son incompatibles?
Me refiero a TTable yTQuerry conectados a la misma base de datos.

Gracias.
Responder Con Cita
  #6  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
si tienes otro uso para el tTable dejalo, si no lo necesitas mas quitalo, no son incompatibles
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #7  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Ok Eduarcol.

Voy a probar y mañana te cuento Ok.

Gracias amigo.
Responder Con Cita
  #8  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Bueno empezamos mal con el SQL.
Creo que no he configurado bien el TQuery.
Porque al compilar el programa me da el siguiente error.
TQuery: No SQL statament available
Si tengo un TTable Clientes y un TQuery Clientes, ¿ Tengo que tener también un TDataSource para cada uno de ellos?

Gracias.
Responder Con Cita
  #9  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Lo mas seguro es que estas tratando de abrirlo antes de asignarle el SQL, el active := True o el Open saltatelo hasta que llegues al codigo que te escribi
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #10  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Sí pero el problema es que no soy capaz de poner a True la propiedad Active del TQuery.

No se como hacerlo me da error.
Responder Con Cita
  #11  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
puedes explicarnos como lo tratas de hacer, paso a paso para encontrar el error
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #12  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Bueno haber si puedo explicarme para que me podáis entender.
Tengo en un DataModule , Un TTableClientes, Un TQueryClientes, un DataSourceClientes1 y otro DatasourceClientes2.
El TTableClientes con las propiedades
DatabaseName = C:\Progreama\Datos
TableName = Clientes.Dbf
Active = True
Está conectado a un DataSourceClientes1
-------Otro------.
El TQueryClientes con las propiedades
DatabaseName = C:\Progreama\Datos
TableName no tiene (y lo que no sé es donde poner la Base de datos Clientes.dbf)
Active = False
Este conectado a un DataSourceClientes2
Aclarar que no tengo instalado ni Oracle, ni MySql ni nada de eso, tampoco tengo interbase.
No se si hace falta instalar algo de eso.
Saludos.
Responder Con Cita
  #13  
Antiguo 11-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
bueno vamos bien, ahora asi como esta lo que tienes es qe colocar el codigo de arriba en el evento que deseas realizar la busqueda
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #14  
Antiguo 11-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Sencillamente sencillo.
Eres grande Eduarcol, esto funciona de maravilla.

Tan solo decirte que sigue saliendo la excepcion al compilar que dice...

TQuery: No SQL statament available.

Y no sé porque, pero de todas formas si le doy a continuar funciona.

Gracias.
Responder Con Cita
  #15  
Antiguo 12-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
no ni tan grande si supieras como 1.72

esa excepcion es porq estas tratando de realizar un open, cuando te salte fijate en que linea y quitas el TQuery.open
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #16  
Antiguo 13-02-2008
Avatar de RoyTan
RoyTan RoyTan is offline
Miembro
 
Registrado: oct 2003
Ubicación: Mijas - Málaga
Posts: 121
Poder: 21
RoyTan Va por buen camino
Ok.
Solucionado.

El Hombre no se mide por su altura, se lo hace por su grandeza.

Gracias Eduarcol.

Saludos desde España.
Responder Con Cita
  #17  
Antiguo 14-02-2008
fpirovani fpirovani is offline
Miembro
 
Registrado: feb 2008
Ubicación: Entre Rios, Argentina
Posts: 24
Poder: 0
fpirovani Va por buen camino
Cita:
Empezado por eduarcol Ver Mensaje
voy a tratar de ponerlo facil

1.- Coloca un TQuery
2.- Configuralo como si fuera el TTable
3.- En el evento que deseas realizar la busqueda escribe el siguiente codigo:


Código Delphi [-]begin
//Cierra el query
MiQuery.Active := False;
//Establece la sentencia donde clientes es el nombre de la tabla,
//Nombre es el campo por el que se realizara la busqueda y
//txNombre la caja de texto por la que va a buscar
MiQuery.Sql.Text := 'Select * from Clientes where Nombre Like ' + QuotedStr(txNombre.Text + '%');
MiQuery.Active := True;
end;




Lo coloco de memoria, si te da un error avisas para ayudarte a corregirlo
Hola a todos!
Justamente estoy tratando de hacer lo mismo que RoyTan. Hice todo como figura en la cita que hice del post de eduarcol, pero cuando quiero buscar, para que encuentre una coincidiencia tengo que ingresar el nombre empezando por la primer letra. Por ejemplo: si quiero buscar CARLOS en el campo NOMBRE tengo que escribir primero la C despues la A etc.
yo lo q necesito es que si escribo en el edit OS me muestre todos los registros que dentro del campo NOMBRE figure OS. Por ejemplo: carlOS, marcOS.
Si no entendi mal lo que lei del hilo que creo RoyTan el queria hacer justamente eso.

Saludos
Responder Con Cita
  #18  
Antiguo 14-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
el operador %, se utiliza para determinar la ubicacion de la cadena de busqueda en el ejemplo de roytan esta al final, o sea todo lo que comienze como se indica y termine en lo que sea.

Si quieres lograr eso, modifica esta linea

Código Delphi [-]
MiQuery.Sql.Text := 'Select * from Clientes where Nombre Like ' + QuotedStr('%' + txNombre.Text + '%');
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #19  
Antiguo 14-02-2008
fpirovani fpirovani is offline
Miembro
 
Registrado: feb 2008
Ubicación: Entre Rios, Argentina
Posts: 24
Poder: 0
fpirovani Va por buen camino
Buenisimo!! muchas gracias anda perfecto!

Ahora yo tengo un DBgrid donde se muestra lo que va encontrando a medida que se escribe, pero no me aparece ordenado en orden alfabetico...
y en el Query no contre donde espesificar un indice como para que lo ordene, tal como la propiedad IndexName del TTable (TTable.IndexName)

ya que estoy te pregunto, hay algun tutorial, manual, libro o algo parecido donde se puedan aprender detalles como el de la ubicacion del signo % en el Query
Responder Con Cita
  #20  
Antiguo 14-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por fpirovani Ver Mensaje
Buenisimo!! muchas gracias anda perfecto!

Ahora yo tengo un DBgrid donde se muestra lo que va encontrando a medida que se escribe, pero no me aparece ordenado en orden alfabetico...
y en el Query no contre donde espesificar un indice como para que lo ordene, tal como la propiedad IndexName del TTable (TTable.IndexName)

ya que estoy te pregunto, hay algun tutorial, manual, libro o algo parecido donde se puedan aprender detalles como el de la ubicacion del signo % en el Query
Busca en google MANUAL DE SQL, encontraras informacion de sobra, con respecto al orden prueba esta sentencia:

Código SQL [-]
Select * from Clientes where Nombre Like ' + QuotedStr('%' + txNombre.Text + '%') + ' Order by CampoOrdenar

Donde "CampoOrdenar", es el campo por el que quieres ordenar el grid.
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
busqueda con sql Kamael OOP 2 31-01-2008 21:19:33
busqueda sql like douglas Conexión con bases de datos 27 18-11-2007 18:32:00
busqueda sql Dark Aeris Firebird e Interbase 10 06-06-2006 23:05:20
busqueda alachaise Internet 1 31-03-2005 16:57:34


La franja horaria es GMT +2. Ahora son las 04:20: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
Copyright 1996-2007 Club Delphi