Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Fitrar por fecha actual (https://www.clubdelphi.com/foros/showthread.php?t=53708)

javimax182 27-02-2008 18:02:15

Fitrar por fecha actual
 
Hola mi nombre es javier, estoy trabajando con un query en delphi 7.
Lo que yo quiero es Filtrar por las ventas que se realizaron en el dia, ya que la tabla posee un campo llamado "Fecha de Compra". Despues lo que quisiera es filtrar las ventas en el ultimo mes, entre otras...
Les ruego que me ayuden, porque lo necesito inmediatamente. No encontre un hilo que me lo pudiera responder, si alguien sabe de un que me avise. Gracias.

Caral 27-02-2008 18:15:43

Hola javimax182
Bienvenido al club.
Es dificil dar una opinion sin suficientes datos.
Delphi 7. Bien
Base de datos ????
Componentes con que enlazas la tabla ???
Otros datos que puedas aportar
Saludos

Delphius 27-02-2008 18:20:22

Hola javimax182,
Bienvenido a clubdelphi. Como recién ingresas te informo sobre la guia de estilo, recomiendo su lectura.

Con respecto a tu problema, hay muchos hilos sobre el tema. Lo puedes hacer con Filter,con una SQL...

Sería bueno que nos aportes más detalles:
¿Que motor usas?
¿Que componentes usas?
¿Puedes mostrarnos un poco de como estás trabajando?

Saludos,

javimax182 27-02-2008 18:20:33

Utizo una tabla Paradox 7, un dbgrid, un datasoure, un query y un combobox en donde yo selecciono el periodo de tiempo que yo quisiera que filtre (Todos, Hoy, ultimos 10 dias, Ultimos 30 dias y Este mes).
Pero no se como hacer ese tipo de filtrado.
Por favor ayudenme. Gracias.

juanpe 27-02-2008 18:20:49

query.sql.clear;
query.sql.add('select * from Ventas where fecha_ventas between :fechainicio and :fechafin');
query.parambyname('fechainicio').asdate:= date-15; //la fecha de hace 15 dias
query.parambyname('fechafin').asdate:= date; //la fecha de hoy
query.execsql;

Espero que te valga.

javimax182 27-02-2008 18:26:58

Gracias por eso pero, como es para filtrar por las ventas que se hicieron en el dia. y como es para filtrar las ventas que se hicieron en el mes actual, por ejemplo:Febrero.

juanpe 27-02-2008 18:31:28

Del dia, por ejemplo

query.sql.clear;
query.sql.add('select * from Ventas where fecha_ventas like :fecha);
query.parambyname('fecha').asdate:= date;
query.execsql;

De febrero

query.sql.clear;
query.sql.add('select * from Ventas where fecha_ventas between :fechainicio and :fechafin');
query.parambyname('fechainicio').asstring := '1/02/2008';
query.parambyname('fechafin').asstring := '29/02/2008';
query.execsql;

Creo que ambas fechas son incluidas en los resultados.

javimax182 27-02-2008 18:35:35

si pero que no se tenga que depender de 1/02/2008...etc
Sino que funcione para todos los meses y no tenga que andar modificando el codigo. Gracias

Delphius 27-02-2008 19:02:31

Cita:

Empezado por javimax182 (Mensaje 269045)
si pero que no se tenga que depender de 1/02/2008...etc
Sino que funcione para todos los meses y no tenga que andar modificando el codigo. Gracias

Explicate mejor javimax182. ¿Tu lo que quieres es pasar en modo de ejecución el rango de fechas?

Nada te impide hacer cosas así:

Código Delphi [-]
Query1.ParamByName('tu_parametro').asString := Edit1.Text;

Es un ejemplo, deberías adaptarlo al tipo de datos que reciba. Pero creo que se entiende la idea;). Si tienes dudas avisa.

Saludos,

javimax182 27-02-2008 19:18:21

No, me entendieron mal, lo que yo quiero es que filtre por las ventas que se hicieron en el mes actual.
Por ejemplo: si hoy seria 7 de mayo. Me tendria que filtrar todas las ventas que se hicieron del 1 de mayo hasta el 7 de mayo.
Sabes como?. Gracias

javimax182 27-02-2008 19:38:39

HELP ME, PLEASE.
ME FALTA SOLA ESE FILTRADO. POR FAVOR AYUDENME. El filtrado de las ventas del mes actual.

Caral 27-02-2008 19:44:51

Hola
Por que no usas dos datetimepicker en los que pondras la fecha 1 y la dos, ose el rango de fechas, asi tendras solucionado esto.
Saludos

javimax182 27-02-2008 19:48:55

No pero yo quiero que filtre eso automaticamente sin tener que seleccionar nada. No sabrias como?

Yo habia encontrado una funcion como esta:
Cita:

if combobox2.ItemIndex = 4 then begin
With QVentas do begin
Close;
SQL.Clear;
SQL.Add ('SELECT * FROM ResumenVentas where FechaCompra Between to_date("01/"¦¦to_char(' +(hoy)+',MM/YY),"DD/MM/YY"');
Open;
end; end;
pero no me anda en delphi. me salta error.
Me podrian ayudar?

egostar 27-02-2008 19:53:06

Cita:

Empezado por javimax182 (Mensaje 269091)
No pero yo quiero que filtre eso automaticamente sin tener que seleccionar nada. No sabrias como?

Podrías aclarar esto que dices, si no seleccionas algo como puedes filtrar....:confused::confused::confused:

Salud OS

javimax182 27-02-2008 19:55:50

Lo que yo quiero es que filtre por las ventas que se hicieron en el mes actual.
Por ejemplo: si hoy seria 7 de mayo. Me tendria que filtrar todas las ventas que se hicieron del 1 de mayo hasta el 7 de mayo.

Pero que aga todo eso sin que el usuario tenga que ingresar nada ni seleccionar nada.
Sabes como?. Gracias

Caral 27-02-2008 19:57:11

Hola
Todos los que te han contestado saben como filtrar fechas, no creo que sea nada complicado, lo dificil esta en entender el concepto de lo que necesitas.
Dices que si hoy es 7 que filtre del 1 al 7, vale, primero lo que hay que hacer es decirle al programa que hoy es 7, no te parece?, y despues decirle que filtre desde el primer dia del mes.
Automaticamente me suena un poco complicado, tal vez con dos edit uno con la fecha actual y otro que calcule la resta de esa menos el total del mes, uhhi, tarea de maestro.
No se, prefiero mi opción.
Saludos

javimax182 27-02-2008 20:00:15

ok masa o menos te entiendo... pero mas o menos como se cuando es el primer dia del mes?
Les agradeceria si me pudieran mostrar como. Gracias

egostar 27-02-2008 20:04:37

Cita:

Empezado por javimax182 (Mensaje 269094)
Lo que yo quiero es que filtre por las ventas que se hicieron en el mes actual.
Por ejemplo: si hoy seria 7 de mayo. Me tendria que filtrar todas las ventas que se hicieron del 1 de mayo hasta el 7 de mayo.

Pero que aga todo eso sin que el usuario tenga que ingresar nada ni seleccionar nada.
Sabes como?. Gracias

Ya, ahora entiendo, puedes hacer esto

Código Delphi [-]
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
  Query1.Close;
  DecodeDate(Now, Year, Month, Day);
  Query.sql.clear;
  Query.sql.add('select * from Ventas where EXTRACT(MONTH FROM fecha_ventas) = :mes');
  Query1.ParamByName('mes').AsInteger := Month;
  Query1.Open;
end;

Salud OS

Delphius 27-02-2008 20:08:18

javimax182, por más iniciado que seas no puedo dejar de pasar de alto muchas cosas:
1. Aqui nadie viene a pedir cosas por urgencias.
2. No estamos en la obligación de responderte, aqui el que ayuda lo hace de forma desinteresada y cuando tiene el tiempo. Esto está abierto las 24 hrs pero eso no quiere decir que tengamos la obligación de estar presente y auxiliarte cuando desees.
3. Existen variados hilos en donde este tema se ha tratado, yo diría que todos los días aparece por lo menos 2 o 3 hilos sobre esto... existe un buscador y te sugiero que lo uses.
4. Si te explicases mejor no estaríamos adivinando.

Espero que comprendas que aquí, se pide el respeto a la guia de estilo.

Saludos,

maeyanes 27-02-2008 20:10:08

Hola...

Para hacer lo que quieres solo te basta saber cual es la fecha actual, lo cual logras con la función Now o Date...

Teniendo la fecha actual ya sabes cual es el mes correspondiente, con ese dato ya puedes hacer tu consulta o el filtro de tu tabla:

Código Delphi [-]
var
  ADay, AMonth, AYear: Word;
  FechaInicial, FechaFinal: TDateTime;

begin
  DecodeDate(Now, AYear, AMonth, ADay);
  FechaInicial := EncodeDate(AYear, AMonth, 1);
  FechaFinal := EncodeDate(AYear, AMonth, 31); // Aquí podrías verificar cual es el 
  // máximo de días de el mes especificado para evitar errores de fecha inválida
  TablaVentas.Filter := 'Fecha >= ' + DateToStr(FechaInicial) + ' and Fecha <= ' + DateToStr(FechaFinal);
  TablaVentas.Filtered := True
end;

Espero que este código te de una idea de como lograr lo que deseas...



Saludos...

egostar 27-02-2008 20:15:16

Cita:

Empezado por javimax182 (Mensaje 269097)
ok masa o menos te entiendo... pero mas o menos como se cuando es el primer dia del mes?
Les agradeceria si me pudieran mostrar como. Gracias

Desde donde yo lo veo, eso no es necesario, solo necesitas saber que mes es el que estas buscando, obviamente no tendrás mas ventas que del día actual, sin embargo :rolleyes:, hay algo que falta en el código que te puse ya que te pudiera dar datos incorrectos, te lo dejo de tarea, es lo correcto, no?

Salud OS

javimax182 27-02-2008 20:40:00

Gracias a todos por el apoyo que me estan dando. Pero ahora tengo dos errores


En el filtrado por por las ventas del dia actual, me salta este error Type mismatch in expresion
Este es el codigo que le puse:

Cita:

With QVentas do begin
Close;
sql.clear;
sql.add('select * from ResumenVentas where FechaCompra like :fecha');
parambyname('fecha').asdate:= date;
execsql;
Open;
end;

En el de las ventas del mes me salta este error invalid argument to date encode
Este es el codigo que le puse:

Cita:

DecodeDate(Now, AYear, AMonth, ADay);
FechaInicial := EncodeDate(AYear, AMonth, 1);
FechaFinal := EncodeDate(AYear, AMonth, 31);
With QVentas do begin
Close;
SQL.Clear;
sql.add('select * from ResumenVentas where FechaCompra between :fechainicio and :fechafin');
parambyname('fechainicio').asdate:= FechaInicial; //Primer dia del mes
parambyname('fechafin').asdate:= FechaFinal; //Final del mes
execsql;
Open;
end;
Yo no les exijo nada, solo les estoy pidiendo ayuda. Les agradesco por todo lo que me ayudaron hasta ahora. Si me pueden seguir ayudando, mejor.

egostar 27-02-2008 20:43:05

Cita:

Empezado por javimax182 (Mensaje 269109)
Gracias a todos por el apoyo que me estan dando. Pero ahora tengo dos errores

En el filtrado por por las ventas del dia actual, me salta este error [b]Type mismatch in expresion

En el de las ventas del mes me salta este error [b]invalid argument to date encode

Yo no les exijo nada, solo les estoy pidiendo ayuda. Les agradesco por todo lo que me ayudaron hasta ahora. Si me pueden seguir ayudando, mejor.

:rolleyes::rolleyes: Ya viste la solución que te puse.......

Vaya,

Salud OS

javimax182 27-02-2008 20:47:26

si vi tu solucin pero tu solucion solo se pregunta por el mes
y tambien mostraria el mes de los años anteriores, yo solo quiero el del mes en progreso.
Gracias

egostar 27-02-2008 20:49:58

Cita:

Empezado por javimax182 (Mensaje 269112)
si vi tu solucin pero tu solucion solo se pregunta por el mes
y tambien mostraria el mes de los años anteriores, yo solo quiero el del mes en progreso.
Gracias

Pues precisamente esa es la tarea que te puse,

Cita:

Empezado por YO MISMO
Desde donde yo lo veo, eso no es necesario, solo necesitas saber que mes es el que estas buscando, obviamente no tendrás mas ventas que del día actual, sin embargo , hay algo que falta en el código que te puse ya que te pudiera dar datos incorrectos, te lo dejo de tarea, es lo correcto, no?

Acaso no seria bueno que le pensaras un poco y solucionaras ese pequeño detalle.....

Salud OS

maeyanes 27-02-2008 20:50:08

Hola...

Además, no es solo copiar y pegar... documentate bien antes de usar una función o procedimiento que no conozcas... Lee en la ayuda como usar EncodeDate y DecodeDate...

El código que puse lo escribí sin probarlo y por consiguiente puede que haya tenido algún error...



Saludos...

javimax182 27-02-2008 20:57:38

Si es que me pueden seguir ayudando mi mail es javimax182@hotmail.com

maeyanes 27-02-2008 20:59:06

Hola de nuevo...

Solo para recordarte... aquí no se dan ayudas vía correo electrónico, y esto es así para que todo mundo se pueda beneficiar de las ayudas que aquí proporcionamos...



Saludos...

egostar 27-02-2008 21:02:23

Cita:

Empezado por javimax182 (Mensaje 269118)
Si es que me pueden seguir ayudando mi mail es javimax182@hotmail.com

Mira javimax182, ya te ha dicho nuestro amigo Delphius que estas infringiedo nuestra guia de estilo, si no quieres esforzarte un poco para resolver TUS PROBLEMAS, yo no voy a hacer tu tarea, así que lo pensaré dos veces para contestar en tus hilos.

javimax182 27-02-2008 21:28:25

Disculpa si te ofendi. Pero me mate buscando una solucion pero no la encontre. Solo les pido que me ayuden a arreglar esos dos problemitas nomas. Gracias por todo:)

