Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-02-2016
Avatar de BDWONG
BDWONG BDWONG is offline
Miembro
NULL
 
Registrado: nov 2013
Posts: 113
Poder: 13
BDWONG Va por buen camino
Hola compañero puedes probar con la función DaysBetween que nos regresa la cantidad de dias entre dos fechas
te dejo un ejemplo:

Código Delphi [-]
uses
  SysUtils,dateutils;

var
fechaInicial,fechaFinal:TDateTime;
diasEntreFechas:Integer;
begin

   TryStrToDate('01/01/2016',fechaInicial);
   TryStrToDate('10/01/2016',fechaFinal);
   diasEntreFechas:=DaysBetween(fechaInicial,fechaFinal);

   if diasEntreFechas<=10 then
     Writeln('Esta en el rango de 10 dias, son: ',diasEntreFechas,' dias ')
   else
      Writeln('No esta en el rango de 10 dias, son: ',diasEntreFechas,' dias ');

   readln;
end.

Si no es lo que buscas comentalo para poder ayudarte.
Saludos....
Responder Con Cita
  #2  
Antiguo 11-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
Hola

Hola muchas gracias por responder mas bien quiero un mensaje que al momento de querer insertar las dos fechas y exista la fecha dentro del rango me diga que ya existe, no presisamente es la fecha 01/01/2016 al 01/10/2016, el usuario puede capturar cualquier fecha lo que quiero es que el sistema me lanse un menaje cuando el usuaria quiera insertar una fecha que ya este en la base datos.

Saludos!!

Última edición por davidmedina29 fecha: 11-02-2016 a las 01:58:53. Razón: Olvide especificarlo
Responder Con Cita
  #3  
Antiguo 11-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 18
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Bienvenido

Lo que comento el compañero BDWONG es correcto, ya que es una de las posibles soluciones

Hay varias formas de solucionar tu problema: Bloquear la insercion cuando la fecha ya existe

Podes validar en el nivel de la base de datos: con triggers o definiendo una clave
Podes validar a nivel de DataSet (si es que usas DataSets para insertar), mediante los eventos, por ejemplo BeforePost
Podes lanzar una consulta (Query) entre esas fechas: si devuelve algo significa que "esta ocupado", si no, esta disponible
Podes recorrer un DataSet y usar la funcion DaysBetween
...

Cual es la mas apropiada solamente podes decirlo vos ya que no sabemos como funciona tu aplicacion; no sabemos si programas a nivel de base de datos (stored procedures, triggers, etc), a nivel de servidor de aplicaciones, si trabajas con dataset o combinas query + comands; no sabemos que base de datos estas usando; no sabemos si se ejecutan operaciones en concurrente; y un largo etc

No es un regaño, simplemente que es imposible responder con precision cuando la pregunta no es precisa. A veces nos dan la respuesta no de la manera en que esperamos, pero un ejemplo o caso similar y esta en nosotros el entenderlo, asimilarlo y aplicarlo

El titulo y consulta de tu pregunta es "Como Saber si una fecha está entre otras dos fechas" y eso se puede hacer con DaysBetween, con CompareDate, con InRange, y seguro muchas mas formas que desconozco
Responder Con Cita
  #4  
Antiguo 11-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 davidmedina29.

No está del todo claro si la consulta es como verificar si una fecha está entre otras dos (como dice el título de tu primer mensaje), o verificar si una fecha ya existe en la base de datos (como dice el texto de tu segundo mensaje).

En el primer caso, el tipo TDate se puede comparar por <, >, =, <=, >=, sea directamente sobre los valores o haciendote una función si la reutilización lo amerita:
Código Delphi [-]
function IsDateBetweenDates(const CurrentDate, FromDate, ToDate: TDate): Boolean;
begin
  Result := (CurrentDate >= FromDate) and (CurrentDate <= ToDate);
end;

En el segundo caso, como te ha comentado Agustín, deberías dar toda la información sobre el gestor de BD y componentes con que estas trabajando para poder darte una respuesta concreta. (ver un poco del código que usas tampoco nos vendría mal).

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 11-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
Smile Hola

Buen dia una disculpa si no me explique bien, uso delphi 7 y sql server, mi idea es que al momento de dar click en guardar me lanze un mensaje de error si es que el rango de las dos fechas que pongo ya existe en la BD, aqui les dejo el codigo del boton guardar.

