Ir para conteúdo
Fórum Script Brasil
  • 0

Como fazer isso em VB?


Carlos Rocha

Pergunta

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

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

17 respostass a esta questão

Posts Recomendados

  • 0

declare um OleDbDataReader. e em vez do ExecuteNonQuery(), use o ExecuteReader() pra retornar o select. tipo assim:

Dim rs As New MySqlDataReader

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

If rs.Read() Then
    Dim cliente = rs("campo")
Else
    - Não encontrou o registro. -
End If[/code]

Link para o comentário
Compartilhar em outros sites

  • 0

Veja como ficou o meu código:

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 New 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"
        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

    Public Property EstoqueProduto() As Integer
        Get
            Return _estoqueProduto
        End Get
        Set(ByVal value As Integer)
            _estoqueProduto = value
        End Set
    End Property

    Public Property CodProduto() As String
        Get
            Return _codProduto
        End Get
        Set(ByVal value As String)
            _codProduto = value
        End Set
    End Property

    Public Property NomeProduto() As String
        Get
            Return _nomeProduto
        End Get
        Set(ByVal value As String)
            _nomeProduto = value
        End Set
    End Property

    Public Property Quantidade() As Integer
        Get
            Return _quantidade
        End Get
        Set(ByVal value As Integer)
            _quantidade = value
        End Set
    End Property

    Public Property preço() As Double
        Get
            Return _preco
        End Get
        Set(ByVal value As Double)
            _preco = value
        End Set
    End Property

    Public Property Subtotal() As Double
        Get
            Return _subtotal
        End Get
        Set(ByVal value As Double)
            _subtotal = value
        End Set
    End Property





    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

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

            If rs.Read() Then
                Dim cliente = rs("campo")
                '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
E abaixo os erros:
Error    1    'MySql.Data.MySqlClient.MySqlDataReader.Friend Sub New(cmd As MySql.Data.MySqlClient.MySqlCommand, statement As MySql.Data.MySqlClient.PreparableStatement, behavior As System.Data.CommandBehavior)' is not accessible in this context because it is 'Friend'.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    7    9    Vendas
Error    2    'EstoqueProduto' is already declared as 'Private estoqueProduto As Integer' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    33    21    Vendas
Error    3    'CodProduto' is already declared as 'Private codProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    42    21    Vendas
Error    4    'NomeProduto' is already declared as 'Private nomeProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    51    21    Vendas
Error    5    'If' must end with a matching 'End If'.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    100    9    Vendas

E agora

Link para o comentário
Compartilhar em outros sites

  • 0

Error    1    'MySql.Data.MySqlClient.MySqlDataReader.Friend Sub New(cmd As MySql.Data.MySqlClient.MySqlCommand, statement As MySql.Data.MySqlClient.PreparableStatement, behavior As System.Data.CommandBehavior)' is not accessible in this context because it is 'Friend'.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    7    9    Vendas
opa, tire o New, acho q não é pra declarar o MySqlDataReader com o New.
Error    2    'EstoqueProduto' is already declared as 'Private estoqueProduto As Integer' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    33    21    Vendas
Error    3    'CodProduto' is already declared as 'Private codProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    42    21    Vendas
Error    4    'NomeProduto' is already declared as 'Private nomeProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    51    21    Vendas[/code] esses daqui é porque você ta declarando as propriedades com nomes iguais aos das variavels. entenda q isso aqui não é c#, no visual basic não tem diferenca entre maiusula e minusula, então 'CodProduto' é a mesma coisa q 'codProduto'
[code]Error    5    'If' must end with a matching 'End If'.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    100    9    Vendas

esse aqui é porque você não pos o End If no final.

EDITADO:

note q eu passei pra você pegar o rs("campo"), mas não é pra escrever "campo" (a não ser q seu campo se chame "campo"), isso foi so um exemplo, é pra por o nome do campo q você quer retorna o valor.

entenda q no rs você pode acessar qualquer campo do select passando como parametro o nome dele na string, ou passando o indice numerico dele (exemplo, se quiser pegar o primero campo, passe o valor 0, se quiser o segundo, passe o valor 1).

Editado por kuroi
Link para o comentário
Compartilhar em outros sites

  • 0

Opa. Feitas as correções ficarm apenas os erros abaixo:

Error    1    'EstoqueProduto' is already declared as 'Private estoqueProduto As Integer' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    33    21    Vendas
Error    2    'CodProduto' is already declared as 'Private codProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    42    21    Vendas
Error    3    'NomeProduto' is already declared as 'Private nomeProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    51    21    Vendas
Eis o código:
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"
        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

    Public Property EstoqueProduto() As Integer
        Get
            Return _estoqueProduto
        End Get
        Set(ByVal value As Integer)
            _estoqueProduto = value
        End Set
    End Property

    Public Property CodProduto() As String
        Get
            Return _codProduto
        End Get
        Set(ByVal value As String)
            _codProduto = value
        End Set
    End Property

    Public Property NomeProduto() As String
        Get
            Return _nomeProduto
        End Get
        Set(ByVal value As String)
            _nomeProduto = value
        End Set
    End Property

    Public Property Quantidade() As Integer
        Get
            Return _quantidade
        End Get
        Set(ByVal value As Integer)
            _quantidade = value
        End Set
    End Property

    Public Property preço() As Double
        Get
            Return _preco
        End Get
        Set(ByVal value As Double)
            _preco = value
        End Set
    End Property

    Public Property Subtotal() As Double
        Get
            Return _subtotal
        End Get
        Set(ByVal value As Double)
            _subtotal = value
        End Set
    End Property





    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

            conexao.Open()
            Commando.Connection = conexao
            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
        End If

    End Sub

End Class

Link para o comentário
Compartilhar em outros sites

  • 0

é exatamente isso q eu falei aqui. você ainda não corrigiu:

Error    2    'EstoqueProduto' is already declared as 'Private estoqueProduto As Integer' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    33    21    Vendas
Error    3    'CodProduto' is already declared as 'Private codProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    42    21    Vendas
Error    4    'NomeProduto' is already declared as 'Private nomeProduto As String' in this class.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\Vendas\frmVendas.vb    51    21    Vendas[/code]

esses daqui é porque você ta declarando as propriedades com nomes iguais aos das variavels. entenda q isso aqui não é c#, no visual basic não tem diferenca entre maiusula e minusula, então 'CodProduto' é a mesma coisa q 'codProduto'

Link para o comentário
Compartilhar em outros sites

  • 0

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

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

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.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
...
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

Editado por Carlos Rocha
Link para o comentário
Compartilhar em outros sites

  • 0

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?

Link para o comentário
Compartilhar em outros sites

  • 0

Estou tentando me encontrar ainda e estou terntandeo criar uma especie de DataModule que me permita usar a conecção com, o banco nos forms sem ter que escrever a conecção em todos os forms.

acheiu um modelo na net que ensina isso. pOrem, esta dando 1 erro na conecçao

Public Sub New()

        mSqlConexao = New MySqlConnection()

        Me.HostName = My.Settings.host
        Me.DataBase = My.Settings.database
        Me.Login = My.Settings.login
        Me.Senha = My.Settings.pwd

    End Sub
Nessa parte do código ta dando esse erro:
Warning    1    'Public Sub New()' in designer-generated type 'Vendas.DBConnection' should call InitializeComponent method.    C:\Nova pasta\Visual Studio 2008\Projects\Vendas\DBConnection.vb    51    16    Vendas
Eis o código todo:
Imports MySql.Data.MySqlClient

Public Class DBConnection

    Dim mSqlTransacao As MySqlTransaction
    Dim mSqlConexao As MySqlConnection
    Dim mSqlServerHost As String = String.Empty
    Dim cmd As MySqlCommand = New MySqlCommand()

    Dim mSqlDataBase As String = ""
    Dim mSqlLogin As String = ""
    Dim mSqlSenha As String = ""

    Public Property Login() As String
        Get
            Return mSqlLogin
        End Get
        Set(ByVal value As String)
            mSqlLogin = value
        End Set
    End Property

    Public Property Senha() As String
        Get
            Return mSqlSenha
        End Get
        Set(ByVal value As String)
            mSqlSenha = value
        End Set
    End Property

    Public Property DataBase() As String
        Get
            Return mSqlDataBase
        End Get
        Set(ByVal value As String)
            mSqlDataBase = value
        End Set
    End Property

    Public Property HostName() As String
        Get
            Return mSqlServerHost
        End Get
        Set(ByVal value As String)
            mSqlServerHost = value
        End Set
    End Property

  
    Public Sub New()

        mSqlConexao = New MySqlConnection()

        Me.HostName = My.Settings.host
        Me.DataBase = My.Settings.database
        Me.Login = My.Settings.login
        Me.Senha = My.Settings.pwd

    End Sub
    Public Sub OpenConnection()

        Dim strConnString As String = "Data Source=" + Me.HostName + ";user id=" + Me.Login + ";password=" + Me.Senha + "; database=" + Me.DataBase
        If mSqlConexao Is Nothing Or mSqlConexao.State = ConnectionState.Broken Or mSqlConexao.State = ConnectionState.Closed Then
            mSqlConexao = New MySqlConnection()
            mSqlConexao.ConnectionString = strConnString
            mSqlConexao.Open()
        End If
    End Sub
    Public Sub CloseConnection()

        If mSqlConexao.State = ConnectionState.Open Then
            mSqlConexao.Close()
            mSqlConexao.Dispose()
            mSqlConexao = Nothing
        End If

    End Sub

    Public Function ExecuteDS(ByVal sql As String) As DataSet

        Dim ds As New DataSet
        Dim da As MySqlDataAdapter = New MySqlDataAdapter()

        Try
            Me.OpenConnection()

            cmd.CommandType = CommandType.Text
            cmd.CommandText = sql
            cmd.Connection = mSqlConexao

            da.SelectCommand = cmd
            da.Fill(ds)
            da.Dispose()
            Return ds

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return ds
    End Function


    Public Function ExecuteDR(ByVal sql As String) As MySqlDataReader

        Dim dr As MySqlDataReader = Nothing

        Try
            Me.OpenConnection()
            cmd.CommandType = CommandType.Text
            cmd.CommandText = sql
            cmd.Connection = mSqlConexao

            dr = cmd.ExecuteReader
            cmd.Dispose()
            Return dr
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
        Return dr

    End Function
End Class

E agora?

Link para o comentário
Compartilhar em outros sites

  • 0

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??

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...