Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > SQL
Register FAQ Members List Calendar Guía de estilo Today's Posts

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 12/11/2014
Delphitest Delphitest is offline
Miembro
 
Join Date: Sep 2006
Location: Salamanca-España
Posts: 249
Poder: 20
Delphitest Va por buen camino
Sentencia SQL con varios campos

Buenas Tardes,

pese a que hay mucha información en el foro relacionada con lo que busco, no soy capaz de ponerlo en practica y hacer que funcione.

He creado un Form para buscar en una Query un determinado cliente, para ello lo que pretendo es a través de varios edit y del evento onchange ir filtrando un DBGrid de tal manera que a medida que vaya escribiendo por ejemplo el nombre, los registros de la query se vayan adaptando a la búsqueda.

Pongo un pantallazo del Form y el codigo que estoy probando:

Código Delphi [-]
procedure TFBuscaCliente.Edit1Change(Sender: TObject);

var filtro1 :String;
var filtro2 :String;
var filtro3 :String;
var filtro4 :String;
var filtro5 :String;

begin
    If (Edit1.text <> '') then
    filtro1 := 'nombre like ' + QuotedStr('%' + Edit1.Text + '%');
    If (Edit2.text <> '') then
    filtro2 := 'Apellidos like ' + QuotedStr('%' + Edit2.Text + '%');
    If (Edit3.text <> '') then
    filtro3 := 'DNI like ' + QuotedStr('%' + Edit3.Text + '%');
    If (Edit4.text <> '') then
    filtro4 := 'Provincia like ' + QuotedStr('%' + Edit4.Text + '%');
    If (Edit5.text <> '') then
    filtro5 := 'Telefono_Fijo like ' + QuotedStr('%' + Edit5.Text + '%');
    IF (Edit1.Text = '') and (Edit2.Text = '') and (Edit3.Text = '') and (Edit4.Text = '') and (Edit5.Text = '') then
    begin
    TBuscarCliente.close;
    TBUscarCLiente.SQL.text :=  'Select * from clientes order by nombre';
    TBuscarCliente.open;
    end
    else
    begin
    TBuscarCLiente.Close;
    TBuscarCliente.SQL.Clear;
    TBUscarCLiente.SQL.text := 'Select * from clientes where ' + filtro1;
    TBuscarCliente.Open;
    end;
end;

http://www.clubdelphi.com/foros/atta...1&d=1415810826

Con lo que tengo hecho funciona perfectamente pero solo para el campo nombre (edit1) y si lo cambio para el apellido tambien funciona.

Lo que busco es, si se puede, que tenga en cuenta todos los edit a la hora de hacer el filtro. Asi si pongo "juan" en el nombre y "gon" en apellidos la busqueda sería más precisa.

Antes de preguntar he hecho combinaciones de variables e intentando concatenar con "and" la condición de la sql pero no doy con ello.

Si me pudierais orientar sería de agradecer.

Un saludo
Attached Images
File Type: jpg BuscarCliente.jpg (35.1 KB, 4 views)
__________________
Mi proyecto paso a paso (Parte I)
Reply With Quote
  #2  
Old 12/11/2014
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphitest.

Si no entendí mal lo que consultas, podrías hacer algo parecido a este ejemplo:
Código Delphi [-]
begin
  with tu_Query do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT APELLIDO, NOMBRE, DNI FROM CLIENTES');
    SQL.Add('WHERE APELLIDO LIKE :PAPE AND NOMBRE LIKE :PNOM AND DNI LIKE :PDNI');
    ParamByName('PAPE').AsString:= '%'+Edit1.Text+'%';
    ParamByName('PNOM').AsString:= '%'+Edit2.Text+'%';
    ParamByName('PDNI').AsString:= '%'+Edit3.Text+'%';
    Open;
  end;
end;
Toma en cuenta que la sintáxis puede variar un poco de acuerdo a los componentes que estes usando.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #3  
Old 12/11/2014
Delphitest Delphitest is offline
Miembro
 
Join Date: Sep 2006
Location: Salamanca-España
Posts: 249
Poder: 20
Delphitest Va por buen camino
Muchas Gracias por tu ayuda.

He intentado probar pero efectivamente algo falla en la sintaxis, uso ADO

