Olá, ótimo dia a todos.
Tenho o código abaixo que grava o ctl.name na tabela de log, e preciso que grave o nome(label) do rótulo associado ao ctl
Por exemplo: Tenho o campo texto127 com o dado DATAINICIAL, associado a este campo está o Rótulo128, cujo nome (label) é DATA INICIAL, no código abaixo está gravando (ctl.name)texto127 no log e eu gostaria que gravasse DATA INICIAL(label do Rótulo128).
Linha de gravação:
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & ctl.OldValue & "','" & ctl.Value & "','" & "Registro Alterado" & "')"
Código inteiro:
Public Sub gravalog()
Dim strChekaDiferente As Boolean
Dim strSQL As String
Dim ctl As Control
Dim strUser As String
'Importante: Todos os botões de navegação devem conter a
'chamada de toda esta instrução.
'O form não deve ter o botão fechar ativo, deve colocar um botão para esse efeito e chamar a instrução.
strChekaDiferente = False
strUser = GetUserName_TSB
If NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
For Each ctl In Screen.ActiveForm.Form.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
DoCmd.SetWarnings False
If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & "" & "','" & ctl & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
strChekaDiferente = False
End If
End If
End Select
Next ctl
Else
' se não for um novo registro, coloca a variável de chekar alterações como False
strChekaDiferente = False
For Each ctl In Screen.ActiveForm.Form.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
'On Error Resume Next
If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
' se algum valor foi alterado ou deletado, coloca a variável de chekar alterações como True
strChekaDiferente = True
'e registra na tabela do Log
DoCmd.SetWarnings False
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & ctl.OldValue & "','" & ctl.Value & "','" & "Registro Alterado" & "')"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
'termina e volta a colocar a variável de chekar alterações como False
strChekaDiferente = False
Else
Cancel = True
End If
End If
End Select
Next ctl
End If
'Salva tudo o que foi feito
DoCmd.RunCommand acCmdSaveRecord
End Sub
Tenho o código abaixo que grava o ctl.name na tabela de log, e preciso que grave o nome(label) do rótulo associado ao ctl
Por exemplo: Tenho o campo texto127 com o dado DATAINICIAL, associado a este campo está o Rótulo128, cujo nome (label) é DATA INICIAL, no código abaixo está gravando (ctl.name)texto127 no log e eu gostaria que gravasse DATA INICIAL(label do Rótulo128).
Linha de gravação:
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & ctl.OldValue & "','" & ctl.Value & "','" & "Registro Alterado" & "')"
Código inteiro:
Public Sub gravalog()
Dim strChekaDiferente As Boolean
Dim strSQL As String
Dim ctl As Control
Dim strUser As String
'Importante: Todos os botões de navegação devem conter a
'chamada de toda esta instrução.
'O form não deve ter o botão fechar ativo, deve colocar um botão para esse efeito e chamar a instrução.
strChekaDiferente = False
strUser = GetUserName_TSB
If NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
For Each ctl In Screen.ActiveForm.Form.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
DoCmd.SetWarnings False
If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & "" & "','" & ctl & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
strChekaDiferente = False
End If
End If
End Select
Next ctl
Else
' se não for um novo registro, coloca a variável de chekar alterações como False
strChekaDiferente = False
For Each ctl In Screen.ActiveForm.Form.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
'On Error Resume Next
If Nz(ctl.Value, "") <> Nz(ctl.OldValue, "") Then
' se algum valor foi alterado ou deletado, coloca a variável de chekar alterações como True
strChekaDiferente = True
'e registra na tabela do Log
DoCmd.SetWarnings False
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Screen.ActiveForm.Form.Name & "','" & ctl.Name & "','" & ctl.OldValue & "','" & ctl.Value & "','" & "Registro Alterado" & "')"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
'termina e volta a colocar a variável de chekar alterações como False
strChekaDiferente = False
Else
Cancel = True
End If
End If
End Select
Next ctl
End If
'Salva tudo o que foi feito
DoCmd.RunCommand acCmdSaveRecord
End Sub