Tenho o código abaixo que:
1 - não está gravando na tabela tbllog quando oldvalue = "" e altero para algum outro valor
2 - está gravando na tbllog quando o oldvalue="" e o value = "", ou seja, não houve alteração
Desde já agradeço a ajuda.
Private Sub comando297_Click()
Dim strChekaDiferente As Boolean
Dim strSQL As String
Dim ctl As Control
Dim strUser As String
strChekaDiferente = False
strUser = GetUserName_TSB
If Me.NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
For Each ctl In Me.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
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Me.Form.Name & "','" & ctl.Name & "','" & "" & "','" & ctl & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
strChekaDiferente = False
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 Me.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
If ctl.Value <> ctl.OldValue Or (IsNull(ctl.Value) Or ctl.Value = "") 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(),'" & Me.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
1 - não está gravando na tabela tbllog quando oldvalue = "" e altero para algum outro valor
2 - está gravando na tbllog quando o oldvalue="" e o value = "", ou seja, não houve alteração
Desde já agradeço a ajuda.
Private Sub comando297_Click()
Dim strChekaDiferente As Boolean
Dim strSQL As String
Dim ctl As Control
Dim strUser As String
strChekaDiferente = False
strUser = GetUserName_TSB
If Me.NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
For Each ctl In Me.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
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Me.Form.Name & "','" & ctl.Name & "','" & "" & "','" & ctl & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
strChekaDiferente = False
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 Me.Controls
' Percorre todos os tipos de controles
Select Case ctl.ControlType
Case acTextBox, acComboBox, acListBox, acOptionGroup, acCheckBox
If ctl.Locked = False Then
If ctl.Value <> ctl.OldValue Or (IsNull(ctl.Value) Or ctl.Value = "") 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(),'" & Me.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