electric 0 Denunciar post Postado Maio 1, 2006 Boas malta eu uso o VB.NET 2003 e como base de dados tenho o accesseu ainda n aprendi isto no liceu mas como gosto de tr a frente andei a procura a 2 dias e fui me desenrascando apesar do codigo tar a ser adaptado e por vezzes pareça patetico XDo meu prob é o seguinte:tenho uma listview com o nome de = LtvListaruma base de dados com o nome = Arquivador.mdbe tenho 1 button com o nome = BtnApagaragora o que queria era que na listview eu seleciona-se uma linha e depois de tar selecionada ao carregar no btnapagar a linha fosse apagada da DB se alguem me puder ajudar inda hj agradecia :P[]'s Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Maio 1, 2006 Sua dúvida é em como listar na ListView? Ou é em como apagar o registro da tabela de acordo com a seleção?GraymalkinPS: Movido para .NET. Compartilhar este post Link para o post Compartilhar em outros sites
electric 0 Denunciar post Postado Maio 1, 2006 sim é isso mesmo eu tenho la listado (mas ja agora diz la o codigo pra ver se ta dacordo com o meu)agora o k eu queria era o codigo para apagar a linha selecionada da base de dados...PS: a linha da listview é constituida por 5 campos da tabela da base de dados Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Maio 1, 2006 Supondo que fosse uma tabela somente com dois campos (Código e Nome) eu faria assim para incluí-los na ListView: Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM Tabela;", cn) Dim dt As New DataTable da.Fill(dt) For Each registro As DataRow In dt.Rows Dim obj As New ListViewItem obj.Text = registro("Código") & " - " & registro("Nome") obj.Tag = registro LtvListar.Items.Add(obj) Next registro Onde "cn" é um objeto OleDbConnection. E para remover o selecionado eu faria: If Not LtvListar.SelectedItems Is Nothing Then Dim código As Integer = LtvListar.SelectedItems(0).Tag("Código") Dim cmd As New OleDb.OleDbCommand(String.Format("DELETE FROM Tabela WHERE Código={0}", código), cn) Try cmd.ExecuteNonQuery() Catch ex As OleDb.OleDbException MessageBox.Show("Ops! Ocorreu um erro: " & ex.Message) End Try End If Note que a remoção do selecionado *depende* de como o objeto foi inserido na ListView. No caso, eu guardo uma referência para a linha da tabela (DataRow) na propriedade Tag do item inserido. Por isso que na hora de remover eu tenho como obter o campo código do respectivo item. Certo? ;) Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
electric 0 Denunciar post Postado Maio 1, 2006 Boas tive a ver o teu codigo para colocar os dados na listview e n deu con nd :s eu uso o seguinte codigo: Dim conexao As String conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= D:\Documents and Settings\electric\Os meus documentos\Visual Studio Projects\Arquivador\bin\Arquivador.mdb" cn = New OleDbConnection(conexao) daPedidos = New OleDbDataAdapter("Select * from TabJogos", cn) Try ds = New DataSet daPedidos.Fill(ds, "TabJogos") Catch ex As Exception MsgBox(ex.Message) End Try LtvListar.Items.Clear() Dim i As Integer For i = 0 To ds.Tables("TabJogos").Rows.Count - 1 LtvListar.Items.Add(ds.Tables("TabJogos").Rows(i)("Lugar")) LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Nome")) LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Genero")) LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Data")) LtvListar.Items(i).SubItems.Add(ds.Tables("TabJogos").Rows(i)("Formato")) Next não me perguntes como ai cheguei pk foi atravez de 1 tutorial e tive nisso uma tarde inteira :s na parte do apagar depois de trocar algumas coisas dame um break nesta linha: Dim código As Integer = LtvListar.SelectedItems(0).Tag("código")no ultimo "código" tentei alterar para um campo da minha base de dados mas não da na mesma :S PS: eu coloquei o codigo para apagar dentro do meu BtnApagar penso que esteja certo... []'s Men descubri como por o codigo de preenchimento a funcionar so k se usar esse codigo mais facil sera usar uma listbox pelo menos no meu caso, só que eu quero usalo numa listview porque com a listview conseguimos dividir a "folha" em varias colunas e assim meter cada coisa na sua coluna... não havera maneira de aplicar o teu codigo que é muito mais basico a uma listview mas que esta dividida em colunas ? []'s Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Maio 1, 2006 No caso, o que faltou no seu código foi fazer a referência à DataRow na propriedade Tag do item, mas você nem precisa, já que está organizando os elementos da ListView em colunas. Qual é o campo da ListView que identifica aquele registro como único? Como o código no meu caso (seria o campo "Lugar"?).Bastaria você pegar o valor desta coluna e utilizar onde eu utilizei o "código" naquela instrução SQL.Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
electric 0 Denunciar post Postado Maio 1, 2006 ok decidi voltar ao inicio ... peguei no teu codigo e aplikei... Listbox= LtvListar Base de dados= Arquivadr.mdb base de dados com 5 campos = Lugar, nome, genero, data, formato nome da tabela = TabJogos listbox dividida em 5 colunas Dim conexao As String conexao = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source= D:\Documents and Settings\electric\Os meus documentos\Visual Studio Projects\Arquivador\bin\Arquivador.mdb" cn = New OleDbConnection(conexao) Dim da As New OleDb.OleDbDataAdapter("SELECT * FROM TabJogos;", cn) Dim dt As New DataTable da.Fill(dt) For Each registro As DataRow In dt.Rows Dim obj As New ListViewItem obj.Text = registro("Lugar") obj.Tag = registro LtvListar.Items.Add(obj) Next registro PreencheGenero() PreencheFormato() com isto a listview é preenchida mas so 1 coluna e se meter como tinha preenche + mas na mesma coluna :S tb n havera maneira de ter sempre a base de dados pronta... tipo se eu mudar a BD do lugar isto ja n funca tas a perceber :s Sry tar a ser chato mas é que ja não tou a ver bem isto XD e como inda n dei isto na school... []'s Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Maio 1, 2006 com isto a listview é preenchida mas so 1 coluna e se meter como tinha preenche + mas na mesma coluna :SMas, *nada* te impede de preencher as outras colunas como você já estava fazendo.tb n havera maneira de ter sempre a base de dados pronta... tipo se eu mudar a BD do lugar isto ja n funca tas a perceber :sClaro, e isso é o normal, oras. Se você abrir um documento no Word ele fica lá naquela lista de últimos arquivos abertos, mas se você mudar o arquivo de lugar depois disso, você não vai conseguir abrir ele por aquela lista. O banco de dados vai ter que estar sempre junto com o programa. O que você pode fazer no caso da pasta do arquivo é pegar o caminho da pasta do executável (através de Application.StartupPath) e juntar com o nome do arquivo do banco de dados (desta maneira seu programa vai funcionar em qualquer pasta, desde que o BD esteja na mesma que o executável).Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
electric 0 Denunciar post Postado Maio 2, 2006 ok voltei a colocar o codigo de preenchimento como tinha mas mesmo assim n ta a dar pk da aquel erro na linha k te disse :S desculpa la mas n tou aperceber como resolver :s Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Maio 2, 2006 ok voltei a colocar o codigo de preenchimento como tinha mas mesmo assim n ta a dar pk da aquel erro na linha k te disse :S desculpa la mas n tou aperceber como resolver :sMas, cara, você não precisará mais daquela linha... Você só precisa dela se *não* possuir a informação que identifica um registro como único isoladamente (o que você *tem*, já que colocou ela em uma *coluna*).Qual é a idéia no caso? Cada registro tem uma identificação única, certo? Um código, ok? Quando você lista na ListView você coloca essa identificação nela, certo? Então, quando usuário selecionar uma linha qualquer, você vai pegar o código que está nesta linha selecionada e mandar apagar na tabela (com a SQL eu demonstrei). Existem zilhões de maneiras diferentes de se fazer todo este processo, e a mudança no modo preencher a ListView implica na mudança de como obter a identificação do registro. No meu caso eu guardava uma referência a DataRow, no seu caso você não fazia isso, mas guardava a identificação do registro em uma coluna. Ou seja, dá no mesmo. A diferença fica apenas em como obter esta identificação (que é *justamente* a linha que dá erro no seu código, já que você deveria fazer de uma outra maneira).Sacou? ;)Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites