Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-08-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Buscar un registro por diferentes campos

Buenas a todos.

Necesito buscar un registro dentro de una tabla pero por diferentes campos, os explico tengo un form con un grid en el que se van colocando los registros seleccionados, este form tiene un edit en el que tecleo el nombre, la licencia, el dni o el codigo uci y mediante una consulta filtro los registros que cumplan la condicion para poder elegir el que corresponda, por ejemplo si tecleo gomez, me manda en un for auxiliar todos los registros que empiezan por gomez, si tecleo 12345678 me busca primero en el nombre, como no lo encuentra tendria que buscar en el dni pero me devuelve la consulta en blanco.

Este es el código:
Código Delphi [-]
 
procedure TF_Inscripcions.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
        If (Key=#13)  then
        begin
                F_BuscarInscripcio:=TF_BuscarInscripcio.Create(Application);
                begin
                        F_BuscarInscripcio.BuscarCorredor.Close;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Clear;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('SELECT DORSAL, NOM_LLARG, DNI, LLICENCIA, CODIUCI, NACIO, CLUB, ABR_CLUB, PUBLICITAT, EDAT, CATEGORIA FROM CTR0003');
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('WHERE NOM_LLARG STARTING' +QuotedStr(Edit1.Text));
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('ORDER BY NOM_LLARG');
                        F_BuscarInscripcio.BuscarCorredor.Open;
                        If F_BuscarInscripcio.BuscarCorredor.Recordcount>0 then
                        Abort;
                end;
                begin
                        F_BuscarInscripcio.BuscarCorredor.Close;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Clear;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('SELECT DORSAL, NOM_LLARG, DNI, LLICENCIA, CODIUCI, NACIO, CLUB, ABR_CLUB, PUBLICITAT, EDAT, CATEGORIA FROM CTR0003');
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('WHERE LLICENCIA STARTING' +QuotedStr(Edit1.Text));
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('ORDER BY LLICENCIA');
                        F_BuscarInscripcio.BuscarCorredor.Open;
                        if F_BuscarInscripcio.BuscarCorredor.RecordCount>0 then
                        Abort;
                end;
                begin
                        F_BuscarInscripcio.BuscarCorredor.Close;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Clear;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('SELECT DORSAL, NOM_LLARG, DNI, LLICENCIA, CODIUCI, NACIO, CLUB, ABR_CLUB, PUBLICITAT, EDAT, CATEGORIA FROM CTR0003');
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('WHERE DNI STARTING' +QuotedStr(Edit1.Text));
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('ORDER BY DNI');
                        F_BuscarInscripcio.BuscarCorredor.Open;
                        if F_BuscarInscripcio.BuscarCorredor.RecordCount>0 then
                        Abort;
                end;
                begin
                        F_BuscarInscripcio.BuscarCorredor.Close;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Clear;
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('SELECT DORSAL, NOM_LLARG, DNI, LLICENCIA, CODIUCI, NACIO, CLUB, ABR_CLUB, PUBLICITAT, EDAT, CATEGORIA FROM CTR0003');
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('WHERE CODIUCI STARTING' +QuotedStr(Edit1.Text));
                        F_BuscarInscripcio.BuscarCorredor.SQL.Add('ORDER BY CODIUCI');
                        F_BuscarInscripcio.BuscarCorredor.Open;
                        if F_BuscarInscripcio.BuscarCorredor.RecordCount>0 then
                end;
                F_BuscarInscripcio.Show;
        end;
end;
No se si los Abort esan bien colocados o donde puede estar el fallo, pero no me salta de un bloque a otro si el recordcount vale > 0

Gracias y saludos

Josep
Responder Con Cita
  #2  
Antiguo 26-08-2013
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 14
Caminante Va camino a la fama
Hola
No me quedaron claros tantos Begin End; pero bueno yo tengo en mi sistema una busqueda por nombre y ruc y mi consulta la hago mas o menos asi:

Código SQL [-]
Select [Mis campos]from Clientes where Nombre like :ParNom or Ruc like :ParRuc order by nombre;
Responder Con Cita
  #3  
Antiguo 26-08-2013
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Hombre,
lo normal es poner varios edits para que el usuario pueda buscar por los campos más importantes. Luego montas la where de la query.
Código Delphi [-]
Si editNombre <>'' then 
  where := where+' campoNombre = '+ quotedStr(editNombre);
Si editDNI <>'' then 
  Si where <> '' then where:= where + 'AND '
  where := where+' campoDNI = '+ quotedStr(editDNI);
...
Y así sucesivamente

Query.SQL.Add(where);
Query Open;
Otra opción es poner un combo con los campos , seleccionar el campo por el que se quiere buscar y con un edit adicional para meter un valor volver a montar la where de la query.

Código Delphi [-]
where := 'where '+Combo.Text+ ' = '+ QueotedStr(Edit.Text)
Query.SQL.Add(where);
Query Open;

Y si quieres usar un sólo edit para varios campos, lo comentado,

SELECT * FROM TABLA WHERE CAMPO1 = '+QuotedStr(Edit.Text) +' OR CAMPO2 ='+QuotedStr(Edit.Text);

Cuidado con los valores nulos, si permites que los campos por los que buscas tengan valores nulos, tendrás que contemplarlo en la condición de la where.

Prueba y nos dices.

Un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 27-08-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Yo lo hago asi
voy buscando con el locate los campos que quiera y si necesito mas campos simplemente agrego las lineas con el codigo y los campos adicionales

Código Delphi [-]
procedure TfrmCatalogoAnexo.edtSearchChange(Sender: TObject);
var _Position :TBookmarkStr;
begin
  if qryAnexos.Locate('Codigo', edtSearch.Text, [loPartialKey]) then
    Begin
      _position := qryAnexos.Bookmark;
      qryAnexos.Sort := 'Codigo';
      qryAnexos.Bookmark := _position;
      dbgAnexo.Show;
    End;
  if qryAnexos.Locate('Ruc', edtSearch.Text, [loPartialKey]) then
    Begin
      _position := qryAnexos.Bookmark;
      qryAnexos.Sort := 'Ruc';
      qryAnexos.Bookmark := _position;
      dbgAnexo.show;
    End;
  If qryAnexos.Locate('RazonSocial', edtSearch.Text, [loPartialKey]) then
    Begin
      _position := qryAnexos.Bookmark;
      qryAnexos.Sort := 'RazonSocial';
      qryAnexos.Bookmark := _position;
      dbgAnexo.show;
    End;
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 27-08-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Gracias por vuestras respuestas.

Al final he implementado la solución de los or:

Código Delphi [-]
 
procedure TF_Inscripcions.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
        If (Key=#13)  then
        begin
                F_BuscarInscripcio:=TF_BuscarInscripcio.Create(Application);
                F_BuscarInscripcio.BuscarCorredor.Close;
                F_BuscarInscripcio.BuscarCorredor.SQL.Clear;
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('SELECT DORSAL, NOM_LLARG, DNI, LLICENCIA, CODIUCI, NACIO, CLUB, ABR_CLUB, PUBLICITAT, EDAT, CATEGORIA FROM CTR0003');
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('WHERE NOM_LLARG STARTING :NOM');
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('OR DNI STARTING :NOM');
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('OR LLICENCIA STARTING :NOM');
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('OR CODIUCI STARTING :NOM');
                F_BuscarInscripcio.BuscarCorredor.ParamByName('NOM').AsString:=Edit1.Text;
                F_BuscarInscripcio.BuscarCorredor.SQL.Add('ORDER BY NOM_LLARG');
                F_BuscarInscripcio.BuscarCorredor.Open;
                F_BuscarInscripcio.Show;
        end;
end;

El motivo del Edit único es por semejanza al uso de un programa que ya está funcionando en la actualidad y se hace así. Para no liar más a los usuarios imito el funcionamiento.

Saludos

Josep
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
Buscar registro por parametros jafera OOP 6 22-06-2012 22:41:22
buscar registro camiz Conexión con bases de datos 1 29-05-2012 10:12:59
Como Grabar Campos En Tablas Diferentes EdgarJ .NET 0 13-02-2008 00:30:14
unir 2 consultas con campos diferentes.. sakuragi SQL 7 03-10-2005 10:12:28
Como buscar en diferentes tablas?? Sasuke_Cub Conexión con bases de datos 3 20-06-2005 10:40:19


La franja horaria es GMT +2. Ahora son las 18:15:06.


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