Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-04-2011
Avatar de Darkseratul
Darkseratul Darkseratul is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 58
Poder: 14
Darkseratul Va por buen camino
Exclamation !!!Comparación de Fechas en una aplicación!!!

hola amigos del club, en esta ocasión les escribo por que tengo un tremendo problema pues bien les cuento como esta el enredo

Estoy desarrollando una aplicación con el propósito de que esta avise si se ha atrasado un expediente bueno les explico para que me entiendan a ver si alguien me puede ayudar
el gestor de expedientes que estoy programando va muy bien, ya saben la gestión de la información de la base de datos el problema es el siguiente

la teoría es esta cuando se crea un nuevo expediente - pasa por algunos lugares de la ciudad digamos así

nuevo expediente - (se va ha oficina central) regresa y vuelve ha irse a (centro de en micado) y de nuevo vuelve a irse a (oficina del director)

no son todos los lugares pero así es como va esto

el problema es que los expedientes se atrasan por días y hasta por meses
lo que quiero hacer es que mi aplicación me diga cuando un expediente ya tenga mas de 15 días en algún lugar




tengo unos DBDatePickerEdit donde se pone la fecha de salida del expediente una ves puesto el dato que empiece a contar los 15 días de limite y que cuando pasen los 15 días me lo resalte en un dbgrid parpadeando algo asi



Claro esta que si se pone el dato de entrega pues que ya no cuente

como le hago para calcular días en mi aplicación ??
sobre todo que no importe si se cierra la aplicación

la mera verdad no se como hacerlo no pongo código por que no tengo ni idea ni se de algún componente

se que esta difícil pero es un programa para mi papa ya que puso un negocio y pues no hay dinero como para pagarle a un programador profesional por eso me la quise aventar yo si me pudieran ayudar se los agradecería mucho

y para dejarlo claro mi aplicación esta compuesta de un adoconectec, una adotable y un datasurce la base de datos esta en access 2003 y tiene 7 tablas 3 con mas de 40 campos.

bueno gracias por su tiempo y espero que me puedan ayudar

