Carcleo 4 Denunciar post Postado Outubro 19, 2008 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
quintelab 91 Denunciar post Postado Outubro 20, 2008 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
Carcleo 4 Denunciar post Postado Outubro 20, 2008 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 ClassErros: 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
quintelab 91 Denunciar post Postado Outubro 20, 2008 Defina qual o tipo da sua variável. Você colocou: Dim cliente = rs("clienteID") O correto seria: Dim cliente as String = rs("clienteID") Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 20, 2008 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
quintelab 91 Denunciar post Postado Outubro 21, 2008 Cara os erros são os mesmos, ta faltando você fazer justamente o que eu falei, definir o tipo das suas variáveis. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 21, 2008 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
quintelab 91 Denunciar post Postado Outubro 21, 2008 De uma olhada nesses artigos: http://www.linhadecodigo.com.br/Artigo.aspx?id=608 http://www.microsoft.com/brasil/msdn/Tecno...DataReader.mspx Abraços... Compartilhar este post Link para o post Compartilhar em outros sites
Carcleo 4 Denunciar post Postado Outubro 22, 2008 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
quintelab 91 Denunciar post Postado Outubro 22, 2008 Cara aqui tem tudo sobre vb.net: http://www.macoratti.net/indvbn.htm Será mais fácil você dar uma pesquisada. Abraços... Compartilhar este post Link para o post Compartilhar em outros sites