Forum Pplware

Versão Completa: Aniversários [Resolvido]
Está de momento a ver uma versão reduzida do nosso conteúdo. Ver versão completa com o formato adequado.
Páginas: 1 2
Bom dia.

Estou a desenvolver uma pequena BD em Access, para o departamento de Recursos Humanos onde trabalho, e uma das componentes é criar altertas de aniversários, ou seja, ao abrir a BD automaticamente aparece o formulário de funcionários, o que eu quero é que através de um botão me apareça uma msg com a lista de funcionários que fazem 50 anos.

Desde já agradeço qualquer ajuda que me possam dar.

Cumprimentos.
queres a lista de funcionarios q fazem 50 anos nesse ano ou nesse dia?
Nesse dia.
Podes utilizar a função DateDiff que calcula a diferença entre 2 datas. A sintax é assim:
DateDiff(intervalo, data1, data2 [, primeirodiadasemana] [, primeirasemanadoano] )

Mas irás ter o problema dos dias bissestos, portanto criei esta funçao:

dt_nasc -> é o nome da textbox do access

Dim i As Integer, intBix As Integer, intAno As Integer, datHoje As Date
Dim anos As Integer

datHoje = Date

intBix = 0

i = Year(dt_nasc)
i = IIf((i Mod 4 = 0 And ((Not i Mod 100 = 0) Or i Mod 400 = 0)) And dt_nasc <= DateSerial(i, 2, 28), i, i + 1)

intAno = Year(datHoje)
intAno = IIf((intAno Mod 4 = 0 And ((Not intAno Mod 100 = 0) Or intAno Mod 400 = 0)) And datHoje > DateSerial(intAno, 2, 28), intAno, intAno - 1)

For i = i To intAno
If i Mod 4 = 0 And ((Not i Mod 100 = 0) Or i Mod 400 = 0) Then
intBix = intBix + 1
Exit For
End If
Next
For i = i + 4 To intAno Step 4
If (Not i Mod 100 = 0) Or i Mod 400 = 0 Then
intBix = intBix + 1
End If
Next

anos = (DateDiff("d", dt_nasc, datHoje) - intBix) \ 365
MsgBox anos
Se pretendes uma listagem das pessoas q fazem anos nesse dia, entao creio q tens de fazer uma Query e apresenta-la em forma de form no evento click do botao.

Confundi??? Big Grin
Para saberes mais sobre a Datediff...

Vê: http://office.microsoft.com/pt-br/access...11046.aspx
Big Grin Vou ver se consigo adaptar. Se confundiu??? Já se vê Smile
Já experimentei, mas o output não é aquilo que preciso, ou seja, é feito o somatório do cálculo das idades dos funcionários, mas o que eu preciso é que ao carregar no botão no formulário me apareça uma msg a dizer qual dos funcionários é que faz 50 anos nesse dia.
sim, este codigo apenas verifica se o ano é bissesto ou nao...

Que penso que é a parte pior... Big Grin

No entanto, se queres para uma data especifica, basta colocares um IF :

Ou seja, ainda mais facil Big Grin

anos = DateDiff("yyyy", dt_nasc, now) -> retorna o numero de anos que o individuo tem.
depois:
If anos = 50 then
msgbox "O individuo tem: " & anos
end if

Podes colocar isto no evento load do form que cada vez que os dados de qualquer individuo forem carregados o codigo valida a condição.
Tb podes utilizar este codigo com um while e um EOF:

Ou seja:

O codigo vai percorrer todos os campos dt_nasc e verificar um a um se esse individuo tem 50 anos ou nao.

Em caso afirmativo retorna uma msg a dizer que sim...

Alerto que isso torna a base lenta, mas tb depende do numero de registos que a tabela tenha...
Estive a trabalhar com o seguinte código:

Private Sub cmdAniversarios_Click()
Dim rst As Recordset
Dim Nomes As String
Dim Data As Date

Data = DateSerial(Year(Date) - 50, Month(Date), Day(Date))
Set rst = Application.CurrentDb.OpenRecordset( _
"SELECT [Nome] FROM [Funcionarios] WHERE [Data_Nascimento]=#" _
& Format(Data, "mm-dd-yyyy") & "#")
If rst.EOF Then
MsgBox "Hoje Não Há Aniversariantes com 50 Anos!"
Else
S = ""
Do Until rst.EOF
S = S & vbCrLf & rst!Nome
rst.MoveNext
Loop
MsgBox "Hoje Fazem 50 Anos:" & S
End If
End Sub

Depois de o adaptar. Retorna aquilo que preciso. Só que agora o futuro utilizador da BD, pediu-me o seguinte critério:

Para os funcionários que fazem 50 anos quer saber quantos, ou se todos, foram a uma consulta médica obrigatória enviados pelo serviço.

Não sei se me fiz entender. Qualquer coisa é só dizer.

Obrigado pela ajuda prestada, e agradeço qualquer ajuda que ainda me possam prestar.

Cumprimentos.
primeiro tens de cirar um campo com uma checkbox para consulta médica.

Depois fazes uma query em que procura todos os individuos com 50 anos e tem a checkbox activa.
Ok. Vou experimentar.
Páginas: 1 2
URL's de Referência