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 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cool Bucle While para Comprobar Fecha en Base de Datos

Saludos a todos aca!
he estado mirando este club y me gusto su forma de trabajar, los felicito!
Ya se fijaron de que soy nuevo acá, no soy experto pero espero que lo poco que pueda aportar ayudar en algo!

Y por si acaso 'Leí la guía de estilo' XD

entremos en materia:
Tengo un bucle para comprobar un dato de una columna de registro para que me diga los articulos que estan para reordenar con el siguiente bucle:
Código Delphi [-]
begin
DM.AQProductos.First;
While not DM.AQProductos.Eof Do
Begin
if DM.AQProductos.FieldByName('Reordenar').Value <= Fconfiguracion.DBEreordenar.text
then
Memo1.Lines.Add(DM.AQProductos.FieldByName('Descripcion').Text+' Para reordenar'+#13#10);
DM.AQProductos.Next;
end;

de la misma forma en el Form de configuración tengo otro campo que se llama fecha de vencimiento,
Como hago otro bucle para comprobar que la fecha de vencimiento le quedan de hoy a 15 días para llegar?
y que pueda poner la cantidad de días en configuración.

-- Base de datos Access --
-- Componentes Ado --

Saludos a todos!
Responder Con Cita
  #2  
Antiguo 16-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por Edwardfeliz Ver Mensaje
Y por si acaso 'Leí la guía de estilo' XD

Bienvenido
Responder Con Cita
  #3  
Antiguo 16-04-2014
Avatar de newtron
[newtron] newtron is offline
Membrillo Premium
 
Registrado: abr 2007
Ubicación: Motril, Granada
Posts: 3.462
Poder: 21
newtron Va camino a la fama
Cita:
Empezado por Edwardfeliz Ver Mensaje
de la misma forma en el Form de configuración tengo otro campo que se llama fecha de vencimiento,
Como hago otro bucle para comprobar que la fecha de vencimiento le quedan de hoy a 15 días para llegar?
y que pueda poner la cantidad de días en configuración.
No estoy seguro si es por lo que preguntas pero si restas a la fecha de vencimiento el día actual te da el número de días entre una y otra.

Saludos
__________________
Be water my friend.
Responder Con Cita
  #4  
Antiguo 16-04-2014
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Eso lo puedes hacer de forma mas eficiente usando el mismo SQL, del tipo:

Código SQL [-]
SELECT [campos] FROM [tabla] WHERE Reordenar <= ?param

Date una estudiada de como se usa SQL en especial para tu motor de base de datos.
__________________
El malabarista.
Responder Con Cita
  #5  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por newtron Ver Mensaje
No estoy seguro si es por lo que preguntas pero si restas a la fecha de vencimiento el día actual te da el número de días entre una y otra.

Saludos
No es restarla, es sumarla, es decir: es como si se fuera a poner en un Datetimerpicker (Now+Fconfiguracion.Editdiasdevencimiento).

Saludos!
Responder Con Cita
  #6  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje

Bienvenido
Gracias .-.
Responder Con Cita
  #7  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por mamcx Ver Mensaje
Eso lo puedes hacer de forma mas eficiente usando el mismo SQL, del tipo:

Código SQL [-]
SELECT [campos] FROM [tabla] WHERE Reordenar <= ?param

Date una estudiada de como se usa SQL en especial para tu motor de base de datos.
llevo la idea pero no entiendo la salida
Algo mas o menos asi?
Código Delphi [-]
With DM.Productos Do
begin
Close;
SQL.Clear;
SQL.Add('Select Fecha_vencimiento');
SQL.Add('From Productos');
SQL.Add('Where Fecha_vencimiento <= :fechaparavencer');
Parameters.ParamByName('fechaparavencer').Value := Datetimepicker1.Date;
 ExecSQL;


Saludos.
Responder Con Cita
  #8  
Antiguo 16-04-2014
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 Edwardfeliz.

Como para darte una idea, fijate si te sirve de este modo:
Código Delphi [-]
procedure AReordenar(const Fech: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE FECHA_VENCIMIENTO <= :FECHA');
    Parameters.ParamByName('FECHA').Value := Fech;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('FECHA_VENCIMIENTO').AsString);
      Next;
    end;
  end;
end;

procedure Faltan15(const Fech: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE DATEADD("d", 16, FECHA_VENCIMIENTO) = :FECHA');
    Parameters.ParamByName('FECHA_VENCIMIENTO').Value := Fech;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('ORDERNO').AsString);
      Next;
    end;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  AReordenar('12/05/2013', ADOQuery1, Memo1);
  Memo2.Clear;
  Faltan15('10/02/2014', ADOQuery1, Memo2);
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola Edwardfeliz.

Como para darte una idea, fijate si te sirve de este modo:
Código Delphi [-]
procedure AReordenar(const Fech: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE FECHA_VENCIMIENTO <= :FECHA');
    Parameters.ParamByName('FECHA').Value := Fech;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('FECHA_VENCIMIENTO').AsString);
      Next;
    end;
  end;
end;

procedure Faltan15(const Fech: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE DATEADD("d", 16, FECHA_VENCIMIENTO) = :FECHA');
    Parameters.ParamByName('FECHA_VENCIMIENTO').Value := Fech;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('ORDERNO').AsString);
      Next;
    end;
  end;
end;

Ejemplo de uso:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Clear;
  AReordenar('12/05/2013', ADOQuery1, Memo1);
  Memo2.Clear;
  Faltan15('10/02/2014', ADOQuery1, Memo2);
end;

Saludos
no entendi mucho XD
pero Quizás no me eh explicado bien.

en La base de datos, en la tabla productos hay una columna llamada Fecha de vencimiento, lo que quiero hacer es agregar al memo, los productos de los cuales las fechas de vencimiento sean menor a la cantidad de dias que esta puesta en el Formulario de Configuración que estará en un DBEedit, esto es para que se pueda configurar la cantidad de dias a los cuales yo quiero que el programa me avise que van a vencer, es decir que el edit va a tener solo dos digitos ( ejemplo: '15' o '30' ).

Saludos!
Responder Con Cita
  #10  
Antiguo 16-04-2014
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 Edwardfeliz Ver Mensaje
no entendi mucho XD
pero Quizás no me eh explicado bien.

en La base de datos, en la tabla productos hay una columna llamada Fecha de vencimiento, lo que quiero hacer es agregar al memo, los productos de los cuales las fechas de vencimiento sean menor a la cantidad de dias que esta puesta en el Formulario de Configuración que estará en un DBEedit, esto es para que se pueda configurar la cantidad de dias a los cuales yo quiero que el programa me avise que van a vencer, es decir que el edit va a tener solo dos digitos ( ejemplo: '15' o '30' ).

Saludos!
Hola Edwardfeliz.

Es decir que la fecha de referencia es la actual y vos le envias los días que deseas, ¿ Es así ?

Entonces sería:
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE DATEADD("d", :DIAS, FECHA_VENCIMIENTO) = DATE()');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('FECHA_VENCIMIENTO').AsString);
      Next;
    end;
  end;
end;

Uso:
Código Delphi [-]
FaltanNDias(DBEdit_de_dias.Text, ADOQuery1, Memo2);

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola Edwardfeliz.

Es decir que la fecha de referencia es la actual y vos le envias los días que deseas, ¿ Es así ?

Entonces sería:
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT FECHA_VENCIMIENTO FROM PRODUCTOS');
    SQL.Add('WHERE DATEADD("d", :DIAS, FECHA_VENCIMIENTO) = DATE()');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(FieldByName('FECHA_VENCIMIENTO').AsString);
      Next;
    end;
  end;
end;

Uso:
Código Delphi [-]
FaltanNDias(DBEdit_de_dias.Text, ADOQuery1, Memo2);

Saludos
No hace nada .-.
Responder Con Cita
  #12  
Antiguo 16-04-2014
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.
Cita:
Empezado por Edwardfeliz Ver Mensaje
No hace nada .-.
Habría que ver que datos tenes en tu bd y que valores estas enviando como argumento, en mi caso funciona correctamente.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Habría que ver que datos tenes en tu bd y que valores estas enviando como argumento, en mi caso funciona correctamente.

Saludos
En el Form de configuracion esta el DBEDiasVencimiento

Base de datos: access.
Tabla: Productos.
Campos:
Codigo
Descripcion
...
Fecha_Vencimiento

Saludos.
Responder Con Cita
  #14  
Antiguo 16-04-2014
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.

Te adjunto un demo basado en el campo "saledate" del archivo orders de dbdemos.mdb (que viene con Delphi e incluyo) para que puedas analizarlo con tranquilidad.

Crea una carpeta y descomprimilo en ella para las pruebas.

Saludos

Edito: Como el archivo es muy antiguo modifiqué las últimas fechas para que fueran razonables con la fecha actual, podes hacer lo mismo sobre el DBGrid.
Archivos Adjuntos
Tipo de Archivo: zip Eduard.zip (65,0 KB, 2 visitas)
__________________
Daniel Didriksen

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

Última edición por ecfisa fecha: 16-04-2014 a las 19:19:48.
Responder Con Cita
  #15  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola.

Te adjunto un demo basado en el campo "saledate" del archivo orders de dbdemos.mdb (que viene con Delphi e incluyo) para que puedas analizarlo con tranquilidad.

Crea una carpeta y descomprimilo en ella para las pruebas.

Saludos

Edito: Como el archivo es muy antiguo modifiqué las últimas fechas para que fueran razonables con la fecha actual, podes hacer lo mismo sobre el DBGrid.
Estudie el ejemplo que me diste aun estoy perdido, observa el comportamiento, en el siguiente codigo:
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ORDERNO, SALEDATE FROM ORDERS');
    SQL.Add('WHERE DATEADD("d", IAS, SALEDATE) <= DATE()');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(Format('%s - %s',[FieldByName('ORDERNO').AsString,
        FieldByName('SALEDATE').AsString]));
      Next;
    end;
  end;
end;

Resta a la fecha actual el contenido del edit y muestra las fechas de ahi hacia abajo.


en el siguiente:
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ORDERNO, SALEDATE FROM ORDERS');
    SQL.Add('WHERE DATEADD("d", IAS, SALEDATE) >= DATE()');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(Format('%s - %s',[FieldByName('ORDERNO').AsString,
        FieldByName('SALEDATE').AsString]));
      Next;
    end;
  end;
end;

Resta a la fecha actual el contenido del edit y muestra las fechas de ahi hacia arriba.

y lo que yo quiero es que a la fecha actual(Ejemplo: 16/04/2014) y se le sume la cantidad del edit(ejemplo: 5) y muestre los registro que estén desde 16/04/2014 hasta 21/04/2014

Saludos.
Responder Con Cita
  #16  
Antiguo 16-04-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
..
Responder Con Cita
  #17  
Antiguo 16-04-2014
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 Edwardfeliz.
Cita:
Empezado por Edwardfeliz Ver Mensaje
...lo que yo quiero es que a la fecha actual(Ejemplo: 16/04/2014) y se le sume la cantidad del edit(ejemplo: 5) y muestre los registro que estén desde 16/04/2014 hasta 21/04/2014
Ahora si está mas claro...
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ORDERNO, SALEDATE FROM ORDERS');
    SQL.Add('WHERE SALEDATE >= DATE() AND SALEDATE <= DATE() + :DIAS');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(Format('%s - %s',[FieldByName('ORDERNO').AsString,
        FieldByName('SALEDATE').AsString]));
      Next;
    end;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 16-04-2014
Avatar de Edwardfeliz
Edwardfeliz Edwardfeliz is offline
Miembro
 
Registrado: abr 2014
Posts: 102
Poder: 11
Edwardfeliz Va por buen camino
Wink

Cita:
Empezado por ecfisa Ver Mensaje
Hola Edwardfeliz.


Ahora si está mas claro...
Código Delphi [-]
procedure FaltanNDias(const Dias: string; Qry: TADOQuery; ME: TMemo);
begin
  with Qry do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT ORDERNO, SALEDATE FROM ORDERS');
    SQL.Add('WHERE SALEDATE >= DATE() AND SALEDATE <= DATE() + :DIAS');
    Parameters.ParamByName('DIAS').Value := Dias;
    Open;
    while not Eof do
    begin
      ME.Lines.Add(Format('%s - %s',[FieldByName('ORDERNO').AsString,
        FieldByName('SALEDATE').AsString]));
      Next;
    end;
  end;
end;

Saludos
Perfecto Con ese mismo hice unas modificacionsitas e hice el de los artículos a reordenar también.

Saludos!
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
comprobar antigüedad de fecha jonydread Varios 0 02-04-2014 04:26:17
Insertar fecha a la base de datos borlandpablo C++ Builder 5 26-10-2012 16:55:22
Fecha de modificacion de mi base de datos jfontane PHP 1 07-01-2007 14:11:10
comprobar valor en base de datos lalomon Conexión con bases de datos 9 13-11-2006 10:12:32
Problemas con Fecha en base de datos Roilo Conexión con bases de datos 2 20-01-2006 15:30:23


La franja horaria es GMT +2. Ahora son las 00:38:04.


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