CONVERTER DATA EM IDADE

MARCELO.TREZE 31/03/2012 13:36:20
#398861
não sei como está seu flexgrid mas seria algo assim

rsPaciente.Open [Ô]SELECT Nome, PacienteID, DtaNasc, MedicoID FROM Cad_Paciente06 WHERE Nome LIKE [ô][Ô] & txtPes.Text & [Ô]%[ô]ORDER BY Nome[Ô], CnSql, adOpenKeyset, adLockOptimistic
With MSFlexgrid1
[txt-color=#007100][ô] deduzindo que já possua um cabeçalho no flexgrid com o NOME, DATA DE NASCIMENTO, IDADE[/txt-color]
.Rows = 1
Do While Not rsPaciente.EOF
.Rows = .Rows + 1
.TextMatrix (.Rows - 1, 0) = rsPaciente!Nome
.TextMatrix (.Rows - 1, 1) = rsPaciente!DtaNasc
.TextMatrix (.Rows - 1, 2) = DateDiff([Ô]yyyy[Ô], rsPaciente!DtaNasc, Date)
rsPaciente.MoveNext
Loop
End With

OMAR2011 31/03/2012 13:44:27
#398862
E ai Marcelo treze,fez algum teste com a resposta do FFCOUTO.
Dim idade As String

Do While Not rsPaciente.EOF
idade = CalcularIdade([txt-color=#e80000]r[/txt-color]([Ô]DtaNasc[Ô]), True)
List1.AddItem rsPaciente!Nome & vbTab & idade
rsPaciente.MoveNext
Loop
o que tem haver com esse R.
Deu erro.
FFCOUTO 31/03/2012 13:55:33
#398864
Omar,
substitui esse [txt-color=#e80000]r[/txt-color] por [txt-color=#e80000]rsPaciente[/txt-color].
OMAR2011 31/03/2012 14:40:21
#398869
FFCOUTO,agora deu certo.Mas vale resaltar que
pequei um exemplo do Macoratti deu diferença
de dois Dias.
O seu exemplo deu 14 dias na minha idade
O do Macoratti deu 16 dias na minha idade
15/10/1960
E ai como fica!
Valeu.
FFCOUTO 31/03/2012 16:53:56
#398875
Omar,

O exemplo que você usou foi o deste link http://www.macoratti.net/d170901.htm ?

Vamos considerar algumas coisas:
1º Você deve ter reparado que o próprio Macoratti no fim da página informa que a função tem um bug.
2º No exemplo do Macoratti ele usa o ano com 365.25 dias, mas é errado pois o ano tem 365.2425 dias conforme o cálculo da época que foi implementado o calendário gregoriano.
3º Neste trecho do código é que está o [Ô]erro[Ô] no meu entendimento:
dias = DateDiff([Ô]d[Ô], DateSerial(DatePart([Ô]yyyy[Ô], datanascimento) + anos, DatePart([Ô]m[Ô], datanascimento) + meses, Day(datanascimento)), Now)


Ao usar o DateSerial desta forma veja que ele subtrai o dia de hoje com o dia do nascimento, por isso no exemplo dele dá 16 e no meu 14. Para demonstrar a diferença, some os dias restantes de Outubro que é o mês que você nasceu + Novembro + Dezembro + Janeiro + Fevereiro + Março, isso dará 167 dias. Se você fizer uma operação usando o Mod com 30 dias do mês vai obter 17, mas nem todos meses tem 30 dias e por isso estou usando uma média com o valor de 30.4166 que é divisão de 365 / 12. Fazendo 167 Mod 30.4166 dá 14,95. E como só consideramos a parte inteira fica com 14.

Acho que é isso.

P.S.: De 1º de Fevereiro a 1º de Março tem um mês, correto? Mas em dias tem 28 apenas, menor que um mês de 30 dias. Por isso que é muito complicado o cálculo de datas.
P.S.2: Se eu estiver errado por favor me corrijam.

NILTON.VIANNA 31/03/2012 17:15:39
#398876
No meu Projeto esta assim;

Private Sub Form_Load()

Set rsPaciente = New ADODB.Recordset
rsPaciente.Open [Ô]SELECT Nome, PacienteID, DtaNasc, MedicoID FROM Cad_Paciente06 WHERE Nome LIKE [ô][Ô] & txtPes.Text & [Ô]%[ô]ORDER BY Nome[Ô], CnSql, adOpenKeyset, adLockOptimistic
Set GridP.DataSource = rsPaciente [ô]Preenchendo GridP com Ado

GridP.ColWidth(1) = 3820
GridP.ColWidth(2) = 1200
GridP.ColWidth(3) = 1000

GridP.TextArray(1) = [Ô]Listagem dos Pacientes[Ô]
GridP.TextArray(2) = [Ô]Prontuário N°: [Ô]
GridP.TextArray(3) = [Ô]Nascimento[Ô]
End Sub
MARCELO.TREZE 02/04/2012 08:16:38
#398907
Faz diferente então ao invés de preencher pelo data source faça assim:

Primeiro crie uma sub para fazer o cabeçalho do Grid

Sub Cabecalho()
With GridP
.Rows = 1
.FixedCols = 0
.FormatString = [Ô]Listagem dos Pacientes|Prontuário Nº:|Nascimento|Idade[Ô]
.ColWidth(0) = 3820
.ColWidth(1) = 1200
.ColWidth(2) = 1000
.ColWidth(3) = 1000
End with
End Sub


No Load do Form

Private Sub Form_Load()
rsPaciente.Open [Ô]SELECT Nome, PacienteID, DtaNasc, MedicoID FROM Cad_Paciente06 WHERE Nome LIKE [ô][Ô] & txtPes.Text & [Ô]%[ô]ORDER BY Nome[Ô], CnSql, adOpenKeyset, adLockOptimistic
With GridP
CabecalhoGrid
Do While Not rsPaciente.EOF
.Rows = .Rows + 1
.TextMatrix (.Rows - 1, 0) = rsPaciente!Nome
.TextMatrix (.Rows - 1, 1) = rsPaciente!PacienteID
.TextMatrix (.Rows - 1, 2) = rsPaciente!DtaNasc
.TextMatrix (.Rows - 1, 3) = DateDiff([Ô]yyyy[Ô], rsPaciente!DtaNasc, Date)
rsPaciente.MoveNext
Loop
End With
End Sub


pronto pode até fazer um teste

Página 3 de 3 [27 registro(s)]
Tópico encerrado , respostas não são mais permitidas