COMO EVITAR REGISTROS DUPLICADOS

REINALDOSPINDOL 22/09/2011 10:16:25
#384931
Então pessoal, lá vai.

Minha conexão:
Dim str As String
Set adoconn = Nothing
adoconn.Open [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=cadastrodeclientes.mdb;Persist Security Info=False[Ô]
str = [Ô]select * from clientes order by nome[Ô]
rs.Open str, adoconn, adOpenDynamic, adLockPessimistic
rs.MoveFirst

Copiei o código do tópico mencionado e ficou assim:

Public Sub Verifica()
Dim Verifica As String
Dim sql As String
sql = [Ô]Select * From clientes Where Nome =[ô][Ô] & cnpjmask.Text & [Ô][ô][Ô]
rs.Open sql, adoconn, adOpenDynamic, adLockOptimistic
Do While Not rs.EOF
Verifica = rs(4)
rs.MoveNext
Loop
If Verifica <> [Ô][Ô] Then
MsgBox [Ô]Já existe esse CNPJ cadastrado [Ô], vbExclamation, [Ô]SPY[Ô]
Exit Sub
End If
rs.Close
End Sub

Private Sub cnpjmask_LostFocus()
Dim sql As String
If rs.State = 1 Then rs.Close
sql = [Ô]Select Nome From Clientes Where Nome =[ô][Ô] & cnpjmask.Text & [Ô][ô][Ô]
rs.Open sql, adoconn, adOpenKeyset, adLockPessimistic
If rs.RecordCount > 0 Then
MsgBox [Ô]Já existe esse CNPJ Cadastrado [Ô], vbExclamation, [Ô]SPY[Ô]
cnpjmask.Text = [Ô][Ô]
cnpjmask.SetFocus
End If
rs.Close
End Sub

Os erros que aparecem são os seguintes:
Quando coloco um cnpj existente ele aparece o erro 3219 operação não permitida neste contexto e me mostra a linha e comando.
If rs.State = 1 Then [txt-color=#e80000]rs.Close[/txt-color]

Se eu coloco Verifica antes do lostfocus ele aparece o seguinte, erro 3705 operação não permitida quando o objeto está aberto. E me mostra a linha
rs.Open sql, adoconn, adOpenDynamic, adLockOptimistic

Se precisarem de mais alguns dados eu passo aqui, ok?
Obrigado pela ajuda.
ALTAIR148 22/09/2011 10:30:38
#384933
Acho que é pq vc não esta fechando a sua conexão.
FEDERHEN 22/09/2011 11:01:38
#384937
Olá amigo!
Você está comparando nome com cnpjmask...
Meio estranho !?!?!?!?!?!?!?!?

Private Sub cnpjmask_LostFocus()
Dim sql As String
If rs.State = 1 Then rs.Close
sql = [Ô]Select Nome From Clientes Where [txt-color=#e80000]Nome[/txt-color] =[ô][Ô] & [txt-color=#e80000]cnpjmask.Text[/txt-color] & [Ô][ô][Ô]
rs.Open sql, adoconn, adOpenKeyset, adLockPessimistic
If rs.RecordCount > 0 Then
MsgBox [Ô]Já existe esse CNPJ Cadastrado [Ô], vbExclamation, [Ô]SPY[Ô]
cnpjmask.Text = [Ô][Ô]
cnpjmask.SetFocus
End If
rs.Close
End Sub
REINALDOSPINDOL 22/09/2011 11:05:44
#384939
Opa.

Eu tinha esquecido de modificar isso, rsrs. Mas mesmo depois de modificado não mudaram os erros

Obrigado
ROBIU 22/09/2011 13:45:27
#384959
Quando click no seu butão Novo, limpa o registro e prepara o Rs para edição com:
Citação:

Rs.AddNew


Se o Rs está aguardando um Rs.Update ou Rs.CancelUpdate não podemos usar-lo para a pesquisar no banco. Então vamos usar um outro Rs para fazer o trabalho.
Então Ficou assim:

Public Function RegExiste() As Boolean
Dim Rsv As New ADODB.Recordset
Dim Sql As String

RegExiste = False
Sql = [Ô]Select nome From clientes Where CNPJ =[ô][Ô] & cnpjmask.Text
Sql = Sql & [Ô][ô] or CPF =[ô][Ô] & cnpjmask.Text & [Ô][ô][Ô]
Rsv.CursorLocation = adUseClient
Rsv.Open Sql, adoconn, adOpenKeyset, adLockPessimistic
If Rsv.RecordCount > 0 Then RegExiste = True
Rsv.Close
Set Rsv = Nothing
End Function



Página 2 de 2 [15 registro(s)]
Tópico encerrado , respostas não são mais permitidas