(para el modelador por favor ayúdame no me pongas cosas como "busca en el foro" o checa estos link de la parte de abajo "ya he buscado por días y nadie a puesto este tipo de pregunta no es por se grasero pero eso no me ayuda gracias por tu tiempo.)
Responder Con Cita
  #2  
Antiguo 08-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 Darkseratul.

Cita:
(para el modelador por favor ayúdame no me pongas cosas como "busca en el foro" o checa estos link de la parte de abajo "ya he buscado por días y nadie a puesto este tipo de pregunta no es por se grasero pero eso no me ayuda gracias por tu tiempo.)
Acabo de revisar: De los temas comenzados por vos, en todos tuviste una respuesta dirécta y en uno sólo te sugirieron mirar enlaces (y todos estaban relacionados con tu pregunta). Así que no entiendo el por que del pedido...

Si algún moderador o compañero te sugiere que busques en el foro es por que el tema por el que preguntas se ha tratado muchas veces. (Seguramente
con pequeñas variantes sobre las que deberás trabajar un poco). Si encima se toma la molestia de buscar por vos y poner "los links en la parte de abajo", deberías estarle muy agradecido por que aquí tampoco se recibe dinero alguno.

Bueno, ahora a tu pregunta.

Este código te va a poner la linea en rojo con letras blancas, cuando encuentre un registro cuyo campo 'TU_CAMPO' (no pusiste el nombre del campo)
tenga más de 15 días:
Código Delphi [-]
uses DateUtils;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DaysBetween(Now,DBGrid1.DataSource.DataSet.FieldByName('TU_CAMPO').Value) > 15 then
  begin
    DBGrid1.Canvas.Brush.Color:= clRed;
    DBGrid1.Canvas.Font.Color:= clWhite;
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;

Si deseas que parpadee, lo podés investigar (pista: TTimer), ahora si te da pereza... ¡ A llamar al programador profesional !

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 08-04-2011 a las 05:33:28.
Responder Con Cita
  #3  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
bueno, amigo, primero que todo, para colorear tu grilla

Código Delphi [-]
procedure Tform1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
if Query1.FieldByName('Diferenciadias').AsInteger >= 15 then //en general, cualquier condición

if Column.FieldName='NombreDelComprador' then // solo vas a olorear una casilla
  if (gdSelected in State) then
      Begin
        DBGrid1.canvas.Brush.Color:=clNavy; //lo que sea
      end
    else
      Begin
        dbGrid1.canvas.Brush.Color :=clMaroon;//lo que sea
        dbGrid1.canvas.Font.Color :=clWhite;//lo que sea
      end;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

Segundo, tu necesidad en general es clara, pero la forma como la expresas no tanto, asi que veamos...

Ahora, para la diferencia de las fechas es relativamente facil, pues las fechas en si, se almacenan como Números reales... (Float, Double)

Asi que si haces Fecha1-Fecha2 tendras un valor numerico, como 15, 16, etc.


Dependiendo del motor de Bd que utilices, pudes tambien hacer la resta en la sentencia SQL..

Código SQL [-]
Select Fecha1-Fecha2 as diferencia from expedientes

espero haberte ayudado...

Con respecto a tu comentario:

Cita:
(para el modelador por favor ayúdame no me pongas cosas como "busca en el foro" o checa estos link de la parte de abajo "ya he buscado por días y nadie a puesto este tipo de pregunta no es por se grasero pero eso no me ayuda gracias por tu tiempo.)
Entiendo que no es grosero y te invito a visitar el siguiente hilo para que participes... http://www.clubdelphi.com/foros/showthread.php?t=73161

Es un poco extenso, pero se propone "bajarle el volumen" a los comentarios de parte y parte... un salduo,
Responder Con Cita
  #4  
Antiguo 08-04-2011
Avatar de Darkseratul
Darkseratul Darkseratul is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 58
Poder: 14
Darkseratul Va por buen camino
Talking Muchas gracias ecfisa

Muchas gracias por tu pronta respuesta respuesta pero no entendí muy bien este código me contara los días??

y los campos que tengas mas de los 15 días se resaltaran en rojo ????

Muchas gracias por tu ayuda
Responder Con Cita
  #5  
Antiguo 08-04-2011
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
nop, el codigo no te contara los dias...


pero si tienes la fecha en una campo de un datset, puedes hacer algo como:

if (Now() - Query1.FieldByName('FechaEntrega').AsDatetime) >= 15 then
//hacer algo...

es una resta simple contraa la fecha de hoy..
Responder Con Cita
  #6  
Antiguo 08-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
Cita:
Empezado por Darkseratul Ver Mensaje
Muchas gracias por tu pronta respuesta respuesta pero no entendí muy bien este código me contara los días??

y los campos que tengas mas de los 15 días se resaltaran en rojo ????

Muchas gracias por tu ayuda
De nada.

El código tál como te dije te pondrá en rojo aquellos registros (lineas) cuya fecha tenga más de 15 días a la fecha actual.

Del cálculo se encarga la function DaysBetween (unit DateUtils), que devuelve el número de días enteros entre dos valores declarados como TDateTime.

No interpreté que una línea pudiera tener varias columnas en rojo... si fuera así podrías probar el código que puso gatosoft. Por mi parte voy a pensarlo ...

Un saludo.
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 08-04-2011 a las 06:38:06.
Responder Con Cita
  #7  
Antiguo 08-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 de nuevo DarkSeratul.

Lo prometido es deuda. Este código pone en rojo sólo aquellas celdas que contengan un TDateTimeField y su valor supere los 15 días a la fecha:

Código Delphi [-]
uses DateUtils;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Column.Field is TDateTimeField)and
      (DaysBetween(Now,Column.Field.Value) > 15) then
  begin
     DBGrid1.Canvas.Brush.Color:= clRed;
     DBGrid1.Canvas.Font.Color:= clWhite;
     DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 08-04-2011
Avatar de Darkseratul
Darkseratul Darkseratul is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 58
Poder: 14
Darkseratul Va por buen camino
Talking Muchas gracias ecfisa de nuevo

Si eres mujer te besaría y si eres hombre te invitaba a una parrilla da con cervezas incluidas

sabes me has dado una parte de la solución a un problemas muy grande que tengo
gracias al dato que mas dado ya tengo idea de como hacer el resto de mi aplicación ya solo falta estructurarlo y aplicar la solución a mas de 40 campos muy bueno espesare ha aplicarme y mañana te comento como me fue y pues muchas gracias ecfisa muchisimas gracias

cuando mi aplicación este lista la subiré al club para compartirla con todos

gracias,gracias,gracias,gracias,gracias,gracias,gracias,gracias,gracias,gracias,
Responder Con Cita
  #9  
Antiguo 08-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
Para tu desilusión, me quedo con la parrillada.


Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 08-04-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Para tu desilusión, me quedo con la parrillada.
Un saludo.
¡¡¡ Aunque le cueste dinero !!!
Responder Con Cita
  #11  
Antiguo 13-04-2011
Avatar de Darkseratul
Darkseratul Darkseratul is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 58
Poder: 14
Darkseratul Va por buen camino
Exclamation gracias a todos por responder le debo una parrilada

Gracias

El código va de perlas pero mmm tengo un detalle con el código de ecfisa

Código Delphi [-]
uses DateUtils;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Column.Field is TDateTimeField)and
      (DaysBetween(Now,Column.Field.Value) > 15) then
  begin
     DBGrid1.Canvas.Brush.Color:= clRed;
     DBGrid1.Canvas.Font.Color:= clWhite;
     DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;

me da un error cuando unos de los campos(cual sea) esta vació me dice que el campo debe estar lleno como le hago para que los campos que no tengan información(fechas) no los tome en cuenta
Responder Con Cita
  #12  
Antiguo 13-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 Darkseratul.

Tenés que agregar una línea al condicional:
Código Delphi [-]
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if (Column.Field.AsString > '') and
     (Column.Field is TDateTimeField) and
     (DaysBetween(Now,Column.Field.Value) > 15) then
  begin
     DBGrid1.Canvas.Brush.Color:= clRed;
     DBGrid1.Canvas.Font.Color:= clWhite;
     DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
  end;
end;

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 13-04-2011
Avatar de Darkseratul
Darkseratul Darkseratul is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 58
Poder: 14
Darkseratul Va por buen camino
Thumbs up Muchas pero muchas gracias ecfisa

Eres una persona genial lastima que vivas tan lejos sino parranda segura contigo y pues mil gracias tu si que te la sabes de todas

estoy muy agrede sido contigo y con esta maravillosa comunidad

gracias gracias gracias
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
comparacion de fechas alejitoo Varios 7 25-06-2010 15:08:56
Comparación de Fechas silver07 Conexión con bases de datos 6 26-09-2007 17:43:05
Optimizar comparación de fechas kuan-yiu Varios 11 27-07-2006 10:11:02
comparación de fechas Nelly Varios 2 27-10-2005 17:30:42
Comparación de Fechas sierraja Varios 5 19-06-2005 06:56:20


La franja horaria es GMT +2. Ahora son las 19:23:53.


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