Repetir nos meses seguintes

Delphi

23/05/2007

Olá,

Estou usando o codigo abaixo para repetir um registro nos meses seguintes. Por exemplo, a pessoa seleciona uma data no datetimepicker (DTDATA) e um numero no comobobox e grava o evento sempre no mesmo dia dos meses seguintes. Funciona blza, mas qdo a pessoa escolhe no datetimepicker o dia 31 de um mês, no mês seguinte (que só tem 30 dias) e nos outros meses vem grava sempre o registro no dia 30 (mesmo qdo o mês tem 31 dias) – Exemplo: a pessoa escolhe a data 31/03/2007 no datetimepicker e seleciona 4 no combobox e ao gravar as datas ficam assim 31/03 – 30/04 –30 /05 – 30/06 e 30/07. Tem algum modo das datas gravadas ficarem assim – 31/03 – 30/04 –31 /05 – 30/06 e 31/07. Obrigado. (Uso D7/IBX/FIREBIRD 1.5)

DIAS:= STRTOINT(combobox1.Text)
DATAD := DTDATA.Date ;
for conta:= 0 to DIAS do

begin

ParamByName(´dat_dia´).asDate := DATAD;
ParamByName(´des_evento´).asstring := edevento.text;
ParamByName(´des_detalhe´).asstring := memodetalhe.text;
DATAD := IncMonth(DATAD,1);
ExecSql;

End;

Luiz


L_carlos

L_carlos

Curtidas 0

Respostas

Xandy

Xandy

23/05/2007

Iai Luis, Acho q vc podi fazer o seguinte:

Var TesteUltimaDiaMes : boolean
begin

TesteUltimaDiaMes := False;
DIAS:= STRTOINT(combobox1.Text)
DATAD := DTDATA.Date ;

for conta:= 0 to DIAS do
begin

ParamByName(´dat_dia´).asDate := DATAD;
ParamByName(´des_evento´).asstring := edevento.text;
ParamByName(´des_detalhe´).asstring := memodetalhe.text;

// Na 1º vez é falso, ele vai entrar.
If not TesteUltimaDiaMes then
Begin
//Ai vai testar se a data é igual ao ultimo dia do mes
If DATAD = ultimoDiaMes(DATAD) THEN
Begin
// Seta pra True, incrementa a data e pega o ultimo dia do mes
TesteUltimaDiaMes := True
DATAD := IncMonth(DATAD,1);
DATAD := UltimoDiaMes(DATAD);
end
Else
DATAD := IncMonth(DATAD,1);
End
Else
Begin
DATAD := IncMonth(DATAD,1);
DATAD := UltimoDiaMes(DATAD);
End;

ExecSql;
End;

function UltimoDiaMes(Mdt: TDateTime) : TDateTime;
//retorna o ultimo dia o mes, de uma data fornecida
var
ano, mes, dia : word;
mDtTemp : TDateTime;
begin
Decodedate(mDt, ano, mes, dia);
mDtTemp := (mDt - dia) + 33;
Decodedate(mDtTemp, ano, mes, dia);
Result := mDtTemp - dia;
end;

Espero ter ajudado.


GOSTEI 0
L_carlos

L_carlos

23/05/2007

Blza Xandy. Vlw.

Luiz


GOSTEI 0
POSTAR