CONVERTER DATA EM IDADE
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
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.
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.
Omar,
substitui esse [txt-color=#e80000]r[/txt-color] por [txt-color=#e80000]rsPaciente[/txt-color].
substitui esse [txt-color=#e80000]r[/txt-color] por [txt-color=#e80000]rsPaciente[/txt-color].
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.
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.
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:
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.
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.
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
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
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
No Load do Form
pronto pode até fazer um teste
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
Tópico encerrado , respostas não são mais permitidas