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 |
|||
10-05-2010, 11:43
Mensagem: #2
|
|||
|
|||
RE: Aniversários
queres a lista de funcionarios q fazem 50 anos nesse ano ou nesse dia?
|
|||
10-05-2010, 12:09
Mensagem: #3
|
|||
|
|||
RE: Aniversários
Nesse dia.
Progster |
|||
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??? Para saberes mais sobre a Datediff... Vê: http://office.microsoft.com/pt-br/access...11046.aspx |
|||
11-05-2010, 09:13
Mensagem: #5
|
|||
|
|||
RE: Aniversários
Vou ver se consigo adaptar. Se confundiu??? Já se vê
Progster |
|||
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 |
|||
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... No entanto, se queres para uma data especifica, basta colocares um IF : Ou seja, ainda mais facil 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... |
|||
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 |
|||
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. |
|||
14-05-2010, 13:47
Mensagem: #10
|
|||
|
|||
RE: Aniversários
Ok. Vou experimentar.
Progster |
|||
« Mais Antigo | Mais Recente »
|
Utilizadores a ver este tópico: 1 Visitante(s)