Gestão de campos obrigatórios do formulário através de uma tabela

Destinado a postagens de exemplos em Microsoft Access (código aberto) por todos os utilizadores cadastrados.
Não são permitidos exemplos sem acesso à estrutura.
Não são aceitos exemplos com a extensão em .EXE

Moderador: Avelino Sampaio

Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Dilson » 14 Out 2015, 19:13

Olá,
Imagina colocar todos os nomes dos campos do formulário numa tabela e a partir daí marcar numa checkbox os campos que serão de preenchimento obrigatório. Igualmente podendo desmarcar a checkbox e o campo no formulário deixará de ser obrigatório. Isso é o que esse exemplo faz.

Desenvolvi esse código para facilitar a configuração do software entre um cliente e outro, pois a necessidade de obrigatoriedade de preenchimento difere bastante. Assim, agora posso determinar obrigatoriedade de preenchimento num clique, ganhando eficiência e evitando hora de trabalho no vba do meu formulário.

Para implementar em seu projeto terá que criar ao menos uma tabela:

Tabela: tbl_campos
Campo: CodCampo - Tipo Chave primária - autonumeração
Campo: NomeCampo - Tipo Texto
Campo: Obrigatorio - Tipo Campo Sim/Não

Preencher o campo NomeCampo com os nomes dos controles do formulário
Marcar o campo obrigatório se desejar que o preenchimento seja exigido no formulário.

Em seguida salvar num módulo e salvar com um nome qualquer ou importar do exemplo abaixo (Não precisará modificar nada no código):

Código:
Option Compare Database
'Option Explicit

'Criado por Dilson em 13 de Outubro/2015
'Objetivo: Validar campos de preenchimento obrigatório de prévia e opcional seleção

Dim Nomes_Campos As String
Dim Campoi As Control

Public Function PintarBordaCampoObrigatorio(argForm As String, argTbl As String)
Dim ctl As Control
Dim FormAtual As Form
Dim qArray
Dim i
Set FormAtual = Forms(argForm)
Call BuscarCampoObrigatorio(argTbl)
qArray = Split(Nomes_Campos, ";")
For i = 0 To UBound(qArray)
If Len(qArray(i)) > 0 Then
Set ctl = FormAtual.Controls(qArray(i))
If Nz(Len(ctl)) = 0 Then
With ctl
.BorderColor = 9934847
End With
Else
With ctl
'.BorderColor = 16777215 'branco
.BorderColor = 13487553
End With
End If
End If
Next i
End Function

Public Function ValidarCampoObrigatorio(argForm As String, argTbl As String) As Boolean
Dim ctl As Control
Dim FormAtual As Form
Dim qArray
Dim i
Dim PrimeiroCampoVazio As String
PrimeiroCampoVazio = "vazio"
Set FormAtual = Forms(argForm)
Call BuscarCampoObrigatorio(argTbl)
qArray = Split(Nomes_Campos, ";")
For i = 0 To UBound(qArray)
If Len(qArray(i)) > 0 Then
Set Campoi = FormAtual.Controls(qArray(i))
Set ctl = FormAtual.Controls(qArray(i))
If Nz(Len(ctl)) = 0 Then
If PrimeiroCampoVazio = "vazio" Then
If Nz(Len(Campoi)) = 0 Then
Campoi.SetFocus
PrimeiroCampoVazio = "focus"
ValidarCampoObrigatorio = True
End If
End If
With ctl
.BackColor = 9934847
End With
Else
With ctl
'.BackColor = 16777215 'branco
.BorderColor = 13487553
End With
End If
End If
Next i
End Function

Private Function BuscarCampoObrigatorio(argTabela)
Dim Rs As DAO.Recordset
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM " & argTabela & " ORDER BY CodCampo Asc;")
Nomes_Campos = ""
If Rs.RecordCount > 0 Then
Rs.MoveLast
Rs.MoveFirst
Do While Not Rs.EOF
If Rs("Obrigatorio") = -1 Then
Nomes_Campos = Nomes_Campos & ";" & Rs("NomeCampo")
End If
Rs.MoveNext
Loop
End If
Rs.Close
Set Rs = Nothing
End Function