Caral 27-02-2008 21:39:49

Hola
Yo sigo sin entender.
Como se pretende sacar las ventas del mes empezando por el dia 1 asta el dia de hoy.
Contablemente no es correcto, las ventas se pueden cerrar uno o dos dias antes o despues de la fecha (calendario), por esa razon seria ilogico sacar un dato de venta si no es el correcto.
A mi solo se me ocurre poner una serie de variables con los datos año, mes y dia, que ademas tendran que actualizarse, y poner en este caso otras pero solo con el mes y el año, ya que el dia sera el que se defina.
Bueno asi lo veo yo.
En apariencia las fechas exactas no servirian.
A ver que pasa con esto.
Saludos

javimax182 27-02-2008 21:49:39

Yo quiero hacer esto para que el dueño sepa como van las ventas del mes en curso.
Ah y no saben porque me aparecen esos errores?
Graacias

Caral 27-02-2008 22:22:08

Hola
Vamos a ver como va esto.
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var  
 Mes  :Integer;
 FFecha: TDateTime;
 FechaAc, Fecha1, Mes1, Dia1: string;
begin
  Dia1:= '01'; // El primer dia del mes
  Mes:= MonthOfTheYear(Date); // el mes en curso
  FechaAc:= DateToStr(Now);  // la fecha actual completa
  FFecha:= Now;  // la fecha

  If Mes >= 10 then  // aqui genero una condicion
  begin
  Mes1:= '/';
  end
  else
  Mes1:= '/0';  // aqui termina

  // aqui hago string la fecha completa donde empieza el calculo.
  // tomara en cuenta el primer dia, el mes en curso y año.
  Fecha1:= Dia1 + Mes1 + IntToStr(Monthof(FFecha)) + '/'+ IntToStr(Yearof(FFecha));

