Antes de Atualizar

Para quem trabalha com formulários acoplados nem sempre é fácil fazer o controle de registros que são, com bastante frequência, gravados sem que o usuário tenha completado as informações de todos os campos. O Resultado, muitas vezes, são tabelas parcialmente preenchidas e dados inconsistentes.

A solução passa por alguns cuidados que o programador deve ter. Nas propriedades do formulário preencha conforme figura abaixo:

image

Veja que apenas Permitir filetros e edições estão marcadas como sim.

Para controlar a gravação do registro você precisa:

1. Inserir o código abaixo dentro do Evento Antes de Atualizar do formulário.

On Error Resume Next
    Dim sConfirma As String
    If sGrava <> "N" Then 'se for sim permite gravar normalmente
    Else
        If Me.Dirty = True Then 'se foi alterado
            Beep
            sConfirma = MsgBox("O Registro foi alterado. Deseja gravar as alterações?", vbQuestion + vbYesNoCancel, Me.Caption)
            If sConfirma = vbYes Then
                If VerCampos = True Then '*
                Else
                    DoCmd.CancelEvent   'cancela evento atualizar porque houve problemas nos campos
                End If
                Exit Sub
            End If
            If sConfirma = vbCancel Then
                DoCmd.CancelEvent   'apenas cancela evento atualizar
                Exit Sub
            End If
            If sConfirma = vbNo Then
                Me.Undo             'volta alterações
                Exit Sub
            End If
        End If
    End If

2. Criar uma variável no módulo do formulário chamada sGrava como string

Dim sGrava As String

3. No botão gravar insira o código abaixo:

On Error goto ErroGravar
If VerCampos = True Then
   sGrava = "S" 'Habilita a gravação que será examinada no Evento Antes de atualizar
   DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
   sGrava = "N" 'Desabilita para gravar
   Me.AllowAdditions = False 'Volta o formulário para não aceitar novos registros
End If

Exit Sub
ErroGravar:
sGrava="N"
msgbox Err.Number & " " & Err.Description, VbInformation, Me.Caption
Exit Sub

4. No evento Ao Abrir

sGrava = "N"

Esses cuidados serão suficientes para que toda e qualquer gravação do registro possa ser feita única e exclusivamente pelo botão Gravar.

* VerCampos é uma função que retorna false caso algum campo obrigatório ficou sem ser preenchido:

Private Function VerCampos() As Boolean
    If Me.Nome <> Empty Then
    Else
        MsgBox "Nome é obrigatório", vbInformation, Me.Caption
        Me.Nome.SetFocus
        VerCampos = False
        Exit Function
    End If

    VerCampos = True
End Function

Notas

Botão Novo Registro

If Me.ID_Integracao <> Empty Then 'Campo Autonumeração – chave primária
    Me.AllowAdditions = True
    DoCmd.GoToRecord , , acNewRec
    Me.Nome.SetFocus
Else
    MsgBox "Você já está em um registro novo", vbInformation, Me.Caption
End If

Botão Excluir Registro

On Error GoTo ErroExclusao

    Me.AllowDeletions = True 'Altera formulário para aceitar exclusão

    DoCmd.DoMenuItem acFormBar, acEditMenu, 8, , acMenuVer70
    DoCmd.DoMenuItem acFormBar, acEditMenu, 6, , acMenuVer70

    Exit Sub

ErroExclusao:
    MsgBox Err.Description, VbInformation, Me.Caption
    Exit Sub

Nenhum comentário:

Postar um comentário