LISTBOX EM VB.NET
Bom dia,
Estou pedindo a ajuda de vocês para o seguinte:
Tenho um Form onde quero colocar um botão para quando eu clicar nesse botão ele abra uma lista com todos os produtos cadastrados no Banco de Dados e que quando eu clicar no nome de um produto ele preencha um textbox com esse nome.
Visual Studio 2010 - VB.NET
Banco de Dados - Access
Obrigado,
JMRF
Simples, basta pesquisar rapidinho que encontrei, bem explicativo, no link abaixo ensina fazer exatamente o que deseja.
http://www.macoratti.net/vbn_ltb2.htm
http://www.macoratti.net/vbn_ltb2.htm
Boa tarde,
ALTAIR148
Obrigado, deu certinho o código.
Mas eu quiz ao clicar no Ãtem na lista e preencher o textbox com o nome do produto, que também preenchesse outro textbox com o código correspondente ao produto e então fiz esse código abaixo, que pesquisa no BD, mas já tentei de tudo e não consigo pois dá a Mensagem:
Erro de sintaxe na sequencia de caracteres na expressão de consulta [ô]materiais_produtos = [ô]PAPEL CRAFT[ô].[Ô]
Imports System.Data.OleDb
Public Class Pedido_de_Compra
Dim vprodma As string
Dim conexao As New OleDbConnection
Private Sub Pedido_de_Compra_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conexao.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\RABITE\Desktop\Controle Estoque 20120710_18h10 com form Cliente\Controle de Estoque - DEIN\bin\Debug\Estoque[Ô]
End Sub
Private Sub carregaListBox(ByVal lst As ListBox, ByVal query As String)
lst.Items.Clear()
[ô] abre a conexao
conexao.Open()
[ô] cria um comando select.
Dim cmd As New OleDb.OleDbCommand(query, conexao)
[ô] executa a consulta
Dim db_reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default)
[ô] exibe os resultados
Dim texto As String
Dim i As Integer
Do While db_reader.Read
texto = db_reader.Item(0).ToString
For i = 1 To db_reader.FieldCount - 1
texto &= vbTab & db_reader.Item(i).ToString
Next i
lst.Items.Add(texto)
Loop
[ô] fecha a conexao
conexao.Close()
End Sub
Private Sub btnlist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlist.Click
carregaListBox(LBmat_prod, [Ô]Select materiais_produtos from tb_cadastro_materiais_produtos[Ô])
End Sub
Private Sub LBmat_prod_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LBmat_prod.SelectedIndexChanged
txtnom_mat_prod.Text = LBmat_prod.SelectedItem
[ô]txtnom_mat_prod = LBmat_prod.SelectedIndex
End Sub
Private Sub txtnom_mat_prod_textchanged(sender As Object, e As System.EventArgs) Handles txtnom_mat_prod.TextChanged
Dim cs As String = My.Settings.EstoqueConnectionString
Dim conect As New OleDb.OleDbConnection
conect.ConnectionString = cs
Try
conect.Open()
Dim selcom As New OleDb.OleDbCommand
selcom.Connection = conect
selcom.CommandText = [Ô]SELECT cod_materiais_produtos FROM tb_cadastro_materiais_produtos WHERE materiais_produtos=[ô][Ô] & txtnom_mat_prod.Text
Dim vprodma As String = selcom.ExecuteScalar
If vprodma <> [Ô][Ô] Then
lblcod_mat.Text = vprodma
lblcod_mat.ForeColor = Color.Black
txtcod_mat_prod.Text = lblcod_mat.Text
End If
conect.Close()
Catch ex As Exception
MessageBox.Show([Ô]Erro de gravação de dados[Ô] & vbCrLf & ex.Message, [Ô]ERRO[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
[ô]desab_campos()
[ô]carrega_Entradas_saidas_Estoque()
[ô]End If
End Sub
End Class
Pde me ajudar, a resolver isso?, por favor.
Obrigado
JMRF
Qual linha acontece o erro?
ALTAIR148,
Desculpa-me se não te passar a informação correta. Mas só dá a mensgaem de erro que destaquei em NEGRITO no meu texto postado.
Concluo que é na linha SELECT porque diz que há erro justo na pesquisa:
[Ô] Erro de sintaxe na sequencia de caracteres na expressão de consulta [ô]materiais_produtos = [ô]PAPEL CRAFT[ô].[Ô]
Obrigado
JMRF
Desculpa-me se não te passar a informação correta. Mas só dá a mensgaem de erro que destaquei em NEGRITO no meu texto postado.
Concluo que é na linha SELECT porque diz que há erro justo na pesquisa:
[Ô] Erro de sintaxe na sequencia de caracteres na expressão de consulta [ô]materiais_produtos = [ô]PAPEL CRAFT[ô].[Ô]
Obrigado
JMRF
Bom, não foi bem isso que perguntei, queria saber a linha que o Visual Studio sinaliza que tem erro... Mas vamos lá, fiz uma modificação e veja se resolve o erro.
Outra coisa, sempre que for postar código utilize a TAG de código, facilita muito o entendimento do código.
Outra coisa, sempre que for postar código utilize a TAG de código, facilita muito o entendimento do código.
Imports System.Data.OleDb
Public Class Pedido_de_Compra
Dim vprodma As string
Dim conexao As New OleDbConnection
Private Sub Pedido_de_Compra_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
conexao.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\RABITE\Desktop\Controle Estoque 20120710_18h10 com form Cliente\Controle de Estoque - DEIN\bin\Debug\Estoque[Ô]
End Sub
Private Sub carregaListBox(ByVal lst As ListBox, ByVal query As String)
lst.Items.Clear()
[ô] abre a conexao
conexao.Open()
[ô] cria um comando select.
Dim cmd As New OleDb.OleDbCommand(query, conexao)
[ô] executa a consulta
Dim db_reader As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.Default)
[ô] exibe os resultados
Dim texto As String
Dim i As Integer
Do While db_reader.Read
texto = db_reader.Item(0).ToString
For i = 1 To db_reader.FieldCount - 1
texto &= vbTab & db_reader.Item(i).ToString
Next i
lst.Items.Add(texto)
Loop
[ô] fecha a conexao
conexao.Close()
End Sub
Private Sub btnlist_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnlist.Click
carregaListBox(LBmat_prod, [Ô]Select materiais_produtos from tb_cadastro_materiais_produtos[Ô])
End Sub
Private Sub LBmat_prod_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles LBmat_prod.SelectedIndexChanged
txtnom_mat_prod.Text = LBmat_prod.SelectedItem
[ô]txtnom_mat_prod = LBmat_prod.SelectedIndex
End Sub
Private Sub txtnom_mat_prod_textchanged(sender As Object, e As System.EventArgs) Handles txtnom_mat_prod.TextChanged
Dim cs As String = My.Settings.EstoqueConnectionString
Dim conect As New OleDb.OleDbConnection
conect.ConnectionString = cs
Try
conect.Open()
Dim selcom As New OleDb.OleDbCommand
selcom.Connection = conect
selcom.CommandText = [Ô]SELECT cod_materiais_produtos FROM tb_cadastro_materiais_produtos WHERE materiais_produtos=[ô][Ô] & txtnom_mat_prod.Text & [Ô][ô][Ô]
Dim vprodma As String = selcom.ExecuteScalar
If vprodma <> [Ô][Ô] Then
lblcod_mat.Text = vprodma
lblcod_mat.ForeColor = Color.Black
txtcod_mat_prod.Text = lblcod_mat.Text
End If
conect.Close()
Catch ex As Exception
MessageBox.Show([Ô]Erro de gravação de dados[Ô] & vbCrLf & ex.Message, [Ô]ERRO[Ô], MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
End Try
[ô]desab_campos()
[ô]carrega_Entradas_saidas_Estoque()
[ô]End If
End Sub
End Class
ALTAIR,
Olha funcionou beleza.
Agora com sua experiência, me diz uma coisa, por favor.
Cara a gente que não tem experiência a gente, pena e pira, Cara.
Estou com o endereço do BD certÃssimo:
conexao.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\RABITE\Desktop\Controle Estoque 20120710_18h10 com form Cliente\Controle de Estoque - DEIN\bin\Debug\Estoque[Ô]
Mas na hora que clico no botão para carregar o ListBox com os nomes dos Produtos ele carrega de um banco que não está no endereço indicado. Já retirei todos os bancos que fui subsytituindo e ele teima em buscar um banco onde os Ãtens estavam com os nomes errados. Tanto assim que nos nomes que estão errados ele não traz os códigos, só funciona legal com os nomes comuns ao Banco arual e o substituÃdo.
Pode me dar alguma dica?
Obrigado
JMEF
Repare nessa linha:
Você está declarando um caminho do banco que está nas Settings do seu projeto, eu sugiro que crie uma classe de conexão, assim essa classe poderá ser aproveitada em todo o seu projeto. Mas você pode ser perguntar no que isso vai facilidar? Simples, exemplo:
Você tem 15 rotinas, todas elas trabalham com o banco de dados, e vamos supor que você teria que mudar o caminho do seu banco, senha, nome... etc, ai você iria nessa classe mudaria essas informações e automaticamente todo o seu projeto passaria a pegar as informações dessa classe.
Dim cs As String = My.Settings.EstoqueConnectionString
Você está declarando um caminho do banco que está nas Settings do seu projeto, eu sugiro que crie uma classe de conexão, assim essa classe poderá ser aproveitada em todo o seu projeto. Mas você pode ser perguntar no que isso vai facilidar? Simples, exemplo:
Você tem 15 rotinas, todas elas trabalham com o banco de dados, e vamos supor que você teria que mudar o caminho do seu banco, senha, nome... etc, ai você iria nessa classe mudaria essas informações e automaticamente todo o seu projeto passaria a pegar as informações dessa classe.
Outra coisa, você já utilizou a String desse jeito? nela não tem a extensão do banco de dados.
conexao.ConnectionString = [Ô]Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\RABITE\Desktop\Controle Estoque 20120710_18h10 com form Cliente\Controle de Estoque - DEIN\bin\Debug\Estoque[Ô]
Desculpa-me a demora é que tive que sar uma saÃda. Já voltei e estamos aqui.
Euuso sem a extensão .mdb ou .accdb e funciona nesse código.
Public Sub Conectar()
conecta.Close()
conecta.ConnectionString = ([Ô]Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source= C:\Users\RABITE\Desktop\Controle Estoque 20120710_18h10 com form Cliente\Controle de Estoque -IN\bin\Debug\Estoque[Ô])
conecta.Open()
comando.Connection = conecta
End Sub
Obrigado
JMRF
Citação::
Desculpa-me a demora é que tive que sar uma saÃda. Já voltei e estamos aqui.
Euuso sem a extensão .mdb ou .accdb e funciona nesse código.
Public Sub Conectar()
conecta.Close()
conecta.ConnectionString = ([Ô]Provider=Microsoft.Jet.OLEDB.4.0;[Ô] & _
[Ô]Data Source= C:UsersRABITEDesktopControle Estoque 20120710_18h10 com form ClienteControle de Estoque -INinDebugEstoque[Ô])
conecta.Open()
comando.Connection = conecta
End Sub
Obrigado
JMRF
Ok, então agora em relação a conexão entendeu o que eu lhe disse? Em uma parte do código vc usa essa conexão e na outra vc usa a conexão que esta salva nas settings.
Tópico encerrado , respostas não são mais permitidas