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 01-08-2006
aanil aanil is offline
Miembro
 
Registrado: abr 2006
Posts: 155
Poder: 19
aanil Va por buen camino
Cool filtrado por condicion

Hola a todos, quiero ayuda:
Este codigo es para filtrar de acuerdo a una condicion:
Si tengo RB1.check hace un filtrado por lo que se escriba en el Edit1.text.
Si tengo RB2.check hace un filtrado por lo que se escriba en los Edit1.text y Edit2.Text (Hasta aqui me funciona bien)
Si tento RB3.Check deberia hacer un filtrado por los que se escriba en los Edit1.text , Edit2.Text y Edit3.text, pero no hace nada: Que es lo que tiene de malo?

Este es el codigo:
Código Delphi [-]
procedure TDist06.SpeedButton2Click(Sender: TObject);
begin
if rb1.Checked then
if (edit1.Text <>'')then
begin
datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+'''';
end else
if rb2.Checked then
if (edit1.Text <>'')and (edit2.Text <>'')then
begin
datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''' and CESE_CODIGO ='''+edit2.Text+'''';
end else
if rb3.Checked then
if (edit1.Text <>'')and (edit2.Text <>'')and (edit3.Text <>'')then
begin
datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''' and CESE_CODIGO ='''+Edit3.Text+''' and STATUS ='''+edit3.Text +'''';
end;
datam6.MATRICULA.Filtered := true;
end;
AAnil

Última edición por vtdeleon fecha: 01-08-2006 a las 16:21:41.
Responder Con Cita
  #2  
Antiguo 01-08-2006
Avatar de vtdeleon
vtdeleon vtdeleon is offline
Miembro
 
Registrado: abr 2004
Ubicación: RD & USA
Posts: 3.236
Poder: 24
vtdeleon Va por buen camino
Saludos

En ninguno de los caso funciona?, Te aseguraste de que el dato a filtrar está en la tabla?, Recuerda que es sensible a Mayuscula y minuscula!

Antes de esto "datam6.MATRICULA.Filtered := true;, muestra lo que tienes en el Filter con Showmessage(datam6.matriculo.filter)
__________________
Van Troi De León
(Not) Guía, Code vB:=Delphi-SQL, ¿Cómo?
Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto!
Responder Con Cita
  #3  
Antiguo 01-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Thumbs up

Yo lo haría de otra forma, porque si tiene marcado el rb3 y no tiene nada escrito en el Edit1, el tema fallará. En estos casos hay que cuadrar todos las posibilidades.

Cuando estudies las funciones verás que es casi casi copy and paste, pero muy fácil de ampliar con más condiciones
Código Delphi [-]
procedure TDist06.SpeedButton2Click(Sender: TObject);
var filtro :string;
begin
filtro := emptystr;
filtro := checkrb1(filtro);
filtro := checkrb2(filtro);
filtro := checkrb3(filtro);
datam6.MATRICULA.Filtered := false;
datam6.MATRICULA.Filter := filtro;
datam6.MATRICULA.Filtered := true;
end;

function checkrb1(filtroAnterior:string):string;
begin
  result := filtroAnterior;
  if rb1.Checked then
  if (edit1.Text <>'')then
    result := 'CENT_CODIGO ='''+Edit1.Text+'''';
end;


function checkrb2(filtroAnterior:string):string;
begin 
  result := filtroAnterior;
  if rb2.Checked then
  if (edit2.Text <>'') then
  begin
   if result <> EmptyStr then
     result := result + ' and ';
   result := result + 'CESE_CODIGO ='''+edit2.Text+'''';
  end;
end;

function checkrb3(filtroAnterior:string):string;
begin
  result := filtroAnterior;
  if rb3.Checked then
  if (edit3.Text <>'') then
  begin
  if Result <> EmptyStr then
    result := result + ' and ';
  result := result + 'STATUS ='''+edit3.Text +'''';
  end;
end;

Queda un tema pendiente.... donde dice EditX.Text <> '' debería decir:

Trim(EditX.text) <> EmptyStr

que los usuarios son muy suyos y con introducir un espacio en blanco ya se fastidia la consulta.

Edito: Incluso podrías quitar los "rb" ya que no aportan nada nuevo, si el usuario escribe algo en una caja de texto, se añade la condición, si no escribe nada, se elimina del filtro.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 01-08-2006 a las 16:53:22.
Responder Con Cita
  #4  
Antiguo 03-08-2006
[fer21unmsm] fer21unmsm is offline
Miembro Premium
 
Registrado: dic 2005
Ubicación: Lima
Posts: 627
Poder: 19
fer21unmsm Va por buen camino
Cita:
Empezado por aanil
Hola a todos, quiero ayuda:
Este codigo es para filtrar de acuerdo a una condicion:
Si tengo RB1.check hace un filtrado por lo que se escriba en el Edit1.text.
Si tengo RB2.check hace un filtrado por lo que se escriba en los Edit1.text y Edit2.Text (Hasta aqui me funciona bien)
Si tento RB3.Check deberia hacer un filtrado por los que se escriba en los Edit1.text , Edit2.Text y Edit3.text, pero no hace nada: Que es lo que tiene de malo?

Este es el codigo:Código Delphi [-]procedure TDist06.SpeedButton2Click(Sender: TObject); begin if rb1.Checked then if (edit1.Text <>'')then begin datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''''; end else if rb2.Checked then if (edit1.Text <>'')and (edit2.Text <>'')then begin datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''' and CESE_CODIGO ='''+edit2.Text+''''; end else if rb3.Checked then if (edit1.Text <>'')and (edit2.Text <>'')and (edit3.Text <>'')then begin datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''' and CESE_CODIGO ='''+Edit3.Text+''' and STATUS ='''+edit3.Text +''''; end; datam6.MATRICULA.Filtered := true; end;

AAnil
Hola AAnil, el filtrado de rb3 no te bota nada porque en la línea:
Código Delphi [-]
datam6.MATRICULA.Filter := 'CENT_CODIGO ='''+Edit1.Text+''' and CESE_CODIGO ='''+Edit3.Text+''' and STATUS ='''+edit3.Text +'''';
Pones dos veces "Edit3.Text", y en la segunda debería decir Edit2.Text

Saludos
__________________
"La información tiene más valor cuando se comparte"
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
Condición Where con resta de 2 campos Johnny Q SQL 6 13-01-2006 18:02:57
Finalizar una Condición jdangosto OOP 3 02-12-2005 08:57:38
salir de un while si se cumple condicion ??? chelejuan Varios 5 20-04-2005 14:44:34
condicion en un edit !! romansiux Varios 5 10-04-2005 02:25:40
condicion IF haffo Varios 11 06-11-2003 22:36:04


La franja horaria es GMT +2. Ahora son las 09:06:02.


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