Jump to content
arned

[Resolvido] problema em apagar da base de dados

Recommended Posts

arned

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?

Share this post


Link to post
Share on other sites
Caça

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

Share this post


Link to post
Share on other sites
Caça

O erro que te está a aparecer, é o erro que tu disparas.

O cliente que esta a tentar apagar existe?


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
arned

sim, eu sei que tou a fazer ele aparecer mas é se alguma coisa nao estiver bem, como é o caso.

Pois o cliente existe e nao deixa de existir depois de executar o comando SQL...

Share this post


Link to post
Share on other sites
Caça

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

Share this post


Link to post
Share on other sites
jpaulino

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?

Share this post


Link to post
Share on other sites
Caça

escolher = ListBox1.SelectedValue

Sendo assim o erro só pode estar aqui


Pedro Martins

Não respondo a duvidas por PM

Share this post


Link to post
Share on other sites
arned

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

Share this post


Link to post
Share on other sites
jpaulino

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

Leste o meu comentário? Qual é o valor da variável quando vais utilizar no parameter?

Share this post


Link to post
Share on other sites
arned

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

Share this post


Link to post
Share on other sites
jpaulino

Mas já experimentaste em ver o valor ou não sabes fazer isso? Só tens de colocar um breakpoint no código e verificar o valor antes de utilizares.

Share this post


Link to post
Share on other sites
arned

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.

Share this post


Link to post
Share on other sites
jpaulino

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  

Share this post


Link to post
Share on other sites
arned

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..

Share this post


Link to post
Share on other sites
Caça

Só tens de definir o DataSource da Listbox e indicar o nome do campo que irá ser o valor e o nome do campo que ira ser mostrado


Pedro Martins

Não respondo a duvidas por PM

Share this post


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.