Repetir nos meses seguintes
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
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
Curtidas 0
Respostas
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.
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
23/05/2007
Blza Xandy. Vlw.
Luiz
Luiz
GOSTEI 0