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??? 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 Vou ver se consigo adaptar. Se confundiu??? Já se vê 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... 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... 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. |