Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Filtrado por fecha en access (https://www.clubdelphi.com/foros/showthread.php?t=54515)

gdlrinfo 21-03-2008 14:59:51

Filtrado por fecha en access
 
Hola amigos tengo un programa completamente basado en access no hay sql ni nada por el estilo solo adotables y nada mas la pregunta es como puedo filtar en un dbgrid por fecha los datos en un ComboBox tengo los 12 meses quiero que cuando por ejemplo pongan enero me filtre todos los datos de el mes de enero en del dbgrid gracias y espero su respuesta saludos

gdlrinfo 22-03-2008 01:14:35

?
 
?????????????????????????

eduarcol 22-03-2008 01:40:14

no se como se manejan los filtros en acces, pero necesitaras algo asi:

suponiendo que nMes sea el numero del mes a filtrar, y nAyo el año:

Código Delphi [-]
var
   FechaIni, FechaFin: TDate;
begin
   FechaIni := EncodeDate(nAyo, nMes, 1);
   FechaIni := EncodeDate(nAyo, nMes, DaysinaMonth(nMes));
   Tabla.Filtered := False;
   Tabla.Filter := '(Fecha >= ' + QuotedStr(DatetoStr(FechaIni)) + ') and (Fecha <= ' + QuotedStr(DatetoStr(FechaIni)) + ')';
   Tabla.Filtered := True;
end;

Pero te repito no se si el formato de la fecha te dara error en el filtro, por eso es preferible el SQL y los parametros.

gdlrinfo 22-03-2008 10:32:42

Ok
 
Amigo te cuento que lo pongo pero me tira error de conversion de datos que podra ser ???
Nesecito saber si esto se puede hacer con access desde ya muchas gracias

eduarcol 22-03-2008 14:28:42

como te decia, no se como acces maneja las fechas asi que ese error es por el formato, ahora prueba esto:

Código Delphi [-]
var
   FechaIni, FechaFin: TDate;
begin
   FechaIni := EncodeDate(nAyo, nMes, 1);
   FechaIni := EncodeDate(nAyo, nMes, DaysinaMonth(nMes));
   Tabla.Filtered := False;
   Tabla.Filter := '(Fecha >= ' + DatetoStr(FechaIni) + ') and (Fecha <= ' + DatetoStr(FechaIni) + ')';
   Tabla.Filtered := True;
end;

gdlrinfo 24-03-2008 22:06:39

hola
 
amigo como estas hay algo que no entiendo bien como hago yo para que en un combo box el programa se de cuenta de que mes elige y sepa que dias hay en ese mes eso es lo que nose como introducirlo a tu codigo gracias y espero tu respuesta saludos

eduarcol 24-03-2008 22:12:13

si el combo box va de Enero a Diciembre podrias hacer

nMes := combobox.itemindex + 1;


y el año tambien debes darlo a elegir

gdlrinfo 25-03-2008 03:01:50

Buenisimo
 
Gracias amigo ahora ya te entendi solo tengo un error es en DaysinaMonth me lo tira como no declarado lo declaro como variable y me dice que DaysinaMonth(nMes) no es un operador existente ?? que puede ser ?? gracias por todo y espero tu respuesta saludos!!!:)

Delphius 25-03-2008 03:33:03

Cita:

Empezado por gdlrinfo (Mensaje 275042)
Gracias amigo ahora ya te entendi solo tengo un error es en DaysinaMonth me lo tira como no declarado lo declaro como variable y me dice que DaysinaMonth(nMes) no es un operador existente ?? que puede ser ?? gracias por todo y espero tu respuesta saludos!!!:)

Hola gdlrinfo,
Como recomendación:
1. Cuando hables de errores, transcribe el mensaje textual. Por ello te invito a leer la guia de estilo. No somos adivinos, y conocer el error exacto que te produce es de importancia para saber como darle solución y/o investigación.
2. No copies código sin estudiar. Creería, que la función se llama DaysInMonth, y el código expuesto es DaysInAMonth. Una pequeña letra puede ser motivo de error... y esto me lleva a que cuando uno recibe el código lo mínimo que debe hacer es estudiarlo. ¿Buscaste en la ayuda sobre dicha función?
Yo diría que es posible que no tienes declarada en la sección uses la unit DateUtils.

Saludos,

eduarcol 25-03-2008 14:48:46

Mi querido Delphius esa funcion no es un error si existe, de hecho no la conocia, la descubri en este interesante hilo, leelo para que aprendas de que va la cosa, y tambien me inclino a pesar que para solucionar el error se debe incluir la uses dateutils

gdlrinfo 26-03-2008 01:45:02

Hola amigo
 
Como estas te cuento el problema es otro ahora agrege el dateutils te pongo el codigo mas abajo el tema es asi cuando uso el combo box no me muestra nada en el dbgrid nose que estoy haciendo mal pero se queda en blanco.
Código Delphi [-]
procedure TLegajo.ComboBox1Change(Sender: TObject);
var
   FechaIni, FechaFin: TDate;
   nmes, nayo : Word;
begin
   nMes := combobox1.itemindex + 1;
   nayo:=2008;
   FechaIni := EncodeDate(nAyo, nMes, 1);
   FechaIni := EncodeDate(nAyo, nMes, DaysInMonth(nMes));
   Table1.Filtered := False;
   Table1.Filter := '(Fecha >= ' + DatetoStr(FechaIni) + ') and (Fecha <= ' + DatetoStr(FechaIni) + ')';
   Table1.Filtered := True;
end;
end.

POr otro lado una duda que no tiene nada que ver yo cuando hacia que el programa corriera paso a paso antiguamente ponia el cursor del mouse sobre la variable y me mostraba el valor que contenia ahora no lo miuestra alguna idea de esto tambien cabe destacar que uso el delphi 10 lite gracias y espero su respuesta!! saludos!!

eduarcol 26-03-2008 15:34:09

y seguro que hay items que cumplan con la condicion??, otra cosa, porq no das a elegir el año??

Delphius 26-03-2008 15:45:24

Cita:

Empezado por eduarcol (Mensaje 275085)
Mi querido Delphius esa funcion no es un error si existe, de hecho no la conocia, la descubri en este interesante hilo, leelo para que aprendas de que va la cosa, y tambien me inclino a pesar que para solucionar el error se debe incluir la uses dateutils

La verdad es que la desconocía.

Gracias Eduardo... gracias por presentarmela. A ver si en algún momento se me hace la dificil:D:p

Por otro lado, veo que el código expuesto por gdlrinfo habla de DaysInMonth, y como tu dices es DaysInAMonth. ¿Se trata de un error de tipeo por parte de gdlrinfo?

Saludos,

gdlrinfo 26-03-2008 19:21:23

buenas
 
Hola amigos si los items cumplen con las funciones mira el año no lo doy a elegir porque lo uso para pobrar luego de que vea que esto funciona ok el año lo voy a hacer tambien con un combo box.

Te paso a explicar como tengo todo armado la base de datos la conecto por medio de una coneccion udl despues pongo el dbgrid con un data source haciendo coneccion a la base de datos y despues la filtro como vos me decis en la base de datos solo tengo la fecha nombre y apellido nada mas yo solo quiero que me indique los datos del mes que pongo.

Te comento que yo ya he filtrado otros dbgrid pero solo datos de personas te muestro a abajo pero eso no me sirve para lo que quiero:

Código Delphi [-]
procedure TMenuPrincipal.Edit1Change(Sender: TObject);
var
   Filtro : String;
begin
   If (Edit1.Text <> '') then
   begin
      Table1.Filtered := False;
      If combobox1.Text  = 'Nombre' then Filtro := 'Nombre Like'''+Edit1.Text + '*'''
        else If combobox1.Text = 'Apellido' then Filtro := 'apellido Like '''+ Edit1.Text + '*'''
         else If combobox1.Text = 'Nro Cliente' then Filtro := 'Ncliente Like '''+ Edit1.Text + '*''';
      Table1.Filter := Filtro;
      Table1.Filtered := True
   end
   else Table1.Filtered := False;
end;


bueno gracias y espero tu respuesta y si me podrias mandar algun ejemplo asi lo entiendo mejor te lo agradeceria mi mail es gdlrinfo@yahoo.com.ar

gdlrinfo 28-03-2008 03:14:28

??????????
 
????????????????


La franja horaria es GMT +2. Ahora son las 23:49:31.

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