kazzx Posted December 7, 2009 at 03:25 PM Report Share #299065 Posted December 7, 2009 at 03:25 PM 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 More sharing options...
ribeiro55 Posted December 7, 2009 at 03:31 PM Report Share #299066 Posted December 7, 2009 at 03:31 PM 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 More sharing options...
kazzx Posted December 7, 2009 at 03:42 PM Author Report Share #299067 Posted December 7, 2009 at 03:42 PM ya, a bombar. thanks 😉 Link to comment Share on other sites More sharing options...
jpaulino Posted December 7, 2009 at 04:11 PM Report Share #299075 Posted December 7, 2009 at 04:11 PM 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 More sharing options...
sfapereira Posted December 13, 2009 at 12:19 PM Report Share #300135 Posted December 13, 2009 at 12:19 PM 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... Abraço Link to comment Share on other sites More sharing options...
sfapereira Posted December 13, 2009 at 12:23 PM Report Share #300138 Posted December 13, 2009 at 12:23 PM 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 More sharing options...
ribeiro55 Posted December 13, 2009 at 04:20 PM Report Share #300170 Posted December 13, 2009 at 04:20 PM 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now