LISTBOX EM VB.NET

JMRF 11/07/2012 11:34:35
#405854

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

ALTAIR148 11/07/2012 11:56:47
#405856
Resposta escolhida
Simples, basta pesquisar rapidinho que encontrei, bem explicativo, no link abaixo ensina fazer exatamente o que deseja.
http://www.macoratti.net/vbn_ltb2.htm
JMRF 11/07/2012 15:22:15
#405866

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
ALTAIR148 11/07/2012 15:32:21
#405867
Qual linha acontece o erro?
JMRF 11/07/2012 15:39:07
#405868
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
ALTAIR148 11/07/2012 15:42:47
#405869
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.

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

JMRF 11/07/2012 18:04:24
#405877

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
ALTAIR148 11/07/2012 18:16:12
#405880
Repare nessa linha:
  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.
ALTAIR148 11/07/2012 18:18:27
#405881
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[Ô]
JMRF 11/07/2012 20:28:04
#405886

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




ALTAIR148 11/07/2012 20:31:07
#405887
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.
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas