alanrodrigo 26/5/2010, 22:04
Boa tarde, Nivaldo, agradeço o contato.
O exemplo que você indicou é muito bom, porém ele não controla a exclusão.
Pessoal,
Com a ajuda do Sr. Roberto Pires, consegui fazer funcionar no sub formulário bastando substituir o código conforme abaixo:
Function LogChange(strTipo As String)
Dim db As Database, rslog As Recordset
Dim frm As Form, subfrm As SubForm, I As Integer
Dim strLog As String
Set db = CurrentDb
Set rslog = db.OpenRecordset("tbl_LogChange")
Set frm = Screen.ActiveForm
Dim strMax As Date
Dim Control As Control
For Each Control In frm.Controls
If Control.ControlType = acSubform Then
Set subfrm = Control
For I = 0 To subfrm.Controls.Count - 1
If TypeOf subfrm.Controls(I) Is TextBox Or TypeOf subfrm.Controls(I) Is ComboBox Or TypeOf subfrm.Controls(I) Is CheckBox Or TypeOf subfrm.Controls(I) Is OptionGroup Or TypeOf subfrm.Controls(I) Is ListBox Then
If strTipo = "E" Then
If strLog = "" Then
strLog = subfrm.Controls(I).Name & " " & subfrm.Controls(I).Value
Else
strLog = strLog & "," & subfrm.Controls(I).Name & " " & subfrm.Controls(I).Value
End If
Else
If subfrm.Controls(I).OldValue <> subfrm.Controls(I).Value Then
If strLog = "" Then
strLog = subfrm.Controls(I).Name & " " & subfrm.Controls(I).OldValue & " -> " & subfrm.Controls(I).Value
Else
strLog = strLog & "," & subfrm.Controls(I).Name & " " & subfrm.Controls(I).OldValue & " -> " & subfrm.Controls(I).Value
End If
End If
End If
End If
Next
strMax = DMax("strDataHora", "tblUsers")
rslog.AddNew
rslog("strNomeForm") = subfrm.Name
rslog("strTipoLog") = strTipo
rslog("mmolog") = strLog
rslog("strUser") = DLookup("strUserID", "tblUsers", "strDataHora = #" & strMax & "#")
rslog("dtLog") = Now
On Error Resume Next
rslog.Update
rslog.Close
strLog = ""
End If
Next
Set rslog = db.OpenRecordset("tbl_LogChange")
For I = 0 To frm.Controls.Count - 1
If TypeOf frm.Controls(I) Is TextBox Or TypeOf frm.Controls(I) Is ComboBox Or TypeOf frm.Controls(I) Is CheckBox Or TypeOf frm.Controls(I) Is OptionGroup Or TypeOf frm.Controls(I) Is ListBox Then
If strTipo = "E" Then
If strLog = "" Then
strLog = frm.Controls(I).Name & " " & frm.Controls(I).Value
Else
strLog = strLog & "," & frm.Controls(I).Name & " " & frm.Controls(I).Value
End If
Else
If frm.Controls(I).OldValue <> frm.Controls(I).Value Then
If strLog = "" Then
strLog = frm.Controls(I).Name & " " & frm.Controls(I).OldValue & " -> " & frm.Controls(I).Value
Else
strLog = strLog & "," & frm.Controls(I).Name & " " & frm.Controls(I).OldValue & " -> " & frm.Controls(I).Value
End If
End If
End If
End If
Next
strMax = DMax("strDataHora", "tblUsers")
rslog.AddNew
rslog("strNomeForm") = frm.Name
rslog("strTipoLog") = strTipo
rslog("mmolog") = strLog
rslog("strUser") = DLookup("strUserID", "tblUsers", "strDataHora = #" & strMax & "#")
rslog("dtLog") = Now
On Error Resume Next
rslog.Update
rslog.Close
db.Close
End Function
No entanto, infantilmente, eu estava testando no arquivo de modelo que consegui no site informeaccess. Porém, o bd que eu quero implantar esse controle é baseado em um sistema fornecido pelo grande Avelino Sampaio (www.usandoaccess.com.br), que controla as ribbons.
Nesse bd, ainda não consigo fazer funcionar, deixo o arquivo abaixo, se alguém puder me ajudar.
http://www.esnips.com/doc/6dceec75-e33a-4be7-b149-132945017d70/LogSub1
O usuário de login é João e a senha é 123, qualquer coisa você pode acessar a base via shit+enter.
Agradeço desde já.