Calcular intervalo de datas em dias e exibir num label.

Delphi

02/11/2003

Galera do Fórum, estou de volta ! Ainda não obtive sucesso na minha implementação.
Vou explicar direito, com detalhes, talvez alguma alma caridosa possa me ajudar...

É o seguinte:
Tenho um FORM onde eu tenho que capturar a DataNasc de um Edit (EdtDatanasc). Quando eu pressionar o botao, eu comparo a data recebida com a data que tenho armazenada numa tabela. Se a data recebida for igual a data da tabela, blz !, exibo os demais campos nos labels. Agora, se data recebida for maior q a data da tabela, preciso calcular o intervalo em dias entre uma data e outra e exibir num dos meus labels. O restante dos labels ficam com as informações da linha comparativa.
Acontece que está dando um erro ferrado quando tento fazer isso. Às vezes é erro de mismatch, invalid date e outros q não lembro.

Estou fazendo isso aqui:

declaro no inicio do form:

datamenor, datamaior : TDate;
dias: Double;

Depois no botao:

modulo.query.Close;
modulo.query.ParamByName(´data´).AsString:= EdtDataNasc.Text;
modulo.query.Open;
datamaior := strtodate(EdtDataNasc.Text);
datamenor := strtodate(modulo.query.Fields[0].AsString); //Este campo e a data da minha tabela, que esta definida como alpha
If (datamaior > datamenor) then begin
dias := trunc(datamaior - datamenor);
Label1.Caption := floattostr(dias); //está certa esta conversão ???
Label2.Caption := modulo.query.Fields[2].AsString;
Label3.Caption := modulo.query.Fields[3].AsString;
Label4.Caption := modulo.query.Fields[4].AsString + ´ / ´
+ modulo.query.Fields[5].AsString;
Label5.Caption := modulo.query.Fields[6].AsString;
end else begin
Label1.Caption := modulo.query.Fields[1].AsString;
Label2.Caption := modulo.query.Fields[2].AsString;
Label3.Caption := modulo.query.Fields[3].AsString;
Label4.Caption := modulo.query.Fields[4].AsString + ´ / ´
+ modulo.query.Fields[5].AsString;
Label5.Caption := modulo.query.Fields[6].AsString;
end;

Já tentei mudar a var dias para integer, não funcionou.
Não sei se a conversao de double para string está correta.
Quando tiro do if, deixo só a atribuição quando a data é igual, fica tudo certo. O problema está no trunc.

ALGUEM PODE ME AJUDAR ??? :cry: :cry: :cry:
Valeu !!!
Ana Davis


Ana Davis

Ana Davis

Curtidas 0

Respostas

Edilcimar

Edilcimar

02/11/2003

datanascimento := strtodate(edit1.text) utilize um try para validar a data
hoje := date();
dias := hoje - datanascimento
label1.caption := inttostr(dias);


GOSTEI 0
Ana Davis

Ana Davis

02/11/2003

Ok Edilcimar !

Mas nesse exemplo q vc fez está se considerando a data completa ? dd/mm/aaaa ?
Eu preciso só retornar o intervalo em dias.
P.ex.:
entrada: 04/06/1952
na tabela: 24/05/1952
valor a exibir: intervalo em dias entre 25/05/1952 e 04/06/1952 = 12 dias


GOSTEI 0
Edilcimar

Edilcimar

02/11/2003

veja a função DATETOSTR


GOSTEI 0
Ana Davis

Ana Davis

02/11/2003

Gente, ainda não consegui resolver esse problema. Alguém se habilita ?


GOSTEI 0
Ltres

Ltres

02/11/2003

Como ja havia dito em uma pergunta anterior. Use a função DaysBetween(datamaior, datamenor);!

Declare na Uses da unit :arrow: DateUtils
Depois coloque a função

Label1.Caption := IntToStr(DaysBetween(datamaior, datamenor));

Pronto.. Espero q seja isso :D


GOSTEI 0
Bacalhau

Bacalhau

02/11/2003

Ó estimada Ana, eu agora não posso experimentar mas as variaveis do tipo TDate e TDateTime, permitem os operadores soma e subtracção. Se eu tiver isto

var i : integer;

posso fazer isto

i := strtodate(´03/11/2003´) - strtodate(´02/11/2003´);

que vai dar 1.

Parece-me que a solução é mudar o double para integer e retirar o trunc


GOSTEI 0
POSTAR