Data num TMaskEdit

Delphi

25/08/2010

Olá pessoal,
tenho um formulário onde o usuário pode informar a data de nascimento de uma pessoa. Ocorre que nem sempre ele tem o ano de nascimento da pessoa. Para alguns ele tem o ano e para outros não.

Como posso resolver isso?


Carlos Phelippe

Carlos Phelippe

Curtidas 0

Respostas

Eriley Barbosa

Eriley Barbosa

25/08/2010

Ta mas você vai fazer o que com o ano  ou com o dia ou com o mês, uma consulta ao banco de dados? Esta utilizando Firebird, qual engine de acesso?
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

Use Delphi7 + Firebird + IBX.

Na consulta a base de dados ... retorno a pessoas que fazem aniversário num determinado dia ou num mês ... ou num intervalo de datas (dia e mes inicial) até um (dia e mês final).

Hoje de acordo com o ano informado coloco a idade da pessoa ao lado do nome.


GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Explique melhor seu problema então.
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Se não tem o ano preenchido para calcular a idade, coloque como default o ano corrente, neste caso 2010, assim você terá a data de aniversário e não a idade.

Espero ter colaborado.
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

Tenho um campo chamado DataNascimeto do tipo DATE na base de dados.

Na interface com o usuário tenho um TMaskEdit -> __/__/____ onde o usuário entra com a data, por exemplo, 29/08/1971. Ocorre que nem sempre o usuário tem a data completa (ano de nascimento). Algumas vezes ele tem apenas o dia e o mês.

Como poderia contornar isso?
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

"Se não tem o ano preenchido para calcular a idade, coloque como default o ano corrente, neste caso 2010, assim você terá a data de aniversário e não a idade."

Mas passado um ou mais ano 2010 poderia ser o ano de nascimento entende?
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Lhe entendi, mas se você tem somente o dia e mês, coloque como 2010 (ano corrente), assim quando o usuário tiver a informação completa, altere o cadastro. Pois como você irá gravar este registro no BD se o campo data exige ter data completa (dia+mes+ano)?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

E ele não saber o ano está lhe trazendo algum problema? tipo assim, no maskedit se não preencher o ano eu faço tal coisa , se preencher somente o dia eu faço tal coisa, se preencher a data completa eu faço tal coisa, fazer o maskedit aceitar somente o dia ou o mês ou o ano ou uma data completa?   Gostaria que detalha-se passo-a-passo seu problema, pois, ainda não entendi.
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

Pensei de forma grosseira deixar o ano quando não formando como sendo 1899 ou algo do gênero... dai quando eu for fazer o cálculo da idade se o ano informado for esse eu o desconsidero....

Mas fica com cara de gambiara....
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Uma sugestão é você gravar os campos separados. Ex.: 1 campo para Dia, outro para Mês e outro para o Ano, assim caso não informe o Ano, não terá problema.

Espero ter colaborado.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Mas é o que da para fazer, pois a idéia do Wilson, você teria de validar se o mês tem 30 ou 31 dias, se for fevereiro se tem 28 ou 29 dias, se os meses não são maiores do que 12, etc.
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

Acredito que elegendo um ano padrão(quando o mesmo não for informado) terei que fazer menos validações.

Deixaria dois anos como sendo os padrões. Um bisexto e outro não.

Vou fazer assim mesno a contra vontade...
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Bom, cada desenvolvedor utiliza seus métodos, eu prefiro efetuar validações do que fazer gambiarras.


e que quantidade de validações hein...
Try
  DataNasc := Encodate( Ano, Mes, Dia );
except
  ShowMessage('Data de nascimento inválida')
end;


Espero ter colaborado.
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

Não tinha pensado nisso:

Try
  DataNasc := Encodate( Ano, Mes, Dia );
except
  ShowMessage('Data de nascimento inválida')
end;


Valeu!
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Ok...
Estamos aqui para ajudar.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Não tinha pensado nisso:

Try
  DataNasc := Encodate( Ano, Mes, Dia );
except
  ShowMessage('Data de nascimento inválida')
end;


Valeu!
A função correta é EncodeDate e mesmo assim para funcionar tem que passar o Ano, ai se não tem o ano como faz?
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Não tinha pensado nisso:

Try
  DataNasc := Encodate( Ano, Mes, Dia );
except
  ShowMessage('Data de nascimento inválida')
end;


Valeu!
A função correta é EncodeDate e mesmo assim para funcionar tem que passar o Ano, ai se não tem o ano como faz, não se esqueça de declarar DateUtils no Uses?
GOSTEI 0
Wilson Junior

Wilson Junior

25/08/2010

Desculpe pela falha do código, erro de digitação.
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

No combobox pra selecionar o ano deixo com opção inicial o '----' pra forçar o erro ao converter.
GOSTEI 0
Eriley Barbosa

Eriley Barbosa

25/08/2010

Mas se não for passado o ano, que ano você passara para a função?
GOSTEI 0
Carlos Phelippe

Carlos Phelippe

25/08/2010

terei que passar o valor do combo para integer para fazer a conversão... se não der para converter o ano... já sei que houve erro... e sendo assim coloco meu ano default...
GOSTEI 0
POSTAR