Controle de Estoque sem assistentes - Parte IV - Cadastro de Produtos
Na janela Solution Explorer, clique com o botão direito em ctrEstoque. Selecione Add / Windows Form.
No name, digite: frmProduto e pressione a tecla Enter. Altere as seguintes propriedades:
Altere as seguintes propriedades:
Text: Cadastro de Produto
StartPosition: ScreenCenter 'Centraliza o formulário
MinimizeBox: False
MaximizeBox: False
Na Caixa de Ferramentas (ToolBox), em Containers, selecione a ferramenta GroupBox e arraste-a para a parte superior do formulário. Altere as seguintes propriedades:
Name: gbOpcoes
Text: &Opções
Size: 322; 62
Location: 3; 3
Coloque dentro do mesmo, os botões:
| Text | Name |
|---|---|
| &Novo | btnNovo |
| &Editar | mnuEditar |
| &Excluir | mnuExcluir |
| &Pesquisar | mnuPesquisar |
| Sai&r | mnuSair |
Insira outro componente GroupBox logo abaixo, alterando as propriedades:
Name: gbDados
Text: &Dados
Size: 347; 159
Location: 3; 71
Dentro do gbDados, insira os componentes abaixo:
| Componente | Text | Name | Propriedade |
|---|---|---|---|
| Label | Código: | lblCodigo | |
| TextBox | txtCodigo | Enabled=False | |
| Label | Descrição | lblDescricao | |
| TextBox | txtNome | ||
| Label | Fornecedor: | lblFornecedor | |
| ComboBox | cmbFornecedor | ||
| Label | QtdeEstoque: | lblQtdeEstoque | |
| TextBox | txtQtdeEstoque | ||
| Label | Vl Venda: | lblValorVenda | |
| TextBox | txtValorVenda |
Dê um duplo clique no formulário de produto. Antes da linha Public Class frmProduto, digite:
Imports System.Data.OleDb
Após a linha Public Class frmProduto, digite:
Private dtProduto As DataTable
Private daProduto As OleDbDataAdapter
Private dsProduto As DataSet
Volte ao designer do formulário. Dê um duplo clique dentro do mesmo e no frmProduto_Load, digite o código abaixo:
Dim dtFornecedor As DataTable
Dim dr As DataRow
Dim dsFornecedor As New DataSet
Dim dadpt As New OleDbDataAdapter("Select Codigo, Nome From Fornecedor Order By Nome", cn)
dadpt.Fill(dsFornecedor, "Fornecedor")
dtFornecedor = dsFornecedor.Tables(0)
'Preenche o nome dos fornecedores no combobox
For Each dr In dtFornecedor.Rows
cmbFornecedor.Items.Add(dr.Item("Nome"))
Next
Dê um duplo clique no TextBox txtQtdeEstoque e altere o evento para KeyPress. Digite o código abaixo:
'Só permite digitar números e a vírgula
If Not Char.IsNumber(e.KeyChar) And Not e.KeyChar = vbBack And Not e.KeyChar = "," Then
e.Handled = True
End If
Codificação do botão Novo:
Volte ao designer do formulário e dê um duplo clique no botão Novo. Digite o código abaixo:
'Se o texto do botão estiver como &Novo, então
If btnNovo.Text = "&Novo" Then
Call Limpar() 'Chama o procedimento Limpar
btnExcluir.Enabled = False 'Desabilita o botão
btnEditar.Enabled = False
btnNovo.Text = "&Incluir" 'Altera o texto do botão para &Incluir
txtDescricao.Focus() 'Envia o foco para a caixa txtDescricao
Else 'Caso contrário
'Se o conteúdo da caixa descrição estiver em branco
If txtDescricao.Text = "" Then
MessageBox.Show("Informe o Descrição!", "Descrição", MessageBoxButtons.OK)
txtDescricao.Focus()
Exit Sub 'Não executa as linhas abaixo
End If
incluirRegistro() 'Chama a subrotina para a inclusão das linhas (row) ou registro
End If
Observação: Os procedimentos Limpar e incluirRegistro, como não foram criados o VS Studio grifa as duas linhas.
Após o End Sub, digite o procedimento (subrotina) abaixo:
Private Sub incluirRegistro()
'Localiza o fornecedor na tabela
Dim cn As New OleDbConnection
Dim cmdFornecedor As New OleDbCommand
cmdFornecedor.Connection = cn
cmdFornecedor.CommandText = "Select * From Fornecedor Where Nome='" & cmbFornecedor.Text & "'"
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
cn.Open()
Dim dr As OleDbDataReader
dr = cmdFornecedor.ExecuteReader
dr.Read()
Dim sSQL As String 'Variável para receber a instrução SQL de inclusão de registro na tabela
sSQL = "Insert Into Produto (Descricao, CodFornecedor, QtdEstoque, ValorVenda)"
sSQL = sSQL & "Values (" & "'" & txtDescricao.Text & "'" & ","
sSQL = sSQL & "'" & dr.Item("Codigo") & "'" & ","
sSQL = sSQL & "'" & Replace(txtQtdeEstoque.Text, ",", ".") & "'" & ","
sSQL = sSQL & "'" & Replace(txtValorVenda.Text, ",", ".") & "'" & ")"
Dim cmd As New OleDbCommand(sSQL, cn)
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
Call Limpar()
End Try
End Sub
Abaixo do End Sub, crie a rotina Limpar:
Private Sub Limpar()
For Each c As Control In gbDados.Controls
If TypeOf c Is TextBox Or TypeOf c Is ComboBox Then
c.Text = ""
End If
Next
End Sub
Codificação do botão Editar:
Try
If txtDescricao.Text = "" Then
MessageBox.Show("Informe a Descrição do Produto!", "Descrição", MessageBoxButtons.OK)
txtDescricao.Focus()
Exit Sub
End If
'Localiza o fornecedor na tabela
Dim cn As New OleDbConnection
Dim cmdFornecedor As New OleDbCommand
cmdFornecedor.Connection = cn
cmdFornecedor.CommandText = "Select * From Fornecedor Where Nome='" & cmbFornecedor.Text & "'"
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
cn.Open()
Dim dr As OleDbDataReader
dr = cmdFornecedor.ExecuteReader
dr.Read()
Dim sSQL As String
sSQL = "Update Produto Set Descricao='" & txtDescricao.Text
sSQL = sSQL & "',CodFornecedor='" & dr.Item("Codigo")
sSQL = sSQL & ",QtdEstoque=" & Replace(txtQtdeEstoque.Text, ",", ".")
sSQL = sSQL & ",ValorVenda=" & Replace(txtValorVenda.Text, ",", ".") & "'"
sSQL = sSQL & " Where Codigo=" & txtCodigo.Text
Dim cmd As New OleDbCommand(sSQL, cn)
cmd.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close()
Call Limpar()
End Try
Logo abaixo do End Sub, crie a subrotina abaixo:
Private Sub Exibir_Dados(ByVal codigo As Integer)
If intCodigo = 0 Then Exit Sub
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
Dim cmdProduto As New OleDb.OleDbCommand 'Cria o objeto OleDBCommand
cmdProduto.Connection = cn 'Ativa a conexão
'O método CommandText, recebe a seleção de todos os campos da tabela de vendedor
'onde no campo Codigo será procurado o Código do vendedor informado quando for realizada a pesquisa
cmdProduto.CommandText = "Select * From Produto Where Codigo=" & codigo
cn.Open() 'Abre o banco
Dim drProduto As OleDb.OleDbDataReader 'O DataReader permite ler um determinado dado em alta velocidade. Ele não é instanciado, pois é uma classe estática.
drProduto = cmdProduto.ExecuteReader 'Executa o comando
drProduto.Read() 'O método Read posiciona o cursor no referido registro retornando True ou False senão encontrar
'O campo é Codigo é armazenado no TextBox txtCodigo e exibido no formulário
txtCodigo.Text = drProduto.Item("Codigo")
'Se o campo Nome não estiver em branco (nulo)
If Not IsDBNull(drProduto.Item("Descricao")) Then txtDescricao.Text = drProduto.Item("Descricao")
If Not IsDBNull(drProduto.Item("QtdEstoque")) Then txtQtdeEstoque.Text = drProduto.Item("QtdEstoque")
If Not IsDBNull(drProduto.Item("ValorVenda")) Then txtValorVenda.Text = drProduto.Item("ValorVenda")
'Localiza o fornecedor
Dim cmdFornecedor As New OleDb.OleDbCommand
cmdFornecedor.Connection = cn
cmdFornecedor.CommandText = "Select Codigo, Nome From Fornecedor Where Codigo=" & drProduto.Item("CodFornecedor")
Dim drFornecedor = cmdFornecedor.ExecuteReader
drFornecedor.Read()
cmbFornecedor.Text = drFornecedor.Item("Nome")
btnExcluir.Enabled = True 'Habilita (deixa disponível) o botão
btnEditar.Enabled = True
cn.Close()
End Sub
Codificação do botão Excluir:
If MessageBox.Show("Deseja Excluir ?", "Excluir", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.Yes Then
If Val(txtCodigo.Text) = 0 Then
MessageBox.Show("Informe o Código!", "Código", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End If
Dim codigo As Integer
codigo = CType(txtCodigo.Text, Integer)
eliminarRegistro(codigo)
End If
Após o End Sub, crie a subrotina abaixo:
Private Sub eliminarRegistro(ByVal codigo As Integer)
Try
Dim cn As New OleDbConnection
cn.ConnectionString = "Provider=Microsoft.Jet.oleDB.4.0;Data Source=" & sCaminho & "\Estoque.mdb;"
Dim sSQL As String = "Delete * From Produto Where Codigo=" & codigo
Dim cmdProduto As New OleDbCommand(sSQL, cn) 'Cria o objeto OleDBCommandcn.Open() 'Abre o banco
cmdProduto.ExecuteNonQuery()
Call Limpar()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
cn.Close() 'Fecha o banco
End Try
End Sub
Codificação do botão Sair:
Close()
Codificação do botão Pesquisar:
frmPProduto.ShowDialog()
Call Exibir_Dados(intCodigo)
Codificação do botão Sair:
Close()
Controle de Estoque - Parte II
Controle de Estoque - Parte III