// aqui empieza el codigo tuyo.
With QVentas do begin
Close;
SQL.Clear;
sql.add('select * from ResumenVentas where FechaCompra >= :fechainicio and FechaCompra <= :fechafin');
parambyname('fechainicio').Value:= StrToDate(Fecha1); //Primer dia del mes
parambyname('fechafin').Value:= StrToDate(FechaAc);  //Fecha actual del mes
//execsql;
Open;
Creo que esta claro, soy novato.:D:D
Saludos

javimax182 27-02-2008 22:33:00

Disculpa pero no me reconoce las instruciones MonthOfTheYear Monthof Yearof.
Usan algun tipo de uses?


Caral 27-02-2008 22:34:28

Hola
Perdon se me olvido decirte.
coloca este despues de implementacion:
Código Delphi [-]

implementation

uses DateUtils;

Saludos

maeyanes 27-02-2008 22:34:43

Hola...

Así es... tienes que poner DateUtils en el uses de la forma... pero, solo si tienes Delphi 6 en adelante...


Saludos...

javimax182 27-02-2008 22:39:37

Si funciona gracias. Pero el que me tira error es el de las ventas del dia.

Este es el codigo que le puse:

Cita:

With QVentas do begin
Close;
sql.clear;
sql.add('select * from ResumenVentas where FechaCompra like :fecha');
parambyname('fecha').asdate:= date;
execsql;
Open;
end;

Me tira este error Type mismatch in expresion

Sabes porque?

maeyanes 27-02-2008 22:42:07

Y ya probaste con:

Código Delphi [-]
sql.add('select * from ResumenVentas where FechaCompra = :fecha');

Caral 27-02-2008 22:47:42

Hola
Código Delphi [-]
var  
 FFecha: TDateTime;
begin
  FFecha:= Now;  // la fecha
// aqui empieza el codigo tuyo.
With QVentas do begin
Close;
sql.clear;
sql.add('select * from ResumenVentas where FechaCompra = :fecha');
parambyname('fecha').Value:= FFecha;
//execsql;
Open;
end;
Saludos

javimax182 27-02-2008 22:51:00

SIIIIIIIIIIIIIII. GRACIAS TODOS. CON TODO LO QUE ME AYUDARON, CLUB DELPHI SE GANO UN FIEL USUARIO. :cool:


La franja horaria es GMT +2. Ahora son las 18:45:11.

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