Você está na página 1de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

Exemplo Venda (Atualizao Stock)

Tabelas utilizadas: Vendas, Detalhes_Vendas, Clientes e Produtos


Controlos adicionais: TextBox, Botes de Comando, Label e DataGridView.

Cdigo da Aplicao:
Public Class Form1
Dim num_venda
Dim codprod
Dim stock
Dim quant
Dim valor

Private Sub Form1_Load(sender As System.Object, e As System.EventArgs)


Handles MyBase.Load
'TODO: This line of code loads data into the 'ExemploDataSet.Produtos'
table. You can move, or remove it, as needed.
Me.ProdutosTableAdapter.Fill(Me.ExemploDataSet.Produtos)
'TODO: This line of code loads data into the
'ExemploDataSet.Detalhes_Vendas' table. You can move, or remove it, as needed.

12 Ano Linguagens de Programao Rui Alves

Pgina 1 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

Me.Detalhes_VendasTableAdapter.Fill(Me.ExemploDataSet.Detalhes_Vendas)
'TODO: This line of code loads data into the 'ExemploDataSet.Clientes'
table. You can move, or remove it, as needed.
Me.ClientesTableAdapter.Fill(Me.ExemploDataSet.Clientes)
'TODO: This line of code loads data into the 'ExemploDataSet.Vendas'
table. You can move, or remove it, as needed.
Me.VendasTableAdapter.Fill(Me.ExemploDataSet.Vendas)

Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &


Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
End Sub

Private Sub BindingNavigatorMoveFirstItem_Click(sender As System.Object, e As


System.EventArgs) Handles BindingNavigatorMoveFirstItem.Click
Me.VendasBindingSource.MoveFirst()
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
End Sub
Private Sub BindingNavigatorMovePreviousItem_Click(sender As System.Object, e
As System.EventArgs) Handles BindingNavigatorMovePreviousItem.Click
Me.VendasBindingSource.MovePrevious()
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
End Sub
Private Sub BindingNavigatorMoveNextItem_Click(sender As System.Object, e As
System.EventArgs) Handles BindingNavigatorMoveNextItem.Click
Me.VendasBindingSource.MoveNext()
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
End Sub
Private Sub BindingNavigatorMoveLastItem_Click(sender As System.Object, e As
System.EventArgs) Handles BindingNavigatorMoveLastItem.Click
Me.VendasBindingSource.MoveLast()
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
End Sub
Private Sub VendasBindingNavigatorSaveItem_Click(sender As System.Object, e
As System.EventArgs) Handles VendasBindingNavigatorSaveItem.Click
Dim posicao
posicao = Me.VendasBindingSource.Position
Me.VendasBindingSource.EndEdit()
'Me.TableAdapterManager.UpdateAll(Me.ExemploDataSet)
Me.VendasTableAdapter.Update(Me.ExemploDataSet.Vendas)
Me.VendasTableAdapter.Fill(Me.ExemploDataSet.Vendas)
Me.VendasBindingSource.Position = posicao
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""

12 Ano Linguagens de Programao Rui Alves

Pgina 2 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

mostra_detalhes()
MsgBox("Registo Guardado")

End Sub
Private Sub BindingNavigatorDeleteItem_Click(sender As System.Object, e As
System.EventArgs) Handles BindingNavigatorDeleteItem.Click
If MsgBox("Eliminar Venda?", MsgBoxStyle.YesNo, "Eliminar") =
MsgBoxResult.Yes Then
Me.VendasBindingSource.RemoveCurrent()
Me.VendasTableAdapter.Update(Me.ExemploDataSet.Vendas)
Me.VendasTableAdapter.Fill(Me.ExemploDataSet.Vendas)
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
MsgBox("Registo eliminado")
End If
End Sub

Private Sub btn_anterior_Click(sender As System.Object, e As


System.EventArgs) Handles btn_anterior.Click
Me.Detalhes_VendasBindingSource.MovePrevious()
End Sub
Private Sub btn_seguinte_Click(sender As System.Object, e As
System.EventArgs) Handles btn_seguinte.Click
Me.Detalhes_VendasBindingSource.MoveNext()
End Sub
Private Sub btn_novo_Click(sender As System.Object, e As System.EventArgs)
Handles btn_novo.Click
Me.Detalhes_VendasBindingSource.AddNew()
Me.Num_VendaTextBox1.Text = Me.Num_VendaTextBox.Text
End Sub
Private Sub btn_guardar_Click(sender As System.Object, e As System.EventArgs)
Handles btn_guardar.Click
'Verifica o stock existente
Call verifica_stock()
'Se nao existe stock sai do procedimento e avisa
If (stock < Val(QuantTextBox.Text)) Then
MsgBox("Quantidade Pretendida inexistente. Existe apenas: " & stock)
Exit Sub
Else
'Valor da quantidade escolhida (introduzida)
quant = Val(Me.QuantTextBox.Text)

Me.Detalhes_VendasBindingSource.EndEdit()
Me.Detalhes_VendasTableAdapter.Update(Me.ExemploDataSet.Detalhes_Vendas)

12 Ano Linguagens de Programao Rui Alves

Pgina 3 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

Me.Detalhes_VendasTableAdapter.Fill(Me.ExemploDataSet.Detalhes_Vendas)

Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &


Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()

Call actualiza_stock()
MsgBox("Registo Guardado")
End If

End Sub
Private Sub btn_eliminar_Click(sender As System.Object, e As
System.EventArgs) Handles btn_eliminar.Click
If MsgBox("Eliminar Venda?", MsgBoxStyle.YesNo, "Eliminar") =
MsgBoxResult.Yes Then
Call verifica_stock()
'Valor da quantidade do produto a eliminar
quant = Val(Me.QuantTextBox.Text)

