Fórum Atualizar Idade #329780
20/09/2006
0
Estou usando o código abaixo(que peguei aqui no fórum) para calcular a Idade em anos e meses de uma pessoa... Ele funciona perfeitamente bem!
Mas gostaria de fazer com que num evento(tipo click num botão) ele calculasse a idade de todos cadastrados no Banco de Dados... do jeito que está ele só calcula quando eu Cadastro/Altero a data de nascimento(DBEdit6)... Desde já, meu obrigado a vcs!
procedure TFrmCadastro.DBEdit6Exit(Sender: TObject);
var
MesN, AnoN, MesA, IdadeAnos, IdadeMeses : Integer;
begin
MesN := MonthOf(DMNutricao.TblCadClientesDTNASCIMENTO.AsDateTime);
AnoN := YearOf(DMNutricao.TblCadClientesDTNASCIMENTO.AsDateTime);
MesA := MonthOf(Date);
IdadeAnos := YearOf(Date)- AnoN;
IdadeMeses := 0;
If MesN > MesA Then
Begin
IdadeAnos := IdadeAnos - 1;
IdadeMeses := 12 + (MesA - MesN);
End
Else
If MesN < MesA Then
Begin
IdadeMeses := MesA - MesN;
end;
DBEdit1.Text := IntToStr(IdadeAnos);
DBEdit3.Text := IntToStr(IdadeMeses);
DMNutricao.TblCadClientes.Post;
end;
Alexandretavares
Curtir tópico
+ 0Posts
20/09/2006
Micheus
var mes, ano :integer; begin Mes := MonthsBetween(MonthsBetween(EndOfTheMonth(Date), DMNutricao.TblCadClientesDTNASCIMENTO.AsDateTime); Ano := Mes div 12; Mes := Mes mod 12; DBEdit1.Text := IntToStr(Ano); DBEdit3.Text := IntToStr(Mes); end;
procedure TFrmCadastro.Botton1(Sender: TObject); var Mes, Ano :Integer; begin with DMNutricao do begin TblCadClientes.First; while TblCadClientes.EOF do begin Mes := MonthsBetween(MonthsBetween(EndOfTheMonth(Date), TblCadClientesDTNASCIMENTO.AsDateTime); Ano := Mes div 12; Mes := Mes mod 12; TblCadClientes.Edit; TblCadClientesIDADE_ANO.AsInteger := Ano; TblCadClientesIDADE_MES.AsInteger := Mes; TblCadClientes.Post; TblCadClientes.Next; end; end; end;
Se os campos ANO e MES ficarem em outra tabela, então antes do comando Edit, ela deve ser posicionada e a tabela do exemplo onde são utilizados o Edit e Post devem ser substituidos por esta tabela.
[]s
Gostei + 0
20/09/2006
Alexandretavares
´Há sempre, pelo menos, dois modos de fazer uma mesma coisa. Mesmo que sejam certo e errado´ (Eu)
Hoje a noite vou tentar tua dica e se tudo der certo, te envio msg...
Valeu!
Alexandre Tavares
Gostei + 0
21/09/2006
Alexandretavares
Por exemplo: eu tenho cadastros que tem a data de nascimento preenchida e não foram afetados em nada pelo código(não foi calculada a idade em Anos e Meses)! Alterei no proprio BD a data de nascimento de alguns registros e tb não fez nada...
Esqueci de te dizer que estou usando ADO(Access)
Já o código anterior que vc me passou, o qual uso no evento OnExit do campo DBEdit6, funcionou perfeitamente bem(inclusive bem mais simples que o código que eu usava antes pra fazer a mesma coisa)
Um abraço!
...........................................................................................................
procedure TFrmCadastro.Botton1(Sender: TObject);
var
Mes, Ano :Integer;
begin
with DMNutricao do
begin
TblCadClientes.First;
while TblCadClientes.EOF do
begin
Mes := MonthsBetween(MonthsBetween(EndOfTheMonth(Date), TblCadClientesDTNASCIMENTO.AsDateTime);
Ano := Mes div 12;
Mes := Mes mod 12;
TblCadClientes.Edit;
TblCadClientesIDADE_ANO.AsInteger := Ano;
TblCadClientesIDADE_MES.AsInteger := Mes;
TblCadClientes.Post;
TblCadClientes.Next;
end;
end;
end;
Gostei + 0
22/09/2006
Micheus
[]s
Gostei + 0
29/09/2006
Alexandretavares
O que é que pode estar havendo com isso, que aparentemente está correto, [b:57396c86a6]e está qdo executo o código no evento OnExit de um Dbedit[/b:57396c86a6], e não funciona no Evento OnClick(para que ele atualize todo o BD) ???
Gostei + 0
01/10/2006
Micheus
TblCadClientesIDADE_ANO.AsInteger := Ano;
TblCadClientesIDADE_MES.AsInteger := Mes;
Inspecionando seus valores(CTRL+F7) após a atribuição?
Não trabalho com ADO, mas dê uma verificada nas configurações de sua conexão.
Se vc utiliza TADOConnection, como estão definidas as propriedades IsolationLevel, Mode, Atributs?
Gostei + 0
02/10/2006
Alexandretavares
Gostei + 0
02/10/2006
Micheus
Os valores são atribuidos na depuração e continuam após o post?
Vc talvez não precise comitar a transação (ADOConnection.CommitTrans)?
E quanto aos outros questionamentos:
Não estaria utilizando uma conexão somente leitura?
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)