Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

alissong

Run-Time error '2147217864 (80040e38)'

Recommended Posts

Pessoal,

 

Tenho um sistema construído em visual basic 06 com o banco de dados postgres, mas quando peço para alterar um cnpj específico exibe esse erro:

 

A linha não pode ser localizada para atualização.

Alguns valores podem ter sido alterados desde que ela foi lida pela última vez.

Run-Time error '2147217864 (80040e38)'

 

Veja o código complemento para update.

Private Sub cmdgravar_Click()

Dim controle As Control

For Each controle In form_fornecedor

If TypeOf controle Is TextBox Then

controle.Text = Limpa_Texto(controle.Text)

End If

Next

On Error GoTo cmdgravar ' Erro ao gravar registro

 

If nome_empresa.Text = Empty Then

MsgBox "Digite o nome do fornecedor", vbExclamation, "Campo Obrigatório"

nome_empresa.SetFocus

Exit Sub

End If

If cnpj_cpf.Text = Empty Then

MsgBox "Digite o CPF/CNPJ do Fornecedor", vbExclamation, "Campo Obrigatório"

cnpj_cpf.SetFocus

Exit Sub

End If

If telefone.Text = Empty Then

MsgBox "Digite o telefone do fornecedor", vbExclamation, "Campo Obrigatório"

telefone.SetFocus

Exit Sub

End If

If atividade.Text = Empty Then

MsgBox "Digite a atividade do fornecedor", vbExclamation, "Campo Obrigatório"

atividade.SetFocus

Exit Sub

End If

 

AdoFornecedor("tipo_pessoa") = "" & tipo_pessoa.Text

AdoFornecedor("cnpj_cpf") = "" & cnpj_cpf.Text

AdoFornecedor("inscricao_estadual") = "" & inscricao_estadual.Text

AdoFornecedor("inscricao_municipal") = "" & inscricao_municipal.Text

AdoFornecedor("nome_empresa") = "" & nome_empresa.Text

AdoFornecedor("nome_contato") = "" & nome_contato.Text

AdoFornecedor("logradouro") = "" & logradouro.Text

AdoFornecedor("endereco") = "" & endereco.Text

AdoFornecedor("numero") = "" & numero.Text

AdoFornecedor("bairro_distrito") = "" & bairro_distrito.Text

AdoFornecedor("cidade") = "" & cidade.Text

AdoFornecedor("estado") = "" & estado.Text

AdoFornecedor("cep") = "" & cep.Text

AdoFornecedor("telefone") = "" & telefone.Text

AdoFornecedor("fax") = "" & fax.Text

AdoFornecedor("home_page") = "" & home_page.Text

AdoFornecedor("e_mail") = "" & e_mail.Text

AdoFornecedor("situacao_cadastral") = "" & situacao_cadastral.Text

AdoFornecedor("atividade") = "" & atividade.Text

 

AdoFornecedor.Update

AdoFornecedor.Requery

mostradados

mostra_registro

'Desabilita o botão cancelar

cmdcancelar.Enabled = False

'Desabilita o botão gravar

cmdgravar.Enabled = False

'Desabilita o botão excluir

cmdexcluir.Enabled = False

'Habilita o botão incluir

cmdincluir.Enabled = True

 

nome_empresa.Locked = True

nome_contato.Locked = True

tipo_pessoa.Locked = True

inscricao_estadual.Locked = True

inscricao_municipal.Locked = True

logradouro.Locked = True

endereco.Locked = True

numero.Locked = True

bairro_distrito.Locked = True

cidade.Locked = True

estado.Locked = True

situacao_cadastral.Locked = True

e_mail.Locked = True

home_page.Locked = True

atividade.Locked = True

cnpj_cpf.Enabled = False

telefone.Enabled = False

fax.Enabled = False

cep.Enabled = False

gUltHora = Now

 

MsgBox "Gravação realizada com sucesso !", vbInformation, "Salvar Inclusão / Alteração"

form_fornecedor.Refresh

cmdgravar_exit:

Exit Sub

 

cmdgravar:

MsgBox Err.Description, vbInformation, "Erro em [cmdgravar]"

 

End Sub

 

Então, alguém pode me explicar esse error.

 

Um abraço.

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pode ser o tipo de conexão. Aquelas coisas de PassTrought, Optimist.....

 

Como tá fazendo a conexão ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Scorpio,

 

A conexão está assim:

Private Sub Form_Load()
On Error GoTo Form_Load ' Erro ao carregar formulário

If AdoFornecedor.State = 1 Then Set AdoFornecedor = Nothing

sql = "select * from fornecedor order by nome_empresa"
AdoFornecedor.Open sql, gconexao, adOpenKeyset, adLockPessimistic
gconexao.CursorLocation = adUseClient
gconexao.Execute sql
AdoFornecedor.MoveFirst
AdoFornecedor.CacheSize = 30
Set DataGridFornecedor.DataSource = AdoFornecedor

mostradados
mostra_registro
estado.AddItem "AC"
estado.AddItem "AL"
estado.AddItem "AM"
estado.AddItem "AP"
estado.AddItem "BA"
estado.AddItem "CE"
estado.AddItem "DF"
estado.AddItem "ES"
estado.AddItem "GO"
estado.AddItem "MA"
estado.AddItem "MG"
estado.AddItem "MS"
estado.AddItem "MT"
estado.AddItem "PA"
estado.AddItem "PB"
estado.AddItem "PE"
estado.AddItem "PI"
estado.AddItem "PR"
estado.AddItem "RJ"
estado.AddItem "RN"
estado.AddItem "RO"
estado.AddItem "RR"
estado.AddItem "RS"
estado.AddItem "SC"
estado.AddItem "SE"
estado.AddItem "SP"
estado.AddItem "TO"
logradouro.AddItem "ALAMEDA"
logradouro.AddItem "AVENIDA"
logradouro.AddItem "BECO"
logradouro.AddItem "BR"
logradouro.AddItem "ESTRADA"
logradouro.AddItem "PRAÇA"
logradouro.AddItem "RUA"
logradouro.AddItem "TRAVESSA"
situacao_cadastral.AddItem "NORMAL"
situacao_cadastral.AddItem "PENDENTE"
tipo_pessoa.AddItem "J"
tipo_pessoa.AddItem "F"

Form_Load_exit:
Exit Sub
Form_Load:
MsgBox Err.Description, vbInformation, "Erro ao [Form_Load]"

End Sub

Um abraço.

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

Alissong, você selecionou alguma linha em algum local para fazer o update.

 

Digo, em algum momento você deu um find por exemplo para selecionar qual linha você quer atualizar ou está sempre exibindo a primeira, já uqe na hora de abrir sua conexão colocou um movefirst?

 

 

E só uma coisinha, na sua conexão, você pode tirar a linha "gconexao.Execute sql", não serve para nada nesse caso.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudio Neto,

 

Retirei a linha como disse e a conexão funcionou normal. Então, procuro a empresa para atualizar com o metodo find. Veja o código completo:

Private Sub busca_fornecedor_Change()
Dim sArg As String
On Error GoTo busca_fornecedor ' Erro encontrar registro
' remove os bookmark salvos anteriormentes da coleção
If (DataGridFornecedor.SelBookmarks.Count <> 0) Then
   DataGridFornecedor.SelBookmarks.Remove 0
End If

If busca_fornecedor.Text <> "" Then
AdoFornecedor.MoveFirst '<<<- MUITO importante!!!
sArg = LCase$(busca_fornecedor.Text)

'P/ procurar algum nome que COMECE com o que
'foi digitado:
AdoFornecedor.Find "nome_empresa like '" & sArg & "*'", adSearchForward
DataGridFornecedor.Refresh

If AdoFornecedor.EOF Then
MsgBox "Fornecedor não encontrado"
busca_fornecedor.SetFocus
Else
DataGridFornecedor.SelBookmarks.Add _
AdoFornecedor.Bookmark
mostradados

End If
End If
busca_fornecedor_exit:
Exit Sub

busca_fornecedor:
MsgBox Err.Description, vbInformation, "Erro ao [busca_fornecedor]"

End Sub

A função mostradados está assim:

Private Sub mostradados()

On Error GoTo mostradados ' Inicia tratamento de erro
If AdoFornecedor.BOF = True Or AdoFornecedor.EOF = True Then
Exit Sub
'se o ponteiro esta no fim do arquivo ou no comeco sai
End If

If IsNull(AdoFornecedor("nome_empresa")) Then
nome_empresa.Text = ""
Else
nome_empresa.Text = AdoFornecedor("nome_empresa")
End If
If IsNull(AdoFornecedor("nome_contato")) Then
nome_contato.Text = ""
Else
nome_contato.Text = AdoFornecedor("nome_contato")
End If
If IsNull(AdoFornecedor("tipo_pessoa")) Then
tipo_pessoa.Text = ""
Else
tipo_pessoa.Text = AdoFornecedor("tipo_pessoa")
End If
If IsNull(AdoFornecedor("cnpj_cpf")) Then
cnpj_cpf.Text = ""
Else
cnpj_cpf.Text = AdoFornecedor("cnpj_cpf")
End If
If IsNull(AdoFornecedor("inscricao_estadual")) Then
inscricao_estadual.Text = ""
Else
inscricao_estadual.Text = AdoFornecedor("inscricao_estadual")
End If
If IsNull(AdoFornecedor("inscricao_municipal")) Then
inscricao_municipal.Text = ""
Else
inscricao_municipal.Text = AdoFornecedor("inscricao_municipal")
End If
If IsNull(AdoFornecedor("logradouro")) Then
logradouro.Text = ""
Else
logradouro.Text = AdoFornecedor("logradouro")
End If
If IsNull(AdoFornecedor("endereco")) Then
endereco.Text = ""
Else
endereco.Text = AdoFornecedor("endereco")
End If
If IsNull(AdoFornecedor("numero")) Then
numero.Text = ""
Else
numero.Text = AdoFornecedor("numero")
End If
If IsNull(AdoFornecedor("bairro_distrito")) Then
bairro_distrito.Text = ""
Else
bairro_distrito.Text = AdoFornecedor("bairro_distrito")
End If
If IsNull(AdoFornecedor("cidade")) Then
cidade.Text = ""
Else
cidade.Text = AdoFornecedor("cidade")
End If
If IsNull(AdoFornecedor("estado")) Then
estado.Text = ""
Else
estado.Text = AdoFornecedor("estado")
End If
If IsNull(AdoFornecedor("cep")) Then
cep.Text = ""
Else
cep.Text = AdoFornecedor("cep")
End If
If IsNull(AdoFornecedor("telefone")) Then
telefone.Text = ""
Else
telefone.Text = AdoFornecedor("telefone")
End If
If IsNull(AdoFornecedor("fax")) Then
fax.Text = ""
Else
fax.Text = AdoFornecedor("fax")
End If
If IsNull(AdoFornecedor("home_page")) Then
home_page.Text = ""
Else
home_page.Text = AdoFornecedor("home_page")
End If
If IsNull(AdoFornecedor("e_mail")) Then
e_mail.Text = ""
Else
e_mail.Text = AdoFornecedor("e_mail")
End If
If IsNull(AdoFornecedor("situacao_cadastral")) Then
situacao_cadastral.Text = ""
Else
situacao_cadastral.Text = AdoFornecedor("situacao_cadastral")
End If
If IsNull(AdoFornecedor("atividade")) Then
atividade.Text = ""
Else
atividade.Text = AdoFornecedor("atividade")
End If
If IsNull(AdoFornecedor("data_cadastro")) Then
data_cadastro.Text = ""
Else
data_cadastro.Text = AdoFornecedor("data_cadastro")
End If
mostra_registro

On Error GoTo 0
Mostradados_exit:
Exit Sub

mostradados:
MsgBox Err.Description, vbExclamation, "Erro em [mostradados]"

End Sub

Mas uma coisa que somente em alguns itens que ocorre esse erro maldito na hora de atualizá-los.

 

 

Um abraço.

 

 

Alissong

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.