Me.Detalhes_VendasBindingSource.RemoveCurrent()
Me.Detalhes_VendasTableAdapter.Update(Me.ExemploDataSet.Detalhes_Vendas)
Me.Detalhes_VendasTableAdapter.Fill(Me.ExemploDataSet.Detalhes_Vendas)
Me.Detalhes_VendasBindingSource.Filter = "Num_Venda =" &
Val(Me.Num_VendaTextBox.Text) & ""
mostra_detalhes()
Call actualiza_stock2()
MsgBox("Registo eliminado")
End If
End Sub

Public Sub mostra_detalhes()


'Procedimento que mostar os detalhes da
'venda na DataGridView
Dim ConnStr As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Base_de_Dados\Exemplo.accdb"
num_venda = Val(Me.Num_VendaTextBox.Text)
Dim sql As String = "SELECT Detalhes_Vendas.Num_Venda AS [N Venda],
Detalhes_Vendas.Cod_Produto AS [Cod Produto], Produtos.Descricao AS Produto,
Detalhes_Vendas.Preco AS Preo, Detalhes_Vendas.Quant, [Preo]*[Quant] AS Total
FROM Produtos INNER JOIN Detalhes_Vendas ON Produtos.Cod_Produto =
Detalhes_Vendas.Cod_Produto WHERE (((Detalhes_Vendas.Num_Venda)=" & num_venda &
"))"

12 Ano Linguagens de Programao Rui Alves

Pgina 4 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

'define os objetos connecton, command e dataadapter


Dim conn As OleDb.OleDbConnection = New OleDb.OleDbConnection(ConnStr)
Dim comm As OleDb.OleDbCommand = New OleDb.OleDbCommand(sql, conn)
Dim dataadapter As OleDb.OleDbDataAdapter = New
OleDb.OleDbDataAdapter(comm)
'define o dataset
Dim ds As DataSet = New DataSet()
Try
'---abre a conexao--conn.Open()
'---preenche o dataset--dataadapter.Fill(ds, "Detalhes_Vendas")
'---fecha a conexao--conn.Close()
'---vincula o dataset ao DataGridView--DataGridView1.DataSource = ds

DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells)
DataGridView1.BackgroundColor = Color.Beige

'---define a tabela a ser exibida--DataGridView1.DataMember = "Detalhes_Vendas"


'----Soma o campo Total e mostra o resultado na Label1 ----Dim sumTotal As String = ds.Tables(0).Compute("SUM(Total)",
String.Empty).ToString
Label1.Text = "TOTAL :" & sumTotal
conn.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Public Sub verifica_stock()


'procedimento para verificar se existe stock
'no produto escolhido para inserir na venda
If QuantTextBox.Text = String.Empty Or PrecoTextBox.Text = String.Empty
Then
MessageBox.Show("Informao Incompleta. Preencha os campos com a
quantidade e o preo.", _
"Informao Incompleta")
Return
End If
Dim ConString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Base_de_Dados\Exemplo.accdb"
Dim DBCon As New OleDb.OleDbConnection(ConString)

codprod = Val(Cod_ProdutoComboBox.SelectedValue)

12 Ano Linguagens de Programao Rui Alves

Pgina 5 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

Dim strsql As String = "SELECT Cod_Produto, Stock FROM Produtos WHERE


Cod_Produto=" & codprod & ""
Dim
Dim
Dim
Dim

cm As New OleDb.OleDbCommand(strsql, DBCon)


dr As OleDb.OleDbDataReader
valido As Boolean = False
Flag As Boolean = False

DBCon.Open()
dr = cm.ExecuteReader
If dr.HasRows Then
While dr.Read
If (codprod) = dr.Item("Cod_Produto") Then
valido = True
stock = dr.Item("Stock")
End If
End While
Flag = True
End If
dr.Close()
DBCon.Close()
End Sub

Public Sub actualiza_stock()


'Procedimento para actualizar o stock do produto
'introduzido na venda (actualiza a tabela produtos)
Dim valor As Integer
Dim conn As New OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Base_de_Dados\Exemplo.accdb"
'valor a actualizar na tabela (stock existente - quantidade introduzida)
valor = stock - quant
Dim cmd As OleDb.OleDbCommand = conn.CreateCommand
'SQL para actualizar o stock
cmd.CommandText = "UPDATE Produtos SET Stock =" & valor & " WHERE
(((Cod_Produto)=" & codprod & "))"
Try
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
MsgBox("Stock actualizado com sucesso")
Catch erro As Exception
MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical,
"Erro")
End Try
End Sub

Public Sub actualiza_stock2()


'Procedimento para actualizar o stock do produto
'ELIMINADO da venda (actualiza a tabela produtos)
Dim valor As Integer
Dim conn As New OleDb.OleDbConnection()
conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Base_de_Dados\Exemplo.accdb"

12 Ano Linguagens de Programao Rui Alves

Pgina 6 de 7

AE maximinos

ESMAX 2013/2014

Curso Profissional Tcnico de Informtica de Gesto

'valor a actualizar na tabela (stock existente + quantidade do produto


eliminado)
valor = stock + quant
Dim cmd As OleDb.OleDbCommand = conn.CreateCommand
'SQL para actualizar o stock
cmd.CommandText = "UPDATE Produtos SET Stock =" & valor & " WHERE
(((Cod_Produto)=" & codprod & "))"
Try
conn.Open()
cmd.ExecuteNonQuery()
conn.Close()
MsgBox("Stock actualizado com sucesso")
Catch erro As Exception
MsgBox("Erro " & vbCrLf & erro.ToString, MsgBoxStyle.Critical,
"Erro")
End Try
End Sub
End Class

12 Ano Linguagens de Programao Rui Alves

Pgina 7 de 7