Colocar Resposta 
 
Avaliação do Tópico:
  • 0 votos - 0 Média
  • 1
  • 2
  • 3
  • 4
  • 5
Aniversários [Resolvido]
10-05-2010, 10:19 (Esta mensagem foi modificada pela última vez a: 14-05-2010 16:55 por progster.)
Mensagem: #1
Aniversários [Resolvido]
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.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
10-05-2010, 11:43
Mensagem: #2
RE: Aniversários
queres a lista de funcionarios q fazem 50 anos nesse ano ou nesse dia?
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
10-05-2010, 12:09
Mensagem: #3
RE: Aniversários
Nesse dia.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
10-05-2010, 15:37 (Esta mensagem foi modificada pela última vez a: 10-05-2010 15:43 por crazyman.)
Mensagem: #4
RE: Aniversários
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
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-05-2010, 09:13
Mensagem: #5
RE: Aniversários
Big Grin Vou ver se consigo adaptar. Se confundiu??? Já se vê Smile

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-05-2010, 11:07
Mensagem: #6
RE: Aniversários
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.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
11-05-2010, 20:19 (Esta mensagem foi modificada pela última vez a: 11-05-2010 20:27 por crazyman.)
Mensagem: #7
RE: Aniversários
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...
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
14-05-2010, 11:45
Mensagem: #8
RE: Aniversários
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.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
14-05-2010, 12:52
Mensagem: #9
RE: Aniversários
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.
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
14-05-2010, 13:47
Mensagem: #10
RE: Aniversários
Ok. Vou experimentar.

Progster
Procurar todas as mensagens deste utilizador
Citar esta mensagem numa resposta
Colocar Resposta 


Saltar Fórum:


Utilizadores a ver este tópico: 3 Visitante(s)