Data num TMaskEdit
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?
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
Curtidas 0
Respostas
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
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.
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
25/08/2010
Explique melhor seu problema então.
GOSTEI 0
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.
Espero ter colaborado.
GOSTEI 0
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?
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
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?
Mas passado um ou mais ano 2010 poderia ser o ano de nascimento entende?
GOSTEI 0
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
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
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....
Mas fica com cara de gambiara....
GOSTEI 0
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.
Espero ter colaborado.
GOSTEI 0
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
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...
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
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...
Espero ter colaborado.
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
25/08/2010
Não tinha pensado nisso:
Valeu!
Try
DataNasc := Encodate( Ano, Mes, Dia );
except
ShowMessage('Data de nascimento inválida')
end;
Valeu!
GOSTEI 0
Wilson Junior
25/08/2010
Ok...
Estamos aqui para ajudar.
Estamos aqui para ajudar.
GOSTEI 0
Eriley Barbosa
25/08/2010
Não tinha pensado nisso:
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?
Try
DataNasc := Encodate( Ano, Mes, Dia );
except
ShowMessage('Data de nascimento inválida')
end;
Valeu!
GOSTEI 0
Eriley Barbosa
25/08/2010
Não tinha pensado nisso:
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?
Try
DataNasc := Encodate( Ano, Mes, Dia );
except
ShowMessage('Data de nascimento inválida')
end;
Valeu!
GOSTEI 0
Wilson Junior
25/08/2010
Desculpe pela falha do código, erro de digitação.
GOSTEI 0
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
25/08/2010
Mas se não for passado o ano, que ano você passara para a função?
GOSTEI 0
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