• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

kazzx

[RESOLVIDO] Apagar de uma tabela da o BD item seleccionado

7 mensagens neste tópico

Viva,

a minha dúvida é:

como faço, no evento click de um botão, para apagar um determinado valor seccionado na listbox?

basicamente, tenho uma listbox com vários nomes e ao seleccionar um e depois do click queria que removesse da tabela da BD, e ao mesmo tempo da listbox claro.

acontece que eu já fiz qualquer coisinha, mas o que fiz faz o seguinte:

existem vários nomes na listbox, e ao clicar no botão de eliminar ele elimina todos os valores da tabela da BD (só queria o seleccionado), mas não os faz desaparecer da listbox, só desaparecem quando torno a abrir o formulário, pois já foram eliminados da tabela da BD.

eu no load desse formulário faço a leitura dos valores existentes da tabela da BD que vão corresponder aos valores apresentados na listbox. acho que me fiz entender.

estou a usar este código:

 
        Dim conn As New OleDbConnection()
        conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Projecto\GerirFilas\DataBase\DadosFila.mdb"


        Try
            conn.Open()

            Dim connection As New OleDb.OleDbConnection(conn.ConnectionString)
            connection.Open()
            lstpessoasespera.SelectedItems.Clear()
            'Dim SQL As String = "delete from espera where nome='" & lstpessoasespera.SelectedItems(0).Text & "'"
            Dim SQL As String = "DELETE nome from espera"
            Dim command As New OleDb.OleDbCommand(Sql, connection)
            command.ExecuteNonQuery()

            Dim x As Integer = command.ExecuteNonQuery()
            conn.Close()


        Catch ex As Exception
            MsgBox(ex.Message)

        End Try 

uma melhoria nisto :b

cumps  ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A síntaxe da query está errada.

A síntaxe correcta do DELETE é (a que tens comentada):

Incondicional:

DELETE FROM tabela

Condicional:

DELETE FROM tabela WHERE coluna=valor

Aconselho a guardar e usar o ID do registo para não correres o risco de eliminar 20 "Zecas" diferentes que existissem.

Nunca é demais lembrar que a listbox aceita OBJECT como item, e isso dá largas à imaginação.

Para apagar a linha da ListBox, basta:

ListBox1.Items.Remove(ListBox1.SelectedItem)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Só mais uma nota ...

Se fazes:

Dim x As Integer = command.ExecuteNonQuery()

Tens o número de registo afectados na variável x, que podes usar para indicar ao utilizador se apagou ou não (caso seja igual a 1). Caso não precises de usar esse resultado, podes evitar usar essa variavel, e fazer apenas:

command.ExecuteNonQuery()

Só uma dica ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas pessoal,

Pegando neste exemplo do Kazzx, a minha situação é igual..preciso de apagar um registo seleccionado no lstbox, mas sempre que tento correr da-me o seuinte erro:

Object reference not set to an instance of an object.

Sei que tem a ver com algo que não está instanciado..epá ms não estou a mesmo a ver o que e como fazer para resolver isto... :wallbash:

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vou postar aqui o codigo..se calhar fica mais facil para voces verem tamanha asneira...

    Public Function EliminarRegisto(ByVal Nome As String) As Boolean

        Try

            conexao = New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Funcionarios.MDBSOURCE & ";")
            conexao.Open()

            comando = New OleDbCommand("DELETE * From Funcionarios WHERE Nome = " &   objfrmListagem.lstListagem.SelectedItem.ToString)
            comando.Parameters.Remove(New OleDb.OleDbParameter("Nome", Nome))
            comando.ExecuteNonQuery()

            conexao.Close()

            MsgBox("Funcionario ''" & Nome & "'' apagado da BD!")

        Catch ex As Exception
            MsgBox("Ocorreu um erro a apagar o registo!")
            Return False

        End Try

        Return True
    End Function

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como tens o try-catch, vou talvez apontar para outro sítio, que não este bloco de código.

A única coisa que podia gerar tal erro seria o não teres nenhum item seleccionado, presumindo que tudo o resto está a funcionar.

Mas, se te é lançada uma excepção e não aparece a messagebox a dizer "Ocorreu um erro a apagar o registo!" isso significa que o problema está noutro sítio.

Sugiro que uses breakpoints (F9) e depois step-debug (F8) ou que faças um step-by-step run (F11).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora