Bom dia a todos, adaptei alguns módulos e funções para pegar logs e gerar um arquivo txt, o modulo funciona perfeitamente com o formulário criado, só que refiz o mesmo formulário sendo que agora com um sub formulário em sua estrutura e agora a função “pegar log” não pega os dados inseridos ou atualizados/editados no sub formulário, alguém poderia me ajudar a ajustar esta função para que a mesma possa pegar as alterações feitas nos dados do sub formulário também, grato e fico no aguardo, segue abaixo os códigos dos módulos:
‘ Colocada no formulário (evento) antes de atualizar, após inserir e ao excluir
Function PegaLogs(StrTipo As String)
''Declaração das variáveis.
Dim db As Database, rslog As Recordset
Dim Frm As Form, i As Integer
Dim strLog As String
''Fim da declaração das variáveis.
Set db = CurrentDb
Set rslog = db.OpenRecordset("tbl_Logs") ''Tabela onde vão ser salvo os registros de log.
Set Frm = Screen.ActiveForm
For i = 0 To Frm.Controls.Count - 1
''Campos aceitaveis que a função de log ira reconhecer.
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
''Se for um registro novo, executa esta IF
If StrTipo = "Novo" 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
''Fim da IF verificação de novo registro.
Else
''Verifica se foi uma exclusão de registro.
If StrTipo = "Excluido" 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
''Fim da verificação de exclusão.
Else
''Se for uma alteração de registro ele faz a verificação.
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
''Fim da verificação de alteração de registro.
End If
End If
End If
End If
Next
rslog.AddNew
rslog("Nome do Formulario") = Frm.Name
rslog("Tipo") = StrTipo
rslog("Logs") = strLog
If CHECA_FORM("PROCESSO SUBFORM") = True Then
'rslog("ID_Do_Registro") = Forms!PROCESSO SUBFORM!NR_PROC
rslog("Maquina") = Environ("ComputerName")
rslog("Data") = Now
rslog("Usuario") = Environ("username")
On Error Resume Next
rslog.Update
rslog.Close
db.Close
Else
If CHECA_FORM("Processo MOD II") = True Then
'rslog("ID_Do_Registro") = Forms!Processo MOD II!NR_PROC
rslog("Maquina") = Environ("ComputerName")
rslog("Data") = Now
rslog("Usuario") = Environ("username")
On Error Resume Next
rslog.Update
rslog.Close
db.Close
End If
End If
End Function
'Função: colocar no modulo e chamar no formulário
Function CHECA_FORM(Formulario As String) As Boolean
Select Case CurrentProject.AllForms(Formulario).IsLoaded
Case True
CHECA_FORM = True
Case False
CHECA_FORM = False
End Select
End Function
‘Colocada no formulário (evento) ao fechar
Function CriarArquivoLOGAtv()
'On Error GoTo TratarErro
Dim Cabecalho As String
Dim Arquivo As String
DoCmd.OutputTo acOutputReport, "TABELA_LOGS", acFormatXLS, "C:\BASE DE DADOS\Logs\LogAtv_ " & Format(Date, "YYYY-MM") & ".log.XLS"
DoCmd.OutputTo acOutputReport, "TABELA_LOGS", acFormatTXT, "C:\BASE DE DADOS\Logs\LogAtv_" & Format(Date, "YYYY-MM") & ".log.TXT"
If Dir("C:\BASE DE DADOS\Logs\LogAtv_" & Format(Date, "YYYY-MM") & ".log", vbDirectory) = "" Then
Cabecalho = "ID;TIPO;FORMULARIO;LOGs;USUARIO;DATA"
'Open Arquivo For Output As #1
'Print #1, Cabecalho
Close #1
End If
CriarArquivoLOGAtv = Arquivo
SairFunction:
Exit Function
TratatarErro:
MsgBox Err.Description, vbCritical, " Erro " & Err.Number
Resume SairFunction
End Function
E a primeira vez que posto no fórum, espero que tenha postado no lugar certo, caso tenha errado, solicito ao administrador do fórum orientação para que a postagem fique no lugar certo. Grato e fico no aguardo de alguma solução.
‘ Colocada no formulário (evento) antes de atualizar, após inserir e ao excluir
Function PegaLogs(StrTipo As String)
''Declaração das variáveis.
Dim db As Database, rslog As Recordset
Dim Frm As Form, i As Integer
Dim strLog As String
''Fim da declaração das variáveis.
Set db = CurrentDb
Set rslog = db.OpenRecordset("tbl_Logs") ''Tabela onde vão ser salvo os registros de log.
Set Frm = Screen.ActiveForm
For i = 0 To Frm.Controls.Count - 1
''Campos aceitaveis que a função de log ira reconhecer.
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
''Se for um registro novo, executa esta IF
If StrTipo = "Novo" 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
''Fim da IF verificação de novo registro.
Else
''Verifica se foi uma exclusão de registro.
If StrTipo = "Excluido" 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
''Fim da verificação de exclusão.
Else
''Se for uma alteração de registro ele faz a verificação.
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
''Fim da verificação de alteração de registro.
End If
End If
End If
End If
Next
rslog.AddNew
rslog("Nome do Formulario") = Frm.Name
rslog("Tipo") = StrTipo
rslog("Logs") = strLog
If CHECA_FORM("PROCESSO SUBFORM") = True Then
'rslog("ID_Do_Registro") = Forms!PROCESSO SUBFORM!NR_PROC
rslog("Maquina") = Environ("ComputerName")
rslog("Data") = Now
rslog("Usuario") = Environ("username")
On Error Resume Next
rslog.Update
rslog.Close
db.Close
Else
If CHECA_FORM("Processo MOD II") = True Then
'rslog("ID_Do_Registro") = Forms!Processo MOD II!NR_PROC
rslog("Maquina") = Environ("ComputerName")
rslog("Data") = Now
rslog("Usuario") = Environ("username")
On Error Resume Next
rslog.Update
rslog.Close
db.Close
End If
End If
End Function
'Função: colocar no modulo e chamar no formulário
Function CHECA_FORM(Formulario As String) As Boolean
Select Case CurrentProject.AllForms(Formulario).IsLoaded
Case True
CHECA_FORM = True
Case False
CHECA_FORM = False
End Select
End Function
‘Colocada no formulário (evento) ao fechar
Function CriarArquivoLOGAtv()
'On Error GoTo TratarErro
Dim Cabecalho As String
Dim Arquivo As String
DoCmd.OutputTo acOutputReport, "TABELA_LOGS", acFormatXLS, "C:\BASE DE DADOS\Logs\LogAtv_ " & Format(Date, "YYYY-MM") & ".log.XLS"
DoCmd.OutputTo acOutputReport, "TABELA_LOGS", acFormatTXT, "C:\BASE DE DADOS\Logs\LogAtv_" & Format(Date, "YYYY-MM") & ".log.TXT"
If Dir("C:\BASE DE DADOS\Logs\LogAtv_" & Format(Date, "YYYY-MM") & ".log", vbDirectory) = "" Then
Cabecalho = "ID;TIPO;FORMULARIO;LOGs;USUARIO;DATA"
'Open Arquivo For Output As #1
'Print #1, Cabecalho
Close #1
End If
CriarArquivoLOGAtv = Arquivo
SairFunction:
Exit Function
TratatarErro:
MsgBox Err.Description, vbCritical, " Erro " & Err.Number
Resume SairFunction
End Function
E a primeira vez que posto no fórum, espero que tenha postado no lugar certo, caso tenha errado, solicito ao administrador do fórum orientação para que a postagem fique no lugar certo. Grato e fico no aguardo de alguma solução.