ERROR -2147217887

MAICONLS 25/05/2005 12:56:10
#85133
Tenho uma tabela em que os campos Cpf e Rg eu coloquei indexado para não aceitar valores duplicados...Tenho um form que busco pelo numero do Cpf do cliente e se for encontrado acontece o prenchimento dos campos com os dados do cliente, no mesmo form tenho um botão EDITAR que quando clicado ele destrava os campos para editagem das informações. Tenho também um botão salvar e é este que esta me incomodando quando eu dou um click nele me aparece o erro ERROR -2147217887 eu sei que este erro é devido ao indexamento que eu fiz para não aceitar valores duplicados mas o que acontece é que eu não estou querendo inserir novos dados mas sim apenas fazer uma atualização dos mesmo usando o update..Vou postar o código para analise e se alguém poder me dar uma dica do que esta acontecendo agradeço...

Private Sub cmdsalvar_Click()

If Len(txtnomecliente.Text) < 5 Then
MsgBox "Digite o nome completo do cliente!", vbInformation, "Atenção!"
txtnomecliente.SetFocus
Exit Sub

ElseIf Len(txtcpf.Text) < 8 Then
MsgBox "Cpf inválido!", vbInformation, "Atenção!"
txtcpf.SetFocus
Exit Sub

ElseIf Len(txtrg.Text) < 4 Then
MsgBox "Rg inválido!", vbInformation, "Atenção!"
txtrg.SetFocus
Exit Sub

ElseIf Len(txtorgaoemissor.Text) < 3 Then
MsgBox "Informe o órgão emissor do Rg!", vbInformation, "Atenção!"
txtorgaoemissor.SetFocus
Exit Sub

ElseIf Len(txtnascimento.Text) < 6 Then
MsgBox "Informe a data de nascimento!", vbInformation, "Atenção!"
txtnascimento.SetFocus
Exit Sub

ElseIf Len(txtsexo.Text) < 3 Then
MsgBox "Informe o sexo do cliente!", vbInformation, "Atenção!"
txtsexo.SetFocus
Exit Sub

ElseIf Len(txtestadocivil.Text) < 5 Then
MsgBox "Informe o estado civil!", vbInformation, "Atenção!"
txtestadocivil.SetFocus
Exit Sub

ElseIf Len(txtenderecoresidencial.Text) < 8 Then
MsgBox "Informe o endereço do cliente!", vbInformation, "Atenção!"
txtenderecoresidencial.SetFocus
Exit Sub

ElseIf Len(txtbairro.Text) < 4 Then
MsgBox "Informe o bairro!", vbInformation, "Atenção!"
txtbairro.SetFocus
Exit Sub

ElseIf Len(txtcidade.Text) < 4 Then
MsgBox "Informe a cidade!", vbInformation, "Atenção!"
txtcidade.SetFocus
Exit Sub

ElseIf Len(txtuf.Text) < 1 Then
MsgBox "Informe a unidade federativa!", vbInformation, "Atenção!"
txtuf.SetFocus
Exit Sub

ElseIf Len(txtcep.Text) < 9 Then
MsgBox "Informe o cep corretamente!", vbInformation, "Atenção!"
txtcep.SetFocus
Exit Sub

ElseIf Len(txttiporesidencia.Text) < 5 Then
MsgBox "Informe o tipo de residencia!", vbInformation, "Atenção!"
txttiporesidencia.SetFocus
Exit Sub

ElseIf Len(txttemporesidencia.Text) < 4 Then
MsgBox "Informe o tempo de residência!", vbInformation, "Atenção!"
txttemporesidencia.SetFocus
Exit Sub

Else

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x:\Data.mdb;Jet OLEDB:Database Password=tmonrsr2308s;"
Set rs.ActiveConnection = cnn
rs.Open "SELECT * FROM CadClientes", cnn, adOpenKeyset, adLockOptimistic


rs.Fields("NomeCliente") = txtnomecliente.Text
rs.Fields("Cpf") = txtcpf.Text
rs.Fields("Rg") = txtrg.Text
rs.Fields("OrgaoEmissor") = txtorgaoemissor.Text
rs.Fields("Nascimento") = txtnascimento.Text
rs.Fields("Sexo") = txtsexo.Text
rs.Fields("EstadoCivil") = txtestadocivil.Text
rs.Fields("Enderecoresidencial") = txtenderecoresidencial.Text
rs.Fields("Bairro") = txtbairro.Text
rs.Fields("Cidade") = txtcidade.Text
rs.Fields("Uf") = txtuf.Text
rs.Fields("Cep") = txtcep.Text
rs.Fields("TipoResidencia") = txttiporesidencia.Text
rs.Fields("TempoResidencia") = txttemporesidencia.Text
rs.Fields("TelefoneResidencial") = txtfoneresidencial.Text
rs.Fields("TelefoneCelular") = txtfonecelular.Text
rs.Fields("Observacoes") = txtobservacoes.Text
rs.Update

rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing


MsgBox "Cadastro alterado com sucesso!", vbInformation, " Atenção!"



txtnomecliente.Text = ""
txtcpf.Text = ""
txtrg.Text = ""
txtorgaoemissor.Text = ""
txtnascimento.Text = ""
txtsexo.Text = ""
txtestadocivil.Text = ""
txtenderecoresidencial.Text = ""
txtbairro.Text = ""
txtcidade.Text = ""
txtuf.Text = ""
txtcep.Text = ""
txttiporesidencia.Text = ""
txttemporesidencia.Text = ""
txtfoneresidencial.Text = ""
txtfonecelular.Text = ""
txtobservacoes.Text = ""


optcpf.Enabled = True
optrg.Enabled = True
cmdeditar.Enabled = False
cmdsalvar.Enabled = False

End If
End Sub
USUARIO.EXCLUIDOS 25/05/2005 13:13:25
#85141
Resposta escolhida
pode não ter nada a ver mas pelo menos aqui tem um codigo errado
Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x:\Data.mdb;Jet OLEDB:Database Password=tmonrsr2308s;"
Set rs.ActiveConnection = cnn
rs.Open "SELECT * FROM CadClientes", cnn, adOpenKeyset, adLockOptimistic
você atribuiu activeconnection cnn pelo set e atribuiu novamente no open
o correto seria

Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=x:\Data.mdb;Jet OLEDB:Database Password=tmonrsr2308s;"
Set rs = New ADODB.recordset
rs.Open "SELECT * FROM CadClientes", cnn, adOpenKeyset, adLockOptimistic
detalher se esta for sua rotina de alteração dos dados então seu select esta errado, pois seria assim:

rs.Open "SELECT * FROM CadClientes Where CodClientes = " & textcodcliente.text , cnn, adOpenKeyset, adLockOptimistic
pois se você esta atualizando um recordset que esta aberto, o mesmo tem que estar aberto somente com o registro a ser atualizado. Do jeito que esta fazendo ele esta abrindo todos os registros da tabela e não esta identificando o registro a ser atualizado. Caso todos os registros necessitem estar abertos, você tem que ter certeza que o registro a ser atualizado esta na posição atual de visualização do recordset para ser atualizado.
Tópico encerrado , respostas não são mais permitidas