Boa noite camaradas de Access....
Eu fiz umas adaptações num BD que checa o CPF....
No evento antes de atualizar o campo CPF, coloquei o seguinte código....
-------------------------------------------------------------------------------------
Private Sub CPF_BeforeUpdate(Cancel As Integer)
If DCount("CPF", "Pessoas", "CPF='" & Me!CPF & "'") >= 1 Then
MsgBox "Este número de CPF já foi cadastrado !", vbInformation, "Informação"
Cancel = True
Exit Sub
End If
End Sub
--------------------------------------------------------------------------------------------
No evento após atualizar coloquei uma chamada =DVCPF([CPF]) que roda o módulo chamado VERCPF que tem o código abaixo, que adaptei tbm...
--------------------------------------------------------------------------------------------
Function DVCPF(CPF As String) As String
'Rotina alterada por Edu Cav - 2013
'Data: 24/06/2013
'Site: http://educavnews.tk
If CPF = "11111111111" Or CPF = "22222222222" Or CPF = "33333333333" _
Or CPF = "44444444444" Or CPF = "55555555555" Or CPF = "66666666666" _
Or CPF = "77777777777" Or CPF = "88888888888" Or CPF = "99999999999" Or CPF = "00000000000" Then
MsgBox "O CPF é INVÁLIDO! Digite-o novamente.", vbCritical
Exit Function
End If
Dim lngSoma, lngInteiro As Long
Dim intNumero, intMais, I, intResto As Integer
Dim intDig1, intDig2 As Integer
Dim strDigVer, StrCampo, strCaracter, strConf As String
Dim dblDivisao As Double
lngSoma = 0
intNumero = 0
intMais = 0
StrCampo = Left(CPF, 9)
strDigVer = Right(CPF, 2)
For I = 2 To 10
strCaracter = Right(StrCampo, I - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * I
lngSoma = lngSoma + intMais
Next I
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig1 = 0
Else
intDig1 = 11 - intResto
End If
StrCampo = StrCampo & intDig1
lngSoma = 0
intNumero = 0
intMais = 0
For I = 2 To 11
strCaracter = Right(StrCampo, I - 1)
intNumero = Left(strCaracter, 1)
intMais = intNumero * I
lngSoma = lngSoma + intMais
Next I
dblDivisao = lngSoma / 11
lngInteiro = Int(dblDivisao) * 11
intResto = lngSoma - lngInteiro
If intResto = 0 Or intResto = 1 Then
intDig2 = 0
Else
intDig2 = 11 - intResto
End If
strConf = intDig1 & intDig2
DVCPF = strConf
If DVCPF <> strDigVer Then
' If DVCPF = strDigVer Then
' MsgBox "CPF correto!", vbInformation
' Else
MsgBox "O CPF é INVÁLIDO! Informe-o novamente !", vbCritical
DoCmd.CancelEvent
End If
End Function
---------------------------------------------------------------------------------
E no evento ao sair do campo CPF, coloquei o código abaixo.....
Private Sub CPF_Exit(Cancel As Integer)
'Este if verifica o controle que está o foco, se estiver nulo ou em branco então
If IsNull([CPF]) Or IsEmpty([CPF]) Then
'Dispara uma mensagem ao usuário do computador para que ele tome uma decisão. Se ele escolher Ok, então passa a frente
If MsgBox("É recomendado o preenchimento do CPF." & Chr(13) & _
"Deseja não preencher agora e preenchê-lo em outro momento?", vbExclamation + vbOKCancel, " Atenção !!!") = vbOK Then Exit Sub
'Se escolher e apertar Cancelar, então o foco direciona para caixa de texto (Texto2)
Me.CPF.SetFocus
Cancel = True
End If
End Sub
-------------------------------------------------------------------------------------------------
Bem, o que ainda me falta é um jeito de deixar vazio o campo CPF caso ele seja digitado errado.
Os códigos acima apenas me dão uma noção do que está ocorrendo com o CPF, ou seja, se deixo vazio, ele acusa, mas passa ao campo seguinte. Se digito um CPF que já existe ele me avisa que já há um CPF igual.
Mas preciso que ele seja zerado no caso de ser um CPF inválido e que eu consiga ir para o campo seguinte.
Alguma luz aí pessoal ?
Grato,
Edu Cav