Ir para conteúdo

POWERED BY:

Arquivado

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

bruno_pascal

DB Cuncurrency exception Delete command

Recommended Posts

Oi Boa noite a todos deste fórum

 

Tenho um projeto parado de agenda no visual basic 2008 , onde é feito um cadastro com dados de campo (nome, endereço, telefone, celular, e-mail e observação) na base de dados mysql.

 

O problema é o seguinte : Quando eu adiciono um contato e logo em seguida eu tento apagá-lo, aparece um erro tal como : DBConcurrencyException(Violação de concorrência: DeleteCommand afetou 0 dos registros 1 esperados.)

 

Alguém deste fórum poderia me ajudar dando uma solução para este problema, indicando o que deve ser feito? Qual modificação devo fazer no código para que este erro não apareça mais ?

 

Se alguém souber e puder me ajudar , ficarei muito grato. Não tenho experiência com banco de dados mysql.

 

Desde já agradeço,

Obrigado a todos.

 

Aqui vai o trecho do código onde o erro aparece :

 

Private Sub btnApagar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnApagar.Click

        If marcador = 0 Then
            Dim resposta As DialogResult
            resposta = MessageBox.Show("Deseja realmente excluir este contato?", "Processo de exclusão", MessageBoxButtons.YesNo, MessageBoxIcon.Question)

            If resposta = Windows.Forms.DialogResult.Yes Then

                Dim oDataRow As DataRow

                oDataRow= Me.oDataset.Tables("contatos").Rows(Me.iPosLinhaAtual)
                oDataRow.Delete()

                Dim oTabelaApagada As DataTable
                oTabelaApagada = Me.oDataset.Tables("contatos").GetChanges(DataRowState.Deleted)


                Me.oDataAdapter.Update(oTabelaApagada) '******//LINHA DO ERRO
                Me.oDataset.Tables("contatos").AcceptChanges()

                MessageBox.Show("Contato excluído com sucesso!", "Exclusão concluída", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.marcador = 0
                btnAnterior.PerformClick()


            Else

                Return
            End If
        End If

    End Sub


   
End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando esse erro acontece vc é o unico usuario usando o sistema?

 

pode ser que alguma operação esta travando(lock) a tabela ou alguns registros em especifico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado por responder. Não entendi bem o que quis dizer com "único usuário" .Se puder ser mais específico. Mas assim, no meu computador não tem diferentes usuários cadastrados para acessar o sistema. Só tem eu mesmo.

 

Existe apenas uma tabela no banco de dados mysql,chamada contatos. Nela existem os campos : ID(auto-incremento/chave primária) , Nome, Endereço, Telefone, entre outros campos. Só que está acontecendo o seguinte : Assim que eu executo o programa, o formulário se abre, daí eu clico em Novo ,adiciono um contato qualquer e depois clico em Salvar. Então vou no banco de dados e aparece o contato recém-adicionado. Então logo depois , eu resolvo excluir esse mesmo contato que acabei de salvar. Então esse erro aparece : DBConcorrency Exception(Violação de concorrência: DeleteCommand afetou 0 dos registros 1 esperados) e eu não tenho idéia de como resolver isso, pois também estou aprendendo visual basic. Porém não sei se é algum trecho de código que está faltando...

 

Se puder dar uma solução para o problema indicando o que devo fazer, ficarei muito agradecido, pois estou com esse projeto parado já há algum tempo e não sei o que fazer. O resto do programa está funcionando direitinho.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Visualizei o arquivo contido no link que acabou de enviar , mas é isso que não consigo entender . Em determinado trecho é dito sobre uma das desvantagens de utilizar o DataSet : "Uma delas é o conflito que pode ocorrer quando dois ou mais usuários tentam atualizar os dados em uma mesma linha de uma dada tabela (mesmo registro). A este problema chamamos concorrência."

 

Isso que está me confundindo. O que acontece comigo é não existem 2 ou mais usuários, como afirma o trecho. Somente eu estou acessando o sistema. Para mim não interessaria por exemplo " interromper" o erro e não travar a tela , porém ele continuar existindo. Pois já tentei usar um (try - catch) que "trava" o erro, mas não fica funcional ,ou seja, ainda não consigo apagar o contato quando realizo aquele procedimento. Teria algum comando para ser adaptado ao meu código para atualizar a tabela para que o erro não aconteça?

Compartilhar este post


Link para o post
Compartilhar em outros sites

abrir 2 vezes ou mais o seu programa em vb pode ser uma das causas do erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fica complicado , pois quando na finalização de um programa, essa possibilidade do mesmo usuário acessar ou abrir o programa 2 ou mais vezes existe. Como lidar com essa situação para que o erro não aconteça? Essa é a pergunta "que não quer calar".

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.