Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

phelder

DBedit (problem)

Recommended Posts

Ola, sou novo no delphi, preciso fazer o calculo de idade de uma pessoa, tenho no form um dbedit que recebe uma data de nascimento, ate ai blz, inseri mascara e tal, ate ai blz, no momento em que eu vou fazer o calculo aprece um erro 1///9/171, e foi digitado 01/09/1971.

 

Obs: faco o calculo assim

 

chamo uma funcao

 

dbeditidade.text := inttostr(obteridade(dbeditnasc.text)); ak aparece o erro 9///171

gratoooo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, obrigado por responder, Roberto nem sai dai, mudei o dbedit para um maskedit com mascara, mudando a chamada da função onde era DBeditnasc por maskNasc e roda certinho, aparecendo a idade perfeito, mas com o dbedit da o erro descrito acima, se eu usar o maskedit como gravo essa idade no banco pode ser feito...já q com o dbedit ta dando erro grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, testando ak descobri que se for digitado no DBEditNasc uma data tipo 10/10/1971, passa ok e a idade e calculada, mas se digitar uma data 01/01/1971 da o erro /1///171, como se os zero não existissem...q faço grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Me diga uma coisa, o que essa função obteridade faz? Não seria mais simples para calcular a idade usar as próprias funções do delphi? Considerando que você terá a data de nascimento e quer saber a idade da pessoa comparando a data atual, bastaria chamar esta função do dateutils:

 

 

dbeditidade.text := IntToStr(YearsBetween(Now, GetData(Valor)));

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola pessoal obrigado pela atenção, como sou novo no Delphi estou apanhando..veja tenho um dbedit que recebe uma data, bom ate ai, se esta data for digitada assim 01//01/1971 aparece /1///171 seria como se os zeros não contasse, coloquei outra data 10/01/1971 aparece 1/01//791, coloquei outra data 10/10/1971 passou certinho mostrou a idade como tinha que ser.

 

o problema deve estar no dbedit, grato...

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema pode estar na formatação do seu componente... aparentemente, quando digita datas com valores entre 1 e 9 para o dia/mês, a data perde a formatação e fica zoada... então, vamos por partes... a primeira questão é: o que faz a função obteridade, que você está usando? Poste o código dela por favor para analisarmos.

 

Em segundo lugar, se o que quer é calcular o tempo em anos, a função que passei antes é uma boa pedida, só esqueci de colocar o código da função GetData, que uso para formatar uma data no formato "YYYY-MM-DD" para "DD/MM/YYYY".

 

 

    { Pega a data recebida como YYYY-MM-DD e transforma numa data válida para uso no Delphi }
    Function GetData(Valor:Variant):TDateTime;
    var vFormatSettings: TFormatSettings;
    begin
         vFormatSettings.ShortDateFormat := 'YYYY-MM-DD';
         vFormatSettings.DateSeparator := '-';
       Result := StrToDate(Valor, vFormatSettings);
    end;
 
    dbeditidade.text := IntToStr(YearsBetween(Now, GetData('2013-01-01'));

 

No caso acima, eu precisei formatar uma string numa data válida para trabalhar, pois o arquivo que recebia trabalhava com datas num formato diferente das configurações regionais da máquina.

 

Um problema que já tive com maskedits é que as vezes a máscara fica zoada conforme a forma que você a declara no componente... por isso que, para receber campos de data eu prefiro usar o DateTimePicker da Win32 (Delphi 7), que já te devolve um valor TDateTime quando o usa. Considerando que usasse o DateTimePicker para o usuário informar a data de nascimento, tudo o que precisaria pra capturar a idade seria:

 

 

    dbeditidade.text := IntToStr(YearsBetween(Now, DateTimerPicker1.Date));

 

Com a vantagem de ter um componente que já trás um calendário embutido pro usuário poder selecionar a data.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola Chrnos, obrigado pela atenção, fiz assim no DbEditNasc coloquei

 

var

datat: TDataTime;

begin

 

data:= StrToDate(DbEditNasc);

 

DbEditIdade := IntToStr(YearBetween(Now, data));

 

end;

 

então se digitar no DbEditNasc 10/10/1971 OK idade certinha, mas se digitar 01/01/1971 ou 10/01/1971 erro, vc esta certo fica zoado se tiver zero no dia ou mês ... q faço. Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tente fazer o seguinte:

 

 

var
   dAux: TDateTime;
   format : TFormatSettings;
begin
    format.ShortDateFormat := 'dd/mm/yyyy';
    format.DateSeparator      := '/';
   dAux:= StrToDate(DbEditNasc, format);
 
   DbEditIdade := IntToStr(YearBetween(Now, dAux));
 
end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ola, grato pela ajuda, dando uma olhada ak mudei no próprio Windows la estava d/m/aa mudei para dd/mm/aaaa e funcionou grato...

Legal, as configurações regionais da máquina as vezes pregam estas peças na gente mesmo... por isso tinha te passado o código anterior, que mudaria a configuração regional temporariamente pra efetuar o cálculo (a variável format do tipo TFormatSettings seria usado pra isso).

 

Só lembre-se que o mesmo problema poderá ocorrer no computador do cliente... no mais, sucesso e boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.