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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-04-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 15
ZiriusB Va por buen camino
Unhappy Filtrar un resultado en DBGRID desde dos combobox

Buenas,

Tengo un problema, tengo una base de datos con un campo MES que me guarda el nombre del mes en curso, eje.: Marzo, Abril, Agosto.

Tengo un formulario con un DBGRID donde quiero mostrar un resultado, el hecho es que tengo dos combobox "CMBDESDE" y "CMBHASTA" quiero que en el DBGRID se me filtren los resultados que seleccione en los dos combobox, es decir; Coloco en CMBDESDE: Enero y en CMBHASTA: Abril, en el dbgrid me mostraria todos los resultados que esten entre Enero y Abril (Enero, Febrero, Marzo, Abril)

Sera posible una mano para eso...estoy algo parado en este paso!

Gracias
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #2  
Antiguo 27-04-2011
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 20
droguerman Va por buen camino
en el evento onChange de los combos:

Código Delphi [-]
with dbgrid.datasource.dataset do
begin
  filter := 'mes>='+IntToStr(cmbdesde.itemIndex+1)+ ' AND mes<='+IntToStr(cmbhasta.itemIndex+1);
filtered := true;
end;
__________________
self.free;
Responder Con Cita
  #3  
Antiguo 27-04-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 15
ZiriusB Va por buen camino
No me muestra resultado alguno en el dbgrid!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #4  
Antiguo 27-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
me parece que en lugar de filtrar por el nombre del mes debes hacer un artificio para filtrar por el "numero" del mes
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 27-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

Código Delphi [-]
....
procedure TForm1.FormShow(Sender: TObject);
begin
  ComboBox1.ItemIndex:= 0;
  ComboBox2.ItemIndex:= ComboBox2.Items.Count -1;
end;

procedure TForm1.ComboBoxChange(Sender: TObject);
begin
  with DBGrid1.DataSource do
  begin
    DataSet.Filtered:= False;
    DataSet.Filter:= 'MES >= '+QuotedStr(ComboBox1.Items[ComboBox1.ItemIndex])+
                   ' AND MES <= '+QuotedStr(ComboBox2.Items[ComboBox2.ItemIndex]);
    DataSet.Filtered:= True;
  end; 
end;
...
Por supuesto funciona si en los combos tenés los nombres de los meses y asignas ComboBoxChange al evento OnChange de los dos combos...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 27-04-2011 a las 20:24:16.
Responder Con Cita
  #6  
Antiguo 27-04-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 15
ZiriusB Va por buen camino
Muchas gracias por su ayuda, hice exactamente lo que me dijiste...le asigne Comboboxchange a ambos comobox, y ajuste el codigo a mi proyecto...Sin embargo los resultados no se ajustan a lo que quiero! Explico:

Si Selecciono ENERO y DICIEMBRE no me muestra resultados...

Si selecciono ENERO y NOVIEMBRE me muestra solo algunos resultados (ENERO, FEBRERO, MARZO, MAYO, JULIO, JUNIO, NOVIEMBRE) aun cuando también tengo ABRIL, DICIEMBRE en mis registros...

¿A que podría deberse?
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #7  
Antiguo 27-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
no lo se no he podido hacer pruebas
pero me parece que deberias hacer el filtro por numero de mes en lugar de nombre de mes salvo error u omision
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 28-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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 ZiriusB.

Es realmente extraño, a mí me funciona correctamente esté o no la columna ordenada alfabéticamente...
La prueba la realizé sobre Firebird, pero para estar seguro que trabajemos sobre los mismos datos y no sé que BD estás usando,
el código lo ajusté a la tabla Country (DBDDEMOS) ya que viene con Delphi.

Te adjunto la prueba para que puedas realizar las comprobaciones necesarias y si encontras algún caso en que no se cumpla la condición
del filtro, lo vemos en concreto.

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 04-05-2011 a las 07:49:29.
Responder Con Cita
  #9  
Antiguo 28-04-2011
Avatar de JoseAntonio
JoseAntonio JoseAntonio is offline
Miembro
 
Registrado: abr 2006
Ubicación: Lima - Ciudad de los Reyes.
Posts: 87
Poder: 19
JoseAntonio Va por buen camino
es un problema de mal diseño, si quieres hacer un filtro por mes, debes definir dicho campo (en tu base de datos) como entero, si lo defines como cadena, el filtro no funcionara por que al hacer el filtro el componente dataset no sabra que 'MARZO' < 'ABRIL' puesto que el componente hace la comparacion por orden alfabetico cuando se trata de cadenas, suerte, salu2
__________________
nuestro carácter está reflejado en cada línea de código que escribimos.
Responder Con Cita
  #10  
Antiguo 28-04-2011
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.586
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Aquí tienes un ejemplo de cómo realizar filtros sobre un Grid. Es ente caso se usa un exto de un Edit, pero la mecánica es la misma si el valor sale de un combo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #11  
Antiguo 28-04-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
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.

Lo que lleva rato diciendo oscarac y ahora ratifica JoseAntonio lo dice todo: El algorítmo es correcto, pero no es aplicable a este caso...

Se me escapó el carácter ordinal de los nombres de los meses que no es precisamente el alfabético...

Una idea que se me ocurre (y no es la mejor por que ensucias la tabla), es agregar un campo 'NroMes' de tipo numérico que se
corresponda con el mes del registro.

En el DBGrid deberías agregar todas las columnas menos la correspondiente a ese campo, luego podrías hacer:

Código Delphi [-]
...
function MesANro(Mes: string): Integer;
const 
   Nombre: array[1..12] of string=('ENERO','FEBRERO','MARZO','ABRIL','MAYO',
  'JUNIO','JULIO','AGOSTO','SEPTIEMBRE','OCTUBRE','NOVIEMBRE','DICIEMBRE');
var
  i: Byte;
begin
  i:= 1;
  while Nombre[i] <> UpperCase(Mes) do Inc(i);
  Result:= i;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
  with DBGrid1.DataSource do
  begin
    DataSet.Filtered:= False;
    DataSet.Filter:= 'NroMes >= '+
            QuotedStr(IntToStr(MesANro(ComboBox1.Items[ComboBox1.ItemIndex])))+
                     ' AND NroMes <= '+
            QuotedStr(IntToStr(MesANro(ComboBox2.Items[ComboBox2.ItemIndex])));
    DataSet.Filtered:= True;
  end;
end;

No es "la" solución, pero no se me ocurre otra cosa usando filtros.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 28-04-2011 a las 15:04:14.
Responder Con Cita
  #12  
Antiguo 28-04-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 15
ZiriusB Va por buen camino
Ok adopte una mejor opcion y mas rapida, luego pruebo con los nombres...

Me fui por los Numeros, una cosa que quiero dejar clara es que yo no tomo los valores de la base de datos para cargarlos a los Combobox, en la Propiedad ITEMS ahi coloco (1,2,3,4,5,6,7,8,9,10,11,12) ya que es una tabla en donde van a ir varios trabajadors con el mismo mes.

Lo cambie a numeros y todo bien hasta cierto punto...Al seleccionar del mes 1 al mes 11 me selecciona solo (1,11,12) supongo que solo esta tomando el primer numero "1" al seleccionar del mes 2 al mes 12,11 o 10 no me muestra resultados sin embargo si selecciono del mes 2 al 9 si me hace bien la busqueda!

Gracias por su ayuda, la aprecio mucho...
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #13  
Antiguo 28-04-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
mmm
entonces el campo no es entero, debe ser de tipo caracter por eso no te funciona
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #14  
Antiguo 28-04-2011
ZiriusB ZiriusB is offline
Miembro
 
Registrado: oct 2010
Posts: 86
Poder: 15
ZiriusB Va por buen camino
Pues si, de hecho con tantas cosas en la cabeza no guarde el cambio que hice a Entero! por eso aun no lo tomaba...gracias, resuelto!!

Un millon por sus opiniones y ayuda! fueron un gran impulso!
__________________
"Ningun precio es alto por el privilegio de ser uno mismo..."
Responder Con Cita
  #15  
Antiguo 21-05-2011
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Muchachos, he querido filtrar un dblookupcombobox y me sale un error. me llama la atención por que lo he hecho tantas veces y ahora no me sale, no se si se me está pasando algo...

Les envío el código y el mensaje de error...

Código:
procedure TFBuscar.DBLCBCargoClick(Sender: TObject);
begin
 FPrincipal.TBCargos.Open;
 FPrincipal.TBCargos.Filter:= 'Cátedra o Cargo =' +QuotedStr(DBLCBCargo.Text);
 FPrincipal.TBCargos.Filtered:= True;
 DBLCBIDSARH.Enabled:= True;
end;
El mensaje de error que me sale es:

TBCargos: Field 'C' not found.

FPrincipal: Formulario principal donde se encuentra el ttable.
TBCargos: Ttable
DBLCBCargo: dblookupcombobox donde programo el evento
DBLCBIDSARH: otro dblookupcomboboxque sólo habilito cuandoya se hizo el fintrado.

Gracias por su tiempo...
Saludos.
Responder Con Cita
  #16  
Antiguo 21-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
el campo de tu tabla tiene acentro? Cátedra????

no estoy seguro (porque no uso filtros)... pero no creo que el operador logico "o" exista en delphi

Prueba asi
Código Delphi [-]
procedure TFBuscar.DBLCBCargoClick(Sender: TObject);

FPrincipal.TBCargos.Filter:= 'Catedra =' +QuotedStr(DBLCBCargo.Text) + ' or Cargo =' +QuotedStr(DBLCBCargo.Text) 
end;
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #17  
Antiguo 21-05-2011
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
"Cátedra o Cargo" es el nombre del campo.
=p

Pruebo lo que me pasaste...

Gracias por responder.
Responder Con Cita
  #18  
Antiguo 21-05-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 21
oscarac Va por buen camino
ah pues pense que eran 2 campos diferentes.....
los nombres de los campos que uso no son asi
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #19  
Antiguo 21-05-2011
Avatar de zeta2
zeta2 zeta2 is offline
Miembro
 
Registrado: feb 2007
Posts: 95
Poder: 18
zeta2 Va por buen camino
Gracias chicos, ahí resolví el problema, no se por qué pero no me acepta nombre de campos que contenga más de una palabra...

En lugar de poner

"Cátedras o Cargos" puse "Cargos"

Gracias por todo chicos.
Responder Con Cita
  #20  
Antiguo 06-06-2011
martinartaza martinartaza is offline
Miembro
NULL
 
Registrado: oct 2010
Posts: 77
Poder: 15
martinartaza Va por buen camino
no te acepta por el espacio.

Proba con corchetes.
Código Delphi [-]
FPrincipal.TBCargos.Filter:= '[Cátedras o Cargos]' = QuotedStr(DBLCBCargo.Text)

Ahí debería funcionar.
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
Se puede? (Filtrar desde dentro de un DBGrid?) b3nshi Conexión con bases de datos 3 27-04-2010 21:57:09
Filtrar un campo en un ComboBox zeta2 Varios 12 02-07-2008 12:17:41
Filtrar ADOTable al seleccionar combobox jeysi Varios 3 24-01-2008 10:48:36
FastReport - ComboBox y resultado SQL hecospina Varios 6 23-01-2008 23:19:30
Multiplicando el resultado de un ComboBox Camilo Conexión con bases de datos 10 06-12-2007 18:57:14


La franja horaria es GMT +2. Ahora son las 20:09:24.


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