Código Delphi [-]
with msqry1 do  // en esta parte esta la idea de lo que quiero hacer pero no estabien.
  begin
      close;
      SQL.Clear;
      sql.Add(('Select*From CA_PERIODOSINGRESOS Between :Inicio and :Fin'));
      msqry1.ParamByName('Inicio').AsDate:=cxDateEdit1.Date;
      msqry1.ParamByName('Fin').AsDate:=cxDateEdit2.Date;
      Open;
  end;
  if not msqry1.IsEmpty then
      MessageDlg('La fecha ya existe', mtError, [mbOK], 0) 
      else
  if cxDateEdit2.Text='' then
    begin
        MessageDlg('Falta Fecha Final', mtError, [mbOK], 0);
      end
  else
    if cxDateEdit1.Text='' then
      begin
        MessageDlg('Falta Fecha Inivial', mtError, [mbOK], 0);
        end
      else
      if cxComboBox1.Text='' then
        begin
          MessageDlg('Falta Ejercicio', mtError, [mbOK], 0);
          end
        else
        if cxTextEdit1.Text='' then
          begin
            MessageDlg('Falta Periodo', mtError, [mbOK], 0)
            end
          else
          if (cxDateEdit1.Date) > (cxDateEdit2.Date) then
            begin
              MessageDlg('La fecha inicial no puede ser mayor a la final', mtError, [mbOK], 0)
              end
             else
    begin
      DM.msqry1.Append;
      DM.msqry1.FieldByName('Ejercicio').AsString := cxComboBox1.Text;
      DM.msqry1.FieldByName('Periodo').AsString := cxTextEdit1.Text;
      DM.msqry1.FieldByName('Inicio').AsDateTime := cxDateEdit1.Date;
      DM.msqry1.FieldByName('Fin').AsDateTime := cxDateEdit2.Date;
      DM.msqry1.Post;
      DM.msqry1.SQL.Add('order by Periodo');
      MessageDlg('Dato Guardado', mtInformation, [mbOK], 0);
      fCatPeriodosInNvo.Close;
        cxTextEdit1.Clear;
        cxDateEdit1.Clear;
        cxDateEdit2.Clear;
      end;
end;

Alguna sugerencia? se los agradeceria mucho.
Saludos!!
Responder Con Cita
  #6  
Antiguo 11-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
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 David.

Intenta de este modo:
Código Delphi [-]
...
  DM.msqry1.Close;
  DM.msqry1.SQL.Clear;
  DM.msqry1.SQL.Add('SELECT * FROM CA_PERIODOSINGRESOS');
  DM.msqry1.SQL.Add('WHERE CAMPO_FECHA BETWEEN :INICIO AND :FIN'); // (*)
  DM.msqry1.ParamByName('INICIO').AsDate := cxDateEdit1.Date;
  DM.msqry1.ParamByName('FIN').AsDate    := cxDateEdit2.Date;
  DM.msqry1.Open;
  if not DM.msqry1.IsEmpty then
    raise Exception.Create('La fecha ya existe');
...
(*) Donde CAMPO_FECHA sería el nombre de la columna a controlar.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 18-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola David.

Intenta de este modo:
Código Delphi [-]
...
  DM.msqry1.Close;
  DM.msqry1.SQL.Clear;
  DM.msqry1.SQL.Add('SELECT * FROM CA_PERIODOSINGRESOS');
  DM.msqry1.SQL.Add('WHERE CAMPO_FECHA BETWEEN :INICIO AND :FIN'); // (*)
  DM.msqry1.ParamByName('INICIO').AsDate := cxDateEdit1.Date;
  DM.msqry1.ParamByName('FIN').AsDate    := cxDateEdit2.Date;
  DM.msqry1.Open;
  if not DM.msqry1.IsEmpty then
    raise Exception.Create('La fecha ya existe');
...
(*) Donde CAMPO_FECHA sería el nombre de la columna a controlar.

Saludos
gracias por responder ecfisa pero hay un detalle, el problema es que solo tengo como campos date (Inicio) y (Fin) no tengo otro campo como el que pones CAMPO_FECHA que se puede hacer?

gracias!!
Responder Con Cita
  #8  
Antiguo 11-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 18
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Bien pero cual es el problema? Da error en algun punto? El query no devuelve los resultados esperados?

Has depurado tu programa?
Responder Con Cita
  #9  
Antiguo 11-02-2016
davidmedina29 davidmedina29 is offline
Miembro
NULL
 
Registrado: feb 2016
Posts: 34
Poder: 0
davidmedina29 Va por buen camino
Smile Hola

Gracias por sus respuestas, no estaba tan perdido ecfisa pero el detalle que no tengo esa columna de campo_fecha debe de tener solo fecha inicial y fecha final entonces ahi esta el detalle amigo mi base de datos cuenta con 4 campos: Ejercicio, Periodo, Inicio y Fin no le puedo meter otro campo. que podria hacer ahi

Saludos y gracias de nuevo por responder!!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
¿saber si una fecha o mas estan dentro de un rango de fechas? JXJ Firebird e Interbase 17 25-08-2010 23:55:43
Error al filtrar una fecha entre un rango de fechas dec Trucos 0 01-07-2006 01:01:41
funcion para saber los dias que hay entre dos fechas estebanx Varios 5 19-04-2006 23:01:51
como calcular los dias entre fechas. carlos gonzalez Varios 2 27-08-2005 01:30:59
Cómo consulto entre dos fechas ? K4RL0S SQL 3 24-12-2003 10:58:07


La franja horaria es GMT +2. Ahora son las 01:01:57.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi