arned 0 Posted January 28, 2011 Report Share Posted January 28, 2011 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
Caça 17 Posted January 28, 2011 Report Share Posted January 28, 2011 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
arned 0 Posted January 28, 2011 Author Report Share Posted January 28, 2011 nao, eu so meti ainda os clientes e so consigo adicionar... :S Link to post Share on other sites
Caça 17 Posted January 28, 2011 Report Share Posted January 28, 2011 Retira o "=?" do teu comando SQL Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
arned 0 Posted January 28, 2011 Author Report Share Posted January 28, 2011 nao deu a mesma.... :X Link to post Share on other sites
Caça 17 Posted January 28, 2011 Report Share Posted January 28, 2011 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 Link to post Share on other sites
arned 0 Posted January 28, 2011 Author Report Share Posted January 28, 2011 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... Link to post Share on other sites
Caça 17 Posted January 28, 2011 Report Share Posted January 28, 2011 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
arned 0 Posted January 28, 2011 Author Report Share Posted January 28, 2011 substitui e nao funcionou... Link to post Share on other sites
jpaulino 90 Posted January 28, 2011 Report Share Posted January 28, 2011 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
Caça 17 Posted January 28, 2011 Report Share Posted January 28, 2011 escolher = ListBox1.SelectedValue Sendo assim o erro só pode estar aqui Pedro Martins Não respondo a duvidas por PM Link to post Share on other sites
arned 0 Posted January 29, 2011 Author Report Share Posted January 29, 2011 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
jpaulino 90 Posted January 29, 2011 Report Share Posted January 29, 2011 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? Link to post Share on other sites
arned 0 Posted January 29, 2011 Author Report Share Posted January 29, 2011 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
jpaulino 90 Posted January 29, 2011 Report Share Posted January 29, 2011 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. Link to post Share on other sites
arned 0 Posted January 31, 2011 Author Report Share Posted January 31, 2011 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
jpaulino 90 Posted January 31, 2011 Report Share Posted January 31, 2011 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 Link to post Share on other sites
arned 0 Posted January 31, 2011 Author Report Share Posted January 31, 2011 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
arned 0 Posted February 2, 2011 Author Report Share Posted February 2, 2011 alguem me pode ajudar? Link to post Share on other sites
Caça 17 Posted February 2, 2011 Report Share Posted February 2, 2011 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 Link to post Share on other sites
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