Forum Pplware
Aniversários [Resolvido] - Versão de Impressão

+- Forum Pplware (http://forum.pplware.com)
+-- Fórum: Mais Tech (/forumdisplay.php?fid=11)
+--- Fórum: Programação e Web (/forumdisplay.php?fid=16)
+--- Tópico: Aniversários [Resolvido] (/showthread.php?tid=5979)

Páginas: 1 2


Aniversários [Resolvido] - progster - 10-05-2010 10:19

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.


RE: Aniversários - crazyman - 10-05-2010 11:43

queres a lista de funcionarios q fazem 50 anos nesse ano ou nesse dia?


RE: Aniversários - progster - 10-05-2010 12:09

Nesse dia.


RE: Aniversários - crazyman - 10-05-2010 15:37

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/HA012288111046.aspx


RE: Aniversários - progster - 11-05-2010 09:13

Big Grin Vou ver se consigo adaptar. Se confundiu??? Já se vê Smile


RE: Aniversários - progster - 11-05-2010 11:07

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.


RE: Aniversários - crazyman - 11-05-2010 20:19

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...


RE: Aniversários - progster - 14-05-2010 11:45

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.


RE: Aniversários - crazyman - 14-05-2010 12:52

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.


RE: Aniversários - progster - 14-05-2010 13:47

Ok. Vou experimentar.