Para chamar o código faça:
Código:
'Verifica campos de preenchimento obrigatório
If ValidarCampoObrigatorio(Me.Form.Name, "NomeDaTabelaComONomeDosControles") = True Then
'Faz aparecer o rótulo com o aviso campo de preenchimento obrigatório
Me.rotAviso.Visible = True
Exit Sub
Else
'Faz desaparecer o rótulo com o aviso campo de preenchimento obrigatório
Me.rotAviso.Visible = False
End If


Criar nesse formulário um rótulo (ou copiar e colar do exemplo abaixo) escrito "Campo de preenchimento obrigatório."

Pronto. Basicamente depois de implementar, não precisará mexer no formulário e nem no vba; O seu único trabalho será escrever o nome dos campos na tabela, marcá-los e desmarcá-los de acordo com necessidade do cliente.

Abraço a todos da RedeAccess!

Abaixo um exemplo:
Anexos
Exemplo_Op_Campos_Obrigatorios.rar
(31.82 KiB) Baixado 187 vezes
Última edição por Dilson em 28 Out 2015, 15:15, editado 3 vezes no total.

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Marcelo David
Mensagens: 12
Registrado em: 08 Jun 2015, 13:44

Re: Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Marcelo David » 14 Out 2015, 20:30

Muito boa e válida a iniciativa!

Testei o exemplo e fiquei com uma dúvida.
Ele avisa mas deixa salvar mesmo assim?

É que nos testes, apesar de marcado como obrigatório, ele apenas avisa. Mas se eu fechar o form
os dados são salvos normalmente...

Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Dilson » 15 Out 2015, 13:17

Olá Marcelo,

O objetivo da função é esse mesmo - Avisar que tem campo obrigatório a ser preenchido e abortar a continuação do código após a chamada.

Veja que ao chamarmos no botão:
Call ValidarCampoObrigatorio(Me.Form.Name)

A execução, continuação do código:

MsgBox "Tudo OK. Continue o processo"

somente continuará se não existir nenhum campo a preencher.

O fato de estar salvando, acontece porque o formulário nesse exemplo é vinculado e abre um registro em modo de edição. Numa situação real o form se abrirá em modo Add e o usuário terá por exemplo o botão Salvar ou Cancelar. Se apertar Salvar a validação será feita e ele será obrigado a preencher o campo. Se apertar cancelar o registro certamente não será salvo.

Espero ter esclarecido.

Marcelo David
Mensagens: 12
Registrado em: 08 Jun 2015, 13:44

Re: Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Marcelo David » 15 Out 2015, 18:39

Muito bom! Obrigado pelo esclarecimento! ;)

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.


Avatar do usuário
Dilson
Mensagens: 18
Registrado em: 08 Jun 2015, 13:11
Localização: Altamira-Pará

Re: Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Dilson » 28 Out 2015, 15:29

Informando que o código e exemplo foram atualizados.
Obs:
- O código anterior não me serviu na etapa final quando coloquei o app para .accdr; Estava funcionando apenas nas extensões .accde e accdb. Agora está adequado pra todas.

- Dinamizei o código no sentido de agora só precisaremos criar as tabelas e chamar o evento sem modificar nada de código. A validação também ficou melhor, porque agora ele pinta todos os campos e pára.

- Ademais mudei de Sub para Function levando em consideração a premissa de que Sub não deve retorna valor.

Baixem novamente o exemplo e vejam. Espero que gostem.

Luizzlcs
Mensagens: 40
Registrado em: 07 Jun 2015, 01:51

Re: Gestão de campos obrigatórios do formulário através de uma tabela

Mensagempor Luizzlcs » 20 Jun 2017, 17:52

Parabéns!

Excelente!

Disable adblock

Precisamos do seu apoio. Faca uma doacao para o site atraves do Paypal.



Voltar para “Biblioteca de exemplos Ms Access”

Quem está online

Usuários neste fórum: Nenhum usuário registrado e 1 visitante