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 : 

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

'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:


José Carlos Macoratti