Jump to content

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


kazzx
 Share

Recommended Posts

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  😉

Link to comment
Share on other 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)

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
Share on other 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 😉

Link to comment
Share on other 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

Link to comment
Share on other 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
Link to comment
Share on other 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).

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Link to comment
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
 Share

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