Usando ADO na prática - Adodc , DataGrid , DataCombo e Mschart
Vamos começar 2001 pondo a mão na massa , afinal programar se aprende programando ( Quem disse isto ???). Neste artigo iremos mostrar como usar os controles DataGrid com Adodc e o já conhecido Mschart do VB5 , agora com alguns melhoramentos. ( Veja os artigos : Usando os controles Vinculados... e Gráficos no VB ).
1-) O Objetivo
Nosso projeto terá como objetivo exibir um gráfico de vendas de produtos e um grid com a relação dos produtos vendidos com totalização das vendas e das unidades vendidas. Algo parecido com a figura abaixo:
Fig 1.0 - O formulário principal do projeto |
Iremos mostrar como vincular o Adodc a um Mschart a um DataGrid e a um DataCombo e ainda como realizar totalizações em uma base de dados e algumas perfumarias como : usar um barra de progresso e um maskeditbox.
A idéia e abordar conceitos que fornecerão subsídios para você aprender a reutilizar e a adaptar o código aos seus próprios sistemas.
2-) O projeto
O projeto possuirá somente um formulário com os controles conforme figura abaixo. (Exibimos os nomes dos controles mais importantes . As propriedades de cada controle não serão mencionadas visto que você poderá fazer o download do projeto no final do artigo.)
3-) Como funciona ?
- O banco de dados e as tabelas - estrutura
Iremos trabalhar com um banco de dados - ProdInfo.mdb - e duas tabelas - Produtos e Transacoes .
A
tabela Produtos contém as informações dos produtos e possui os
campos : ProdutoNo ( indica o código do produto) e Preco (
indica o preço do produto). A Tabela possui um índice chamado - PrimaryKey
(chave primária) no campo ProdutoNo.
A tabela Transacoes contém as informações das transações efetuadas (vendas realizadas) e possui os campos: ProdutoNo (indica o código do produto) , PedidoNo (indica o número do pedido) e UnidadesVendidas (indica a quantidade de unidades vendidas do produto).A tabela dois índíces: um índice chamado PrimaryKey nos campos ProdutoNo e PedidoNo e outro índice chamado TransProdutoNo no campo ProdutoNo. Existe um relacionamento entre o campo ProdutoNo da tabela Produtos e os campos ProdutoNo e PedidoNo da tabela Transacoes. Ao lado uma visão das tabelas e sua estrutura resumida. |
- Os controles vinculados da ADO - vinculando os dados
a-) Vamos usar dois controles Adodc :
AdoDatPedidos - A fonte de dados deste controle será o campo PedidoNo da tabela Transacoes, conforme código abaixo:
With AdoDatPedidos .Visible = False 'Estamos usando o Provedor para Jet 3.51 .ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & App.Path & "\Prodinfo.mdb" .RecordSource = "SELECT DISTINCT Transacoes.PedidoNo " & _ "FROM Transacoes " & _ "ORDER BY Transacoes.PedidoNo " .EOFAction = adDoMoveLast .Mode = adModeReadWrite .Refresh End With |
AdoDatRelatorios - A fonte de dados para este controle será o campo ProdutoNo da tabela Produtos o campo Preco da tabela Produtos e o campos UnidadesVendidas da tabela transacoes.
With frmMain.AdoDatRelatorios .Visible = False .ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=" & App.Path & "\Prodinfo.mdb" .RecordSource = strSQL .EOFAction = adDoMoveLast .Mode = adModeReadWrite .Refresh End With |
strSQL = "SELECT Produtos.ProdutoNo, Produtos.Preco,Transacoes.UnidadesVendidas " strSQL = strSQL & "FROM Produtos,Transacoes " strSQL = strSQL & "WHERE Transacoes.PedidoNo = " & "'" & strPedidoNo & " '" strSQL = strSQL & "AND Produtos.ProdutoNo = Transacoes.ProdutoNo " |
Observe que a variável strPedidoNo (contém o número do pedido) é fornecida pelo controle DataCombo, esta entre aspas simples (') , por ser uma string. A consulta SQL será gerada em tempo de execução , quando o usuário selecionar um número de pedido na combo.
b-) Um controle DataCombo
dbcboPedidoNo - Irá exibir o número do pedido de cada transação e estará vinculada ao controle adoDatPedidos conforme código abaixo:
'preenche combobox Set dbcboPedidoNo.DataSource = AdoDatPedidos Set dbcboPedidoNo.RowSource = AdoDatPedidos dbcboPedidoNo.ListField = "PedidoNo" dbcboPedidoNo.DataField = "PedidoNo" dbcboPedidoNo.BoundColumn = "PedidoNo" |
DataSource - Define a fonte de dados com a qual o controle estará vinculada.
RowSource - Define o controle de dados com o qual a lista do controle será preenchida
DataField - Indica um nome de campo válido criado pela fonte de dados vinculada.
ListField - Indica qual campo do controle de dados definido em RowSource será exibido na lista.
BoundColumn - Indica o nome do campo fonte que será usado para atualizar o valor do outro Recordset. Deverá ser uma parte dos dados que identifica com exclusividade a opção do usuário.
c-) Um DataGrid
O controle DataGrid é novo no VB6 e parece muito com o DBGrid. Você pode vincular o DataGrid a um controle de dados ADO ou a um construtor DataEnvironment mas não pode vinculá-lo aos controles da DAO nem usá-lo no modo não vinculado. Tem um vantagem seu tamanho , 252 KB , é bem menor que os 500 KB do DBGrid.
Set frmMain.AdoGrdRelatorio.DataSource = frmMain.AdoDatRelatorios |
A formatação do Grid é feita pela função formata_Grid que possui o seguinte código:
Public Sub Formata_Grid() frmMain.AdoGrdRelatorio.AllowUpdate = False Set pNumero = frmMain.AdoGrdRelatorio.Columns(0) Set pPreco = frmMain.AdoGrdRelatorio.Columns(1) Set pVendas = frmMain.AdoGrdRelatorio.Columns(2) 'Define largura e alinhamento pNumero.Caption = "Produto No." pNumero.Width = 1000 pNumero.Alignment = dbgCenter ' alinhamento central pPreco.Alignment = dbgRight ' alinhamento a direita pPreco.Caption = "Preço" pPreco.Width = 850 pPreco.NumberFormat = "Currency" pVendas.Alignment = dbgCenter ' alinhamento central pVendas.Caption = "Vendas" pVendas.Width = 900 End Sub |
Obs: pNumero, pPreco e pVendas são variáveis públicas definidas no módulo bas.
d-) Um controle ProgressBar
O controle ProgressBar é usado permitir que o usuário visualize o progresso da tarefa enquanto carrega os dados. Isto dá uma sensação de maior rapidez a aplicação. Os valores para este controle são definidos no início da carga dos dados :
frmMain.prgBrCarrega.Visible = True frmMain.prgBrCarrega.Max = 7 frmMain.prgBrCarrega.Value = 1 |
e são atribuídos conforme a tarefa for se desenrolando: frmMain.prgBrCarrega.Value = 2 (3,4, ...7)
e-) Efetuando a totalização das vendas e das unidades vendidas
Os valores totalizados são exibidos nos controles : msktotal - valor total das vendas e txtvendas - total das unidades vendidas.
A totalização foi feita usando um loop (While/Wend) que percorre o Recordset do controle AdoDatRelatórios, conforme abaixo:
' realiza as totalizacoes de vendas e unidades vendidas While frmMain.AdoDatRelatorios.Recordset.EOF = False frmMain.mskTotal.Text = frmMain.mskTotal + CDbl(frmMain.AdoDatRelatorios.Recordset.Fields("Preco")) * Val(frmMain.AdoDatRelatorios.Recordset.Fields("UnidadesVendidas")) & vbCrLf 'valor total das vendas frmMain.txtVendas.Text = frmMain.txtVendas + Val(frmMain.AdoDatRelatorios.Recordset.Fields("UnidadesVendidas")) & vbCrLf 'valor total das unidades vendidas frmMain.AdoDatRelatorios.Recordset.MoveNext ' move para o proximo registro Wend |
É uma solução procedural , poderíamos ter usando SQL.
f-) Um controle Mschart
O controle Mschart traz como novidade no VB6 a capacidade de vincular o controle diretamente a um banco de dados usando um controle de dados.
With GraficosProdutos
' define a propriedade Datasource do controle Mschart .ShowLegend = False Set .DataSource = AdoDatRelatorios End With |
g-) Exibindo dicas ao usuário
Se você colocar o ponteiro do mouse sobre os controles : dbcboPedidoNo, adoGrdRelatorio, GraficosProdutos verá ser exibida uma pequena dica. Fizemos isto conforme o código abaixo.
Public Sub Exibe_Dica() With frmMain .dbcboPedidoNo.ToolTipText = "Selecione um número de Pedido" .AdoGrdRelatorio.ToolTipText = "Exibe o relatório dos produtos" .GraficosProdutos.ToolTipText = "Exibe a estatistica sobre o produto" End With End Sub |
4-) Conclusão
Perceba que mesmo fazendo questão de definir as propriedades dos controles vinculados via código (poderíamos ter feito isto diretamente nos controles) a quantidade é pequena se comparada com o modo não vinculado.
O mais importante a frisar é que as tabelas foram ajeitadas para tornar o trabalho mais fácil , mas você pode obter o mesmo resultado se normalizar suas tabelas adequadamente.
Agora você pode fazer download do projeto clicando aqui -> adomschart.(arquivos do projeto e base de dados)
Até a próxima.
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#