Estou com uma dúvida em relação ao exemplo do JPaulo..
O problema é o seguinte: no meu formulário tenho dois campos que nem sempre são preenchidos. O campo txtprocura e o campo OBS. O código do Jpaulo transfere para a tabela tblLog tudo que foi alterado ou que estiver em branco ou nulo. Quando altero qualquer campo do formulário o código envia a tblLog o campo que eu alterei e os campos que normalmente ficam em branco (txtprocura e OBS). Como fazer para que esses campos não sejam enviados para tblLog nessa situação. O txtprocura é para pesquisa logo não deve nunca ser transferido para tblLog e o campo OBS não é campo obrigatório, ou seja, nem sempre ele é preenchido.
Alguém pode ajudar ?
Segue abaixo o código do JPaulo. Desde já agradeço ...
Sublinhei a parte que pega os campos em branco ..
On Error Resume Next
strChekaDiferente = False
strUser = Trim(login.Usuario)
If Me.NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Me.Form.Name & "','" & Me.NomeCliente & "','" & Me.CPFCliente & "','" & Me.SexoCliente & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
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
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 Select
Next ctl
End If
O problema é o seguinte: no meu formulário tenho dois campos que nem sempre são preenchidos. O campo txtprocura e o campo OBS. O código do Jpaulo transfere para a tabela tblLog tudo que foi alterado ou que estiver em branco ou nulo. Quando altero qualquer campo do formulário o código envia a tblLog o campo que eu alterei e os campos que normalmente ficam em branco (txtprocura e OBS). Como fazer para que esses campos não sejam enviados para tblLog nessa situação. O txtprocura é para pesquisa logo não deve nunca ser transferido para tblLog e o campo OBS não é campo obrigatório, ou seja, nem sempre ele é preenchido.
Alguém pode ajudar ?
Segue abaixo o código do JPaulo. Desde já agradeço ...
Sublinhei a parte que pega os campos em branco ..
On Error Resume Next
strChekaDiferente = False
strUser = Trim(login.Usuario)
If Me.NewRecord Then 'verifica se é um novo registro, se for registra com novo
strChekaDiferente = True
strSQL = "INSERT INTO tblLog (Utilizador, LogData, NomeForm, NomeCampo, ValorAntigo, ValorAtual, Status) Values('" & strUser & "', Now(),'" & Me.Form.Name & "','" & Me.NomeCliente & "','" & Me.CPFCliente & "','" & Me.SexoCliente & "','" & "Novo Registro" & "')"
DoCmd.RunSQL strSQL
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
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 Select
Next ctl
End If