He puesto esto:

Código Delphi [-]
    TBuscarCLiente.Close;
    TBuscarCliente.SQL.Clear;
    TBuscarCliente.SQL.Add('SELECT NOMBRE, APELLIDOS, DNI FROM CLIENTES');
    TBuscarCliente.SQL.Add('WHERE NOMBRE LIKE :PNON AND APELLIDOS LIKE :PAPE AND DNI LIKE :PDNI');
    TBuscarCliente.ParamByName('PNOM').AsString:= '%'+Edit1.Text+'%';
    TBuscarCliente.ParamByName('PAPE').AsString:= '%'+Edit2.Text+'%';
    TBuscarCliente.ParamByName('PDNI').AsString:= '%'+Edit3.Text+'%';
    TBuscarCliente.Open;

Pero me da error en las lineas donde uso ParamByName (Lo subraya en rojo)
__________________
Mi proyecto paso a paso (Parte I)
Reply With Quote
  #4  
Old 12/11/2014
roman's Avatar
roman roman is offline
Moderador
 
Join Date: May 2003
Location: Ciudad de México
Posts: 20,269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Prueba con

Código Delphi [-]
TBuscarCliente.Parameters.ParamByName('PNOM').Value := '%'+Edit1.Text+'%';

Es posible que antes tengas que poner:

Código Delphi [-]
TBuscarCliente.Parameters.ParamByName('PNOM').DataType := ftString;

// Saludos
Reply With Quote
  #5  
Old 12/11/2014
ecfisa's Avatar
ecfisa ecfisa is offline
Moderador
 
Join Date: Dec 2005
Location: Tres Arroyos, Argentina
Posts: 10,508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Delphitest.

Para los componentes ADO la sintaxis sería:
Código Delphi [-]
  with ADOQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT APELLIDO, NOMBRE, DNI FROM CLIENTES');
    SQL.Add('WHERE APELLIDO LIKE :PAPE AND NOMBRE LIKE :PNOM AND DNI LIKE :PDNI');
    Parameters.ParamByName('PAPE').Value:= '%'+Edit1.Text+'%';
    Parameters.ParamByName('PNOM').Value:= '%'+Edit2.Text+'%';
    Parameters.ParamByName('PDNI').Value:= '%'+Edit3.Text+'%';
    Open;
  end;
end;

Saludos

Edito: No había visto el mensaje de roman, pero comparto lo que te sugirió.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Reply With Quote
  #6  
Old 12/11/2014
Delphitest Delphitest is offline
Miembro
 
Join Date: Sep 2006
Location: Salamanca-España
Posts: 249
Poder: 20
Delphitest Va por buen camino
Mil gracias , así da gusto

Funciona a la perfección.

Muchísimas gracias por vuestra ayuda.
__________________
Mi proyecto paso a paso (Parte I)
Reply With Quote
  #7  
Old 12/11/2014
Delphitest Delphitest is offline
Miembro
 
Join Date: Sep 2006
Location: Salamanca-España
Posts: 249
Poder: 20
Delphitest Va por buen camino
Un detallín...

veo que cuando los registros tienen contenido en los 3 campos (nombre, apellidos y dni) no hay ningún problema con la búsqueda, pero si hay registros que tengan uno de esos campos vacíos no se incluyen en la búsqueda.

No se si lo he explicado bien, pero por ejemplo si existe un registro que tenga un nombre y los apellidos pero no tenga dni no hay forma de que aparezca al buscarlo sea por el campo que sea.

¿eso tendría solución o no me queda otra que dejarlo así?
__________________
Mi proyecto paso a paso (Parte I)
Reply With Quote
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
ayuda con sentencia sql para campos blob en interbase xor Firebird e Interbase 3 16/10/2007 22:52
varios campos en un dblookupcombobox anubis Varios 6 26/06/2007 04:24
como funciona la sentencia locate para campos multiples lugabame Tablas planas 3 17/05/2007 07:52
Agregar Varios campos en la sentencia SELECT m.ruiz SQL 5 23/01/2007 17:42
Top con varios campos trex2000 MS SQL Server 1 04/10/2006 21:12


All times are GMT +2. The time now is 01:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi