Jump to content

[Resolvido] problema em apagar da base de dados


Recommended Posts

Boa noite, estou a realizar um trabalho e acontece que nao estou a conseguir apagar da base de dados...

o codigo que tenho é o seguinte:


'Isto está declarado fora das sub

Public conprovide As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Application.Info.DirectoryPath & "\Base de Dados.mdb;"

'################
Private Sub btnapagar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnapagar.Click
        Dim escolher As Integer

        escolher = ListBox1.SelectedValue

        Try
            Dim sqlapagar As String = "DELETE FROM Clientes WHERE ([nºcliente]=?)"

            'inicia ligação a base de dados
            Using connection As New OleDb.OleDbConnection(conprovide)

                'define o comando e os parametros
                Dim command As New OleDb.OleDbCommand(sqlapagar, connection)
                command.Parameters.Add("nºcliente", OleDb.OleDbType.Integer).Value = escolher

                'abrir ligação e insere o registo
                connection.Open()

                Dim x As Integer = command.ExecuteNonQuery()

                If x <> 1 Then
                    Throw New ArgumentException("Não foi possível eliminar o registo do Cliente da Base de dados!")
                Else : MessageBox.Show("Cliente Eliminado")

                    'remover da list box
                    ListBox1.Items.Remove(escolher)
                End If

            End Using
        Catch ex As Exception
            MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try

        preencherlistbox(ListBox1, "SELECT Nome FROM Clientes")

    End Sub

Acontece o seguinte, quando selecciono alguma coisa na listbox, e carrego no botao apagar, ele dá-me um erro, entra onde diz "Não foi possivel eliminar o registo do cliente da base de dados...

Alguem me pode ajudar?

Link to post
Share on other sites

Acontece o seguinte, quando selecciono alguma coisa na listbox, e carrego no botao apagar, ele dá-me um erro, entra onde diz "Não foi possivel eliminar o registo do cliente da base de dados..."

O erro que te dá é este?

Não foi possível eliminar o registo do cliente da base de dados porque já existem registos relacionados

Pedro Martins

Não respondo a duvidas por PM

Link to post
Share on other sites

Substitui estas linhas

Dim sqlapagar As String = "DELETE FROM Clientes WHERE [nºcliente] = @Cliente"
command.Parameters.Add("@Cliente", OleDb.OleDbType.Integer).Value = escolher

Se o erro continuar, não é devido à sintaxe SQL.

Pedro Martins

Não respondo a duvidas por PM

Link to post
Share on other sites

Retira o "=?" do teu comando SQL

Desta forma é que está correcto para Access :)

 


 

@arned,

O código não está a dar erro, tu é que estás a invocar um erro (o que é bem diferente).

O que está a acontecer é que não está a fazer nada ... qual é o valor da variável "escolher" ? Não será zero?

Link to post
Share on other sites

entao mas se eu alterar o valor seleccionado da listbox ele nunca vai dar certo...

a nao ser que com o nome que é apresentado na listbox fassa um SELECT para ver o nº de cliente.. que é unico para cada um dos clientes...

mas isso eu nao sei fazer.. :S

Link to post
Share on other sites

o valor da variavel escolher é o listbox.selectedvalue...

mas agora que estou a pensar...

pode ser zero sim... porque eu antes estava a prencher a listbox com o databinding(logo ele ia buscar o valor que era o nºcliente) mas agora criei uma função para a preencher atravez da base de dados..

Só que assim nao tem o selected value...

tinha pensado em fazer uma função para procurar na base de dados pelo nome igual ao que selecciono na listbox e depois ela retornava o nºcliente...

só que estou com algumas dificuldades... :X

Link to post
Share on other sites

sim, já tentei... e nao estou a conseguir arranjar solução..

Decidi fazer uma função para pesquisar na base de dados e para me retornar o nºcliente.

Assim, meto uma message box, com todas as informações desse cliente, para ter a certesa do cliente que quer apagar.

se meter sim, apaga..

Agora já fiz a string sql, que é simples... estou agora a tentar fazer a pesquisa na base de dados.

Link to post
Share on other sites

sim, já tentei... e nao estou a conseguir arranjar solução..

Decidi fazer uma função para pesquisar na base de dados e para me retornar o nºcliente.

Assim, meto uma message box, com todas as informações desse cliente, para ter a certesa do cliente que quer apagar.

se meter sim, apaga..

Agora já fiz a string sql, que é simples... estou agora a tentar fazer a pesquisa na base de dados.

Já experimentaste em vez de colocar o valor que vem da listview, colocares um número (id) que saibas que existe? É que o problema deve ser da forma como preenches a listbox (que não te guarda os valores).

Não te esqueças que podes ter dois nomes iguais e dessa forma como queres também não vai funcionar :P  

Link to post
Share on other sites

pois... entao, em vez de adicionar a listbox só o nome do cliente, adiciono tambem o numero de cliente é isso?

é que eu quando preencho a listbox so estou a meter os nomes....

não sei como fazer para adicionar o nºcliente como value da listbox... nem sei se dá para fazer isso..

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.