Convidado 2/9/2011, 17:24
Tem hora que nem eu mesmo entendo os códigos que fiz pra ele kkkkkkk
Eis ai
Private Sub Comando16_Click()
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim ws As DAO.Workspace
Dim StrSql As String
Dim StrHoras As Double
Dim StrNumFunc As String
Dim inti As Integer
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & "\Empregados.accdb", False, False, "MS Access;PWD=senha")
StrSql = "SELECT * FROM Empregados"
Set Rs = Db.OpenRecordset(StrSql)
'primeiro conto o numero de registros na tabela empregados para assim definir o numero de loop's a ser efetuado pelo código e carrego a variável com esse numero
StrNumFunc = DCount("*", "[Empregados]")
inti = 0
fInLoop = True
fExitLoop = False
Do Until inti >= StrNumFunc Or fExitLoop 'Aqui aplico a variável com o numero de registros na tabela para definir o numero de loop's isso é necessário para não dar erro no código que faz a atualização.. pois a cada loop é chamado a função Atualizar
DoEvents
inti = inti + 1
Me.txtID = inti 'Note que carrego uma caixa texto no form com a variável INTI e a cada loop adiciono + 1, isto é necessário pois o registro na função atualizar será utilizado utilizando o valor desta caixa texto para encontrar o código do funcionário
Call Atualizar
Loop
fInLoop = False
Exit Sub
Agora o código que faz a atualização
Private Sub Atualizar()
Dim Db As DAO.Database
Dim Rs As DAO.Recordset
Dim ws As DAO.Workspace
Dim StrSql As String
Dim StuSql As String
Dim StrHoras As Double
Set ws = DBEngine.Workspaces(0)
Set Db = ws.OpenDatabase(CurrentProject.Path & "\Empregados.accdb", False, False, "MS Access;PWD=senha")
'Esta é a SQL que sera utilizada para adiquiri os dados para atualização na outra tabela, note que utiliza a caixa texto que esta sendo atualizada a cada loop no código anterior, assim filtra o sql
StrSql = "SELECT * FROM Dados WHERE numero = " & Me.txtID & " And tax='Normal' And tipodeserviço='produção'"
Set Rs = Db.OpenRecordset(StrSql)
If Rs.RecordCount = 0 Then
'MsgBox "sem registro selecionado", vbInformation, "Atenção"
Else
StrHoras = 0
Do
'Aqui vou somando as horas para ao final atualizar a outra tabela
StrHoras = StrHoras + Rs!horas
'Aqui Vou modificando a caixa texto a cada Loop com a data a ser utilizada no código abaixo que faz a atualização, assim atualiza de acordo com a data da tabela dados (DData, campo da tabela dados)
Me.txtDataLoop = Rs!Ddata
'Aqui executo a dita atualização que é feita a cada loop e com a data sendo modificada, portanto se houver data na tabela empregados condizente com a data na tabela dados, o campo será devidamente atualizado com a soma das horas correnspondentes
CurrentDb.Execute "UPDATE Empregados SET totalhorasdeproducaonormal= '" & StrHoras & "' WHERE Numero =" & Me.txtID & " And DataRef =#" & Format(Me.txtDataLoop, "mm/dd/yyyy") & "#;"
Rs.MoveNext
Loop
End If
End Sub
Complicado? nem me fale!!! kkkkkkkk
Cumprimentos