Filtro de filtro

Hola
Mi problema es el siguiente:
Tengo una aplicación que muestra un Tradiogroup con los campos que contiene mi tabla (NOMBRE, DIRECCIÓN, LOCALIDAD, PAÍS), yo elijo un campo y mediante un Tedit ingreso los parámetros para filtrar la tabla a través de un TQuery y lo hice de la siguiente forma (suponiendo que elijo por campo NOMBRE):
With Query1 Do
Begin
Close;
With SQL do
Begin
Clear;
Add('SELECT * FROM TABLA.DB');
Add(' WHERE ( NOMBRE Like '+ '"%'+ Edit1.Text + '%" )');
Add(' Order by NOMBRE');
End;
Query1.Active:=True;
end;
Si yo pongo como parámetro PEDRO, me va a mostrar todos los registros con NOMBRE=PEDRO.
Hasta ahí voy fenómeno, ahora si yo vuelvo a filtrar por el campo PAIS = Argentina (por ejemplo) quiero que me muestre todos los NOMBRE = PEDRO (resultado del 1er.filtro) que coincidan con PAIS = Argentina, y no se como puedo hacerlo.
Bueno, espero que se haya entendido mi duda ya que es un poco rebuscada.
Saludos y desde ya muchas gracias.
Walter

1 Respuesta

Respuesta
1
Hi,
Mira, tu problema esta en que usas TRadioGroup en vez de TCheckBox porque esto te permite la múltiple elección de filtración.
Por ejemplo teniendo TCheckBox (con nombre Nombre, Dirección, etc.) podes chequear NOMBRE y PAÍS y colocar los distintos valores en los TEdit correspondiente para cada campo.
Luego el código te quedaría de la siguiente manera:
******************
With Query1 Do
Begin
Close;
With SQL do
Begin
Clear;
IF (Nombre.Checked) OR (Direccion.Checked) OR (Localidad.Checked) OR (Pais.Checked) THEN
begin
Add('SELECT * FROM TABLA.DB WHERE');
if (Nombre.Checked) then
Add('NOMBRE Like '+ '"%'+ NombreEdit.Text + '%"');
if (Direccion.Checked) and (Count = 1) then
Add('DIRECCION Like '+ '"%'+ DireccionEdit.Text + '%"')
else
Add('AND DIRECCION Like '+ '"%'+ DireccionEdit.Text + '%"');
if (Localidad.Checked) and (Count = 1) then
Add('LOCALIDAD Like '+ '"%'+ LocalidadEdit.Text + '%"')
else
Add('AND LOCALIDAD Like '+ '"%'+ LocalidadEdit.Text + '%"');
if (Pais.Checked) and (Count = 1) then
Add('PAIS Like '+ '"%'+ PaisEdit.Text + '%"')
else
Add('AND PAIS Like '+ '"%'+ PaisEdit.Text + '%"');
end
else
Add('SELECT * FROM TABLA.DB');
End;
Query1.Active:=True;
end;
********************
El COUNT=1 que aparece en los IFs es para ver si es la primer clausula del WHERE porque si no lo es hay que agregar un AND en la clausula.
También, fíjate que los TEdit correspondientes a los campos tienen nombre NombreEdit, DireccionEdit, etc.
Nahuelon..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas