Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Carcleo

Como fazer isso em VB?

Recommended Posts

Ola pessoal.

To numa sinuca aqui:

Como eu faço para recuperar os resultados dessa consulta?

conexao.Open()
			Commando.Connection = conexao
			Commando.CommandText = "Select * From clientes  Where clienteID = dialogo.codigo"
			Commando.ExecuteNonQuery()

			Dim cliente = 'Resultado dessa query

Tipo como se faz o MySql_Fetich_Array?

Preciso entregar o reultado dessa consulta para a variavel Dim cliente.

Como fazer isso em VB?

e.. Como faço um recordset desse jeito que estou fazendo, sem componente. Tudo no código?

Segue todo o código do form. (Obs.: sou iniciante em VB)

Imports MySql.Data.MySqlClient
Public Class frmVendas
	'Definir o objeto bd da classe MySqlConnection
	Dim conexao As New MySqlConnection
	Dim Commando As New MySqlCommand
	Dim Adaptador As New MySqlDataAdapter
	Dim consulta As New DataTable
	Dim SQL As String

	'Definir objeto da clase DetalhesPedidos
	'  Dim bd As New JcmSoftDataContext
	'  Dim bd As New MySqlConnection
	Dim oDetalhesPedidos As DetalhesPedidos
	Dim nomeProduto As String
	Dim codProduto As String
	Dim precoProduto As Double
	Dim codigoCliente As String
	Dim estoqueProduto As Integer

	'Definir una LISTA de Objetos DetalhesPedidos
	Dim ArrDetalhesPedidos As New List(Of DetalhesPedidos)

	Private Sub btnProcuraCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraCliente.Click
		'Instanciamos un Objeto Formulario frmClientes
		Dim dialogo As New frmClientes
		'Mostramos o Formulario
		dialogo.ShowDialog()
		'Se o resultado do Formulario e diferente de OK
		'mostra uma mensagem que indica que não
		'há nenhum cliente selecionado
		If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then
			'Usamos uma consulta LINQ para selecionar um cliente
			'do qual recuperamos a variável codigoCliente declarada no 
			'Formulario frmClientes

			'			Dim cliente = From cli In bd.clientes _
			'								Where cli.clienteID = dialogo.codigo _
			'							   Select cli.clienteID, cli.nome, cli.email
			conexao.Open()
			Commando.Connection = conexao
			Commando.CommandText = "Select * From clientes  Where clienteID = dialogo.codigo"
			Commando.ExecuteNonQuery()

			Commando.

			Dim cliente = 



			'Carregamos os valores do resultado da consulta LINQ nos textbox do formulario
			Me.txtCodigoCliente.Text = cliente.ToList.Item(0).clienteID.ToString
			Me.txtNomeCliente.Text = cliente.ToList.Item(0).nome
			codigoCliente = cliente.ToList.Item(0).clienteID.ToString
		Else
			'exibe mensagem ao usuário e limpa os campos do formulário
			MsgBox("Não foi selecionado nenhum cliente.")
			Me.txtCodigoCliente.Text = ""
			Me.txtNomeCliente.Text = ""
			codigoCliente = ""
		End If

	End Sub
End Class

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Windows Applications

 

Você não deve utilizar um ExecuteNonQuery(), pesquisa sobre DataReader. Fiz um exemplo no sub-fórum de web que pode te ajudar:

http://forum.imasters.com.br/index.php?showtopic=310597

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, fiz as devidas correções e fui até quase o fim do programa modelo porem, me esbarrei novamente em 2 coisas:

 

na form abaixo, as variaveis cliente, pedido, produto e detalhepedido não estao recebendo valor por causa do tal do bd mas agora de uma forma diferente

Nesse caso, como eu faço?

Outra coisa, quando chamo o form de pesquiza de clientes ele vem vazio (em tempo de execução) mas ele esta todo pronto. Como resolvo isso?

Imports MySql.Data.MySqlClient

Public Class frmVendas
	Dim conexao As New MySqlConnection
	Dim Commando As New MySqlCommand
	Dim Adaptador As New MySqlDataAdapter
	Dim rs As MySqlDataReader
	Dim consulta As New DataTable
	Dim SQL As String
	Private Sub frmVendas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
		conexao.ConnectionString = "server=localhost;user id=root;password=;database=vendas"
		conexao.Open()
		Commando.Connection = conexao
	End Sub


	'Definir objeto da clase DetalhesPedidos
	Dim oDetalhesPedidos As DetalhesPedidos
	Dim nomeProduto As String
	Dim codProduto As String
	Dim precoProduto As Double
	Dim codigoCliente As String
	Dim estoqueProduto As Integer

	'Definir una LISTA de Objetos DetalhesPedidos
	Dim ArrDetalhesPedidos As New List(Of DetalhesPedidos)
	Private _codProduto As String
	Private _nomeProduto As String
	Private _quantidade As Integer
	Private _preco As Double
	Private _subtotal As Double
	Private _estoqueProduto As Double


	Private Sub btnProcuraCliente_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraCliente.Click
		'Instanciamos un Objeto Formulario frmClientes
		Dim dialogo As New frmClientes
		'Mostramos o Formulario
		dialogo.ShowDialog()
		'Se o resultado do Formulario e diferente de OK
		'mostra uma mensagem que indica que não
		'há nenhum cliente selecionado

		If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then
			'Usamos uma consulta LINQ para selecionar um cliente
			'do qual recuperamos a variável codigoCliente declarada no Formulario frmClientes

			Commando.CommandText = "Select * From clientes  Where clienteID = dialogo.codigo"
			rs = Commando.ExecuteReader()

			If rs.Read() Then
				Dim cliente = rs("clienteID")
				'Carregamos os valores do resultado da consulta LINQ nos textbox do formulario
				Me.txtCodigoCliente.Text = cliente.ToList.Item(0).clienteID.ToString
				Me.txtNomeCliente.Text = cliente.ToList.Item(0).nome
				codigoCliente = cliente.ToList.Item(0).clienteID.ToString
			Else
				'exibe mensagem ao usuário e limpa os campos do formulário
				MsgBox("Não foi selecionado nenhum cliente.")
				Me.txtCodigoCliente.Text = ""
				Me.txtNomeCliente.Text = ""
				codigoCliente = ""
			End If
		Else
			'exibe mensagem ao usuário e limpa os campos do formulário
			MsgBox("Não foi selecionado nenhum cliente.")
			Me.txtCodigoCliente.Text = ""
			Me.txtNomeCliente.Text = ""
			codigoCliente = ""
		End If

	End Sub

	Private Sub btnProcuraProduto_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnProcuraProduto.Click
		'Instancia um formulario frmProdutos
		Dim dialogo As New frmProdutos
		'exibe o formulario
		dialogo.ShowDialog()
		'se o resultado do formulario é Ok 
		If dialogo.DialogResult = Windows.Forms.DialogResult.OK Then
			'cria uma consulta LINQ para exibir os produtos cadastrados
			Commando.CommandText = "Select * From produtos  Where prod.ProdutoID = dialogo.codigo"
			rs = Commando.ExecuteReader()

			If rs.Read() Then
				Dim produto = rs("produtoID")
				'obtem os valores e exibe nos controles TextBox do formulario
				Me.txtNomeProduto.Text = produto.ToList.Item(0).Nome.ToString
				Me.txtPrecoProduto.Text = produto.ToList.Item(0).preço.ToString
				'atribui os valores as variáveis definidas no formulario
				nomeProduto = produto.ToList.Item(0).Nome.ToString
				codProduto = produto.ToList.Item(0).ProdutoID.ToString
				precoProduto = Convert.ToDouble(produto.ToList.Item(0).preço.ToString)
				estoqueProduto = Convert.ToInt32(produto.ToList.Item(0).estoque.ToString)
				'poe o foco no textbox quantidade
				txtQuantidade.Focus()
			Else
				'exibe mensagem ao usuário e limpa os campos do formulário
				MsgBox("Nenhum Produto foi selecionado.")
				Me.txtNomeProduto.Text = ""
				Me.txtPrecoProduto.Text = ""
				nomeProduto = ""
				codProduto = ""
				precoProduto = 0.0
			End If

		Else
			'exibe mensagem ao usuário e limpa os campos do formulário
			MsgBox("Nenhum Produto foi selecionado.")
			Me.txtNomeProduto.Text = ""
			Me.txtPrecoProduto.Text = ""
			nomeProduto = ""
			codProduto = ""
			precoProduto = 0.0
		End If
	End Sub

	Private Sub BtnIncluir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnIncluir.Click
		'Verificamos a quantidade foi informada
		If txtQuantidade.Text = String.Empty Then
			MsgBox("Informe a quantidade requerida...")
			txtQuantidade.Focus()
			Exit Sub
		End If
		'Verificamos se o nome do produto , preço e quantidade não estão vazios
		If txtNomeProduto.Text <> "" And txtPrecoProduto.Text <> "" And txtQuantidade.Text <> "" Then
			'Verificamos se o estoque do produto não é menor do que o solicitado
			If Convert.ToInt32(estoqueProduto) < Convert.ToInt32(txtQuantidade.Text) Then
				'Mostramos uma aviso ao usuário
				MsgBox("A quantidade requerida é Superior a do estoque")
				'Como a quantidade solicitada é mario que o estoque
				'perguntamos se o usuário deseja estabelecer o estoque atual
				'com a nova quantidade informada
				If MessageBox.Show("Deseja estabelecer o estoque atual como a nova quantidade requerida", _
 "Vendas", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
					'Establecemos a nova quantidade em estoque
					txtQuantidade.Text = estoqueProduto
					'Inicializamos o objeto da classe DetalhesPedidos
					oDetalhesPedidos = New DetalhesPedidos
					'Preenchemos os valores 
					'-----------------------------------------------------------------
					oDetalhesPedidos.Quantidade = Convert.ToInt32(txtQuantidade.Text)
					oDetalhesPedidos.CodProduto = codProduto
					oDetalhesPedidos.NomeProduto = nomeProduto
					oDetalhesPedidos.preço = precoProduto
					oDetalhesPedidos.EstoqueProduto = estoqueProduto
					oDetalhesPedidos.Subtotal = precoProduto * Convert.ToInt32(txtQuantidade.Text)
					'------------------------------------------------------------------------
					'Verificamos se o produto esta na lista de pedidos
					'e incluimos a lista de DetalhesPedidos
					If buscarDetalhesVendas(ArrDetalhesPedidos, oDetalhesPedidos) = False Then
						'Agregamos o pedido a lista de DetalhesPedidos
						ArrDetalhesPedidos.Add(oDetalhesPedidos)
					End If
					'Assciamos a lista de DetalhesPedidos como fonte de dados ao datagridview
					Me.dgvVendas.DataSource = ArrDetalhesPedidos
				Else
					'Se não deseja estabelecer o estoque atual com a quantidade solicitada
					'voltamos ao formulario para escolher outro produto
					btnProcuraProduto_Click(Nothing, Nothing)
				End If
			Else
				'Como a quantidade requerida e menor que o estoque
				'iniciamos o objeto da classe DetalhesPedidos
				oDetalhesPedidos = New DetalhesPedidos
				'Preenchemos os valores no objeto
				oDetalhesPedidos.Quantidade = Convert.ToInt32(txtQuantidade.Text)
				oDetalhesPedidos.CodProduto = codProduto
				oDetalhesPedidos.NomeProduto = nomeProduto
				oDetalhesPedidos.preço = precoProduto
				oDetalhesPedidos.EstoqueProduto = estoqueProduto
				oDetalhesPedidos.Subtotal = precoProduto * Convert.ToInt32(txtQuantidade.Text)
				'Verificamos se o produto solicitado esta na lista de pedidos
				'Se não estiver incluimos na lista de DetalhesPedidos
				If buscarDetalhesVendas(ArrDetalhesPedidos, oDetalhesPedidos) = False Then
					'Incluimos o pedido a lista de DetalhesPedidos
					ArrDetalhesPedidos.Add(oDetalhesPedidos)
				End If
				'Associamos a lista como origem da fonte de dados
				Me.dgvVendas.DataSource = ArrDetalhesPedidos.ToList
			End If
		End If
		'Limpamos os textBox
		Me.limpar_produto()
		'Calculamos o Total do Pedido
		Me.calcular_total()

	End Sub

	Private Sub BtnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSalvar.Click
		'Vamos usar o mapeamento feito pelo LINQ
		'para efetivar as atualizações nas bases de dados
		Try
			'A expressão lambda a seguir devolve um objeto Cliente
			'Estamos usando o codigo do cliente para identificar unicamento o cliente
			Dim Cli As Cliente = bd.Clientes.Single(Function(p) p.clienteID = Me.txtCodigoCliente.Text)
			'-------------------------------------------------
			'Cria um  novo objeto Pedido
			'-------------------------------------------------
			Dim oPedido As New Pedido
			oPedido.data = Date.Now
			oPedido.clienteID = Cli.clienteID
			oPedido.Cliente = Cli
			'--------------------------------------------------
			'Obtendo os detalhes do pedido 
			'realizo a geração dos objetos Pedido
			'vou percorrer o array dos detalhes do pedido
			'----------------------------------------------------
			For Each o As DetalhesPedidos In ArrDetalhesPedidos
				'Instancio um objeto Produto selecionando pelo codigo do produto
				Dim produto As Produto = bd.Produtos.Single(Function(a) a.ProdutoID = o.CodProduto.ToString())
				'Cria um novo detalhe do pedido
				Dim detPedido As New DetalhesPedido
				detPedido.Produto = produto
				detPedido.ProdutoID = produto.ProdutoID
				detPedido.Quantidade = o.Quantidade
				detPedido.preço = o.preço
				'inclui os detalhes do pedido no pedido
				oPedido.DetalhesPedidos.Add(detPedido)
				'-altera a quantidade de estoque do produto
				produto.estoque = produto.estoque - o.Quantidade
			Next
			'------------------------------------------------------
			'Aqui atualizo a base de dados
			bd.SubmitChanges()
			MsgBox("Dados de Pedidos , Detalhes de Pedidos e Estoque atualizados com sucesso...")
		Catch ex As Exception
			MsgBox(ex.Message)
		Finally
			'chama as rotinas para limpar clientes e produtos e vendas
			limpar_cliente()
			limpar_produto()
			limpar_venda()
			Me.calcular_total()
		End Try

	End Sub
	Public Function buscarDetalhesVendas(ByVal array As List(Of DetalhesPedidos), ByVal objDV As DetalhesPedidos) As Boolean
		'Vreificamos se um produto já foi solicitado
		For Each oDetPed As DetalhesPedidos In array
			If oDetPed.CodProduto = objDV.CodProduto Then
				Dim nQuantidade As Integer
				'Se encontramos o produto na lista de pedidos
				'incrementamos a quantidade solicitada
				'com a quantidade solicitada anteriomente
				nQuantidade = oDetPed.Quantidade + objDV.Quantidade
				If nQuantidade <= oDetPed.EstoqueProduto Then
					oDetPed.Quantidade = nQuantidade
					oDetPed.Subtotal = oDetPed.preço * oDetPed.Quantidade
				Else
					MsgBox("O estoque atual é insuficiente para a quantidade solicitada.")
				End If
				Return True
			End If
		Next
		Return False
	End Function
	Sub calcular_total()
		Dim soma As Double
		'calcula o valor total dos pedidos
		'percorre o arrayList e soma o valor Subtotal 
		For Each i As DetalhesPedidos In ArrDetalhesPedidos
			soma += i.Subtotal
		Next
		Me.txtTotal.Text = soma.ToString("C")
	End Sub
	Sub limpar_produto()
		'limpa os controles TextBox 
		Me.txtQuantidade.Clear()
		Me.txtNomeProduto.Clear()
		Me.txtPrecoProduto.Clear()
	End Sub
	Sub limpar_venda()
		'Limpa a lista usando o metodo Clear
		ArrDetalhesPedidos.Clear()
		'Atribuir a lista como origem de dados ao datagridview
		Me.dgvVendas.DataSource = ArrDetalhesPedidos.ToList
	End Sub

	Sub limpar_cliente()
		'Metodo para limpar os textBox Associados ao Cliente
		Me.txtCodigoCliente.Clear()
		Me.txtNomeCliente.Clear()
	End Sub

End Class
Erros:

Error	1	Type 'Cliente' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	196	24	Vendas
Error	2	Type 'Pedido' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	200	32	Vendas
Error	3	Type 'Produto' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	211	32	Vendas
Error	4	Type 'DetalhesPedido' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	213	38	Vendas
Error	5	Name 'bd' is not declared.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	225	13	Vendas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi.

 

Mas, tudo o que estou querendo é, no código abaixo, substituir a variavel bd(que nesse modelo que peguei é uma classe de conexão com banco do tipo DataContext) por uma do tipo que voce esta me instruindo como fazer via datareader.

Private Sub BtnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSalvar.Click
		'Vamos usar o mapeamento feito pelo LINQ
		'para efetivar as atualizações nas bases de dados
		Try
			'A expressão lambda a seguir devolve um objeto Cliente
			'Estamos usando o codigo do cliente para identificar unicamento o cliente
			Dim Cli As Cliente = bd.Clientes.Single(Function(p) p.clienteID = Me.txtCodigoCliente.Text)
			'-------------------------------------------------
			'Cria um  novo objeto Pedido
			'-------------------------------------------------
			Dim oPedido As New Pedido
			oPedido.data = Date.Now
			oPedido.clienteID = Cli.clienteID
			oPedido.Cliente = Cli
			'--------------------------------------------------
			'Obtendo os detalhes do pedido 
			'realizo a geração dos objetos Pedido
			'vou percorrer o array dos detalhes do pedido
			'----------------------------------------------------
			For Each o As DetalhesPedidos In ArrDetalhesPedidos
				'Instancio um objeto Produto selecionando pelo codigo do produto
				Dim produto As Produto = bd.Produtos.Single(Function(a) a.ProdutoID = o.CodProduto.ToString())
				'Cria um novo detalhe do pedido
				Dim detPedido As New DetalhesPedido
				detPedido.Produto = produto
				detPedido.ProdutoID = produto.ProdutoID
				detPedido.Quantidade = o.Quantidade
				detPedido.Preco = o.Preco
				'inclui os detalhes do pedido no pedido
				oPedido.DetalhesPedidos.Add(detPedido)
				'-altera a quantidade de estoque do produto
				produto.estoque = produto.estoque - o.Quantidade
			Next
			'------------------------------------------------------
			'Aqui atualizo a base de dados
			bd.SubmitChanges()
			MsgBox("Dados de Pedidos , Detalhes de Pedidos e Estoque atualizados com sucesso...")
		Catch ex As Exception
			MsgBox(ex.Message)
		Finally
			'chama as rotinas para limpar clientes e produtos e vendas
			limpar_cliente()
			limpar_produto()
			limpar_venda()
			Me.calcular_total()
		End Try

	End Sub
...

veja os erros agora:

Error	1	Type 'Cliente' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	196	24	Vendas
Error	2	Type 'Pedido' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	200	32	Vendas
Error	3	Type 'Produto' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	211	32	Vendas
Error	4	Type 'DetalhesPedido' is not defined.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	213	38	Vendas
Error	5	Name 'bd' is not declared.	C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb	225	13	Vendas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja, esse As Clientes, se refere ao formulario de clientes. Esta recebendo uma variavel de la e jogando para a variavel Cli usando lambda.

 

Mas, tudo o que estou querendo é, no código , substituir a variavel bd(que nesse modelo que peguei é uma classe de conexão com banco do tipo DataContext) por uma do tipo que voce esta me instruindo como fazer via datareader.

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte, agora estou precisando das seguintes informações:

 

criei os botões no formulario:

 

Novo Registro

Salvar Registro

Excluir Registro

Cancelar

Alterar Registro

 

Qual código devo usar no botao Novo Registro?

Este botão é aquele que abre o form para digitação novamente.

no Delphi, é tabela.append ou tabela.insert. E nbo VB??

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.