> ## Utilização da Grade Vinculada aos dados: DbGrid.

##### Conteúdo

- Introdução.
- Utilização e Configuração.
- Projeto - Controle Financeiro.
- Controle Financeiro - Definição de tabelas.
- Controle Financeiro - Interface com o usuário.
- Controle Financeiro - Código do projeto.
- DbGrid - Dicas e Truques

### Introdução.

    A Grade Vinculada aos dados - DbGrid  oferece um meio para visualizar vários
    registros ao mesmo tempo. Assemelha-se ao commando Browse usado no Clipper/FoxPro
    e ao modo tabela do Access.

    O seu primo pobre no VB seria o controle Grid, e, apenas para dimensionar a dife-
    rença ,o Grid está limitado a  16352 linhas e 5450 colunas no Dbgrid a
    quantidade de linhas esta condicionada aos recursos do  sistema e a 1700 colunas,
    sem contar que o desempenho do Dbgrid e bem superior ao do Grid.

    Enquanto o Grid precisa ser configurado quase que totalmente via código, para usar
    o Dbgrid basta arrastar o ícone do Controle para o seu formulário e definir a
    propriedade DataSource para identificar o controle de dados que contém os dados
    que você quer exibir, e pronto, a grade exibe todos os campos dos registros do
    recordset.

    Nota:Para preservar recursos do sistema use uma instrução SQL na propriedade
         Recordsource do controle de dados que o DbGrid irá utilizar.

    Conteúdo

### Utilização e configuração.

    Vejamos passo a passo como utilizar o Dbgrid com o controle de dados vinculados
    - Data Control.

fig1. | De início selecione o objeto controle de dados na Toolbox do Visual Basic e acrescente-o ao seu formulário.(Fig.1)

Defina a seguir as propriedades: Name - Nome do Controle (O padrão é data1) e Caption - Especifica o nome que aparece no controle de dados. DatabaseName - Para bancos de dados do Access, representa o nome do arquivo do banco de dados, inclusive o nome compleo do caminho. (Para banco de dados diferentes do Access é necessário informar o nome do caminho até o subdiretório dos dados.Ex-Para padrão Dbase : DatabaseName=c:\dir) RecordSource - Especifica as informações que deseja obter no banco de dados - uma tabela , uma instrução SQL . RecordsetType - Se deseja criar um 2-snapshot ou um acessar uma 0-table altere esta propriedade, pois o padrão é 1-dynaset. Connect - Necessária quando o banco de dados não for do Access. Ex - Para banco de dados padrão Dbase - Connect=dBASEIII.

fig.4 | A seguir selecione o ícone do DBGrid na ToolBox e arreste-o até o seu form dimensionando como na fig.4. ao lado.

fig.5 | Finalmente defina a propriedade DataSource vinculado-a ao controle de dados configurado anteriormente.fig.5.

Para permitir a edição, inclusão e exclusão de registros na grade você deve definir como True as propriedades AllowAddNew , AllowUpdate e AllowDelete. Isto pode ser feito através da folha de propriedades do DBgrid (fig.6), onde podemos tambem especificar opções avançadas de tratamento do Recordset sem uma linha de código sequer.

fig.6

Conteúdo

### Projeto - Controle Financeiro..

Chega de conceitos, vamos colocar em prática tudo isto em um projeto simples, um pequeno controle financeiro que você depois pode aperfeiçoar. Então mão a obra:

    -objetivo:  Controlar a  movimentação de contas bancárias.

    -Constituição:

- Um formulário MDI para o menu de opções com botões de ícones.
- Um formulário para cadastrar : Clientes , Contas , Transações.
- Um formulário para visualizar a movimentação de determinada conta.
- Um formulário para incluir dados.
- Um formulário para excluir dados.
- Um formulário para alterar dados.
- Um módulo para código utilizado por toda a aplicação.

1-Vamos iniciar com a criação do menu, simples na verdade, mas que serve para os nossos propósitos. Fica a seu critério incrementá-lo. Vamos lá. -Inicie o VB e acione a opção Insert->MDI Form para inserir um formulário MDI que conterá os demais formulários do projeto. -O nosso formulário deverá ter o aspecto mostrado na figura 1.0 abaixo:

fig 1.0 |
    Neste formulário temos os seguintes
    controles:

    -1 controle SSPanel
    -5 botões SSCommand

    Além disso temos um menu feito
    no Editor de Menus do Visual
    Basic.

-Insira os controles no formulário e configure suas propriedades como indicado a seguir na tabela 1.0: Tabela 1.0 - Objetos e propriedades do form frmmenu. ---------------------------------------------------------------------------- Objeto Propriedade Configuração ---------------------------------------------------------------------------- MDIForm Name frmmenu Picture fig 1.0 ---------------------------------------------------------------------------- (*)SSCommand Name SSCommand1(0) Picture fig 1.0 - Clientes,Contas,Transações BevelWidth 1 --------------------------------------------------------------------------- SSCommand Name SSCommand1(1) Picture fig 1.0 - Gerenciar o movimento BevelWidth 1 --------------------------------------------------------------------------- SSCommand Name SSCommand1(2) Picture fig 1.0 - Relatórios do Sistema BevelWidth 1 --------------------------------------------------------------------------- SSCommand Name SSCommand1(3) Picture fig 1.0 - Ajuda do Sistema BevelWidth 1 --------------------------------------------------------------------------- SSCommand Name SSCommand1(4) Picture fig 1.0 - Sair do Sistema BevelWidth 1 --------------------------------------------------------------------------- SSPanel Caption "" Name painel Align 1-Align Top BevelWidth 1 BevelInner 0-None BevelOuter 2-Raised --------------------------------------------------------------------------- (*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um índice identificador. (**)Para usar o Editor de Menus do VB pressione CTRL+E e informe o nome que deseja para o menu na propriedade Caption e na propriedade Name informe o nome de referência do menu. Para criar subitens clique na seta para direita repita o passo anterior e a seguir no botão Next para ir para o próximo subitem. Obs:Para sublinhar a primeira letra do nome do menu insira o caractere & antes da letra. Ex: &Cadastros -> exibe Cadastros. 2-Agora basta atribuir o código a cada botão de comando , no nosso caso so usaremos o botão que gerencia o movimento e o botão para sair do sistema. -No botão que gerencia o movimento - Menu Movimento - iremos carregar o formulário frmtrans. -No botão para sair do Sistema inserimos o código que encerra a aplicação.Veja abaixo:

    Private Sub SSCommand1_Click(Index As Integer)

       Select Case Index
          Case 0 'botão 1 - Cadastramentos (por sua conta)
          Case 1 'Gerencia movimento
             frmtransa.Show
          Case 2 'Relatórios
          Case 3 'Ajuda
          Case 4 'Sair da aplicação
             end
       End Select

    End Sub

Conteúdo

### Controle Financeiro - Definição das tabelas..

Vamos agora definir o banco de dados e as tabelas utilizadas pelo sistema. A princípio o sistema usará as seguintes tabelas:

    - BANCO.MDB   - será o banco de dados do nosso sistema.
    - tblcli      - Tabela de cadastro dos clientes.
    - tblcontas   - Tabela de cadastro das contas a controlar.
    - tblcodtrans - Tabela de cadastro dos códigos das transações realizadas.
    - tbltrans    - Tabela onde será registrada toda a transação realizada.

    Vejamos agora a definição dos campos de cada tabela e a criação do banco de dados.

    1-Crie o seu banco de dados utilizando o Data Manager ou use
     o Microsoft Access e grave-o com o nome de BANCO.MDB.

    2-Crie uma tabela com o nome de tblcli com a seguinte estrutura:
      ----------------------------------------------------
       Nome do Campo       Tipo de Dados        Tamanho
      ----------------------------------------------------
        COD_CLI              LONG INTEGER(*)
        DES_CLI              CARACTER              30
      ----------------------------------------------------
      (*)Como cada cliente deve ter um codigo único  garantindo assim a exata
      identificação do mesmo, defina o tipo de dados para o campo código como
      LONG INTEGER , e ative o atributo Counter e a opção Required.

    3-Crie uma tabela com o nome de tblcontas com a seguinte estrutura:
      ----------------------------------------------------
       Nome do Campo       Tipo de Dados        Tamanho
      ----------------------------------------------------
        COD_CLI             LONG
        COD_CONTA           LONG                   30
        DES_CONTA           TEXT                   30
      ----------------------------------------------------

    -Defina um índice para os campos cod_cli e cod_conta com o nome de cliconta
     e com as seguintes propriedades: Unique, Primary index , Required.

    4-Crie uma tabela com o nome de tblcodtrans com a seguinte estrutura:
      ----------------------------------------------------
       Nome do Campo       Tipo de Dados        Tamanho
      ----------------------------------------------------
        COD_TRAN            LONG
        DES_TRAN            TEXT                  30
      ----------------------------------------------------

    -Defina um índice para o campo COD_TRANS  e indique-o como chave primária

    5-Finalmente , Crie uma tabela com o nome de tblcodtrans com a estrutura:
      ----------------------------------------------------
       Nome do Campo       Tipo de Dados        Tamanho
      ----------------------------------------------------
        COD_LANCA           LONG INTEGER(*)
        COD_TRANS           LONG
        COD_CLI             LONG
        COD_CONTA           LONG
        DATA_TRANS          DATE/TIME
        LANCAMENTO          CURRENCY
        SALDO               CURRENCY
        NU_DCTO             TEXT                 15
        OBS_TRANS           TEXT                 30
      ----------------------------------------------------
    (*)Como cada lancamento deve ter um codigo único  garantindo assim sua exata
      identificação , defina o tipo de dados para o campo cod_lanca
      LONG INTEGER , e ative o atributo Counter e a opção Required.

    -Defina os seguintes índices para esta tabela:

      ----------------------------------
       nome do indice       composição
      ----------------------------------
      - PrimaryKey          cod_lanca      índice - chave primária (já definido)
      ----------------------------------
      - datatrans           data_trans     índice - datatrans por data de transação
      ----------------------------------

Conteúdo

### Controle Financeiro - Interface com o usuário.

Vamos agora desenhar a interface com o usuário. Nesta fase iremos construir três formulários que comporão o nosso projeto:

    - frmtrans - Formulário que gerencia a movimentação das contas
    - frmexcl  - Formulário para exclusão de lançamentos
    - frmincl  - Formulário para incluir lançamentos
    - frmalt   - Formulário para efetuar alterações nos lancamentos efetuados

    1-O formulário frmtrans é o formulário principal de nossa aplicação , pois
    através dele iremos gerenciar a movimentação das contas. Ele terá o aspecto da
    fig1.0 abaixo:

fig 1.0

Para montar o formulário acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1 como frmtrans. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulário frmtrans ---------------------------------------------------------------------------- Objeto Propriedade Configuração ---------------------------------------------------------------------------- Form Name frmtrans Caption "Movimentação Contas Correntes" MDIChild True ---------------------------------------------------------------------------- Frame Name Frame1 Caption Cliente / Conta Corrente ---------------------------------------------------------------------------- Frame Name Frame2 Caption Período / Tipo de Transação ---------------------------------------------------------------------------- ComboBox Name CboCliente style 0-Dropdown Combo ---------------------------------------------------------------------------- ComboBox Name CboConta style 0-Dropdown Combo ---------------------------------------------------------------------------- Label Name Label6 Caption "" ---------------------------------------------------------------------------- MaskedBox Name maskini Mask 99/99/99 PrompInclude False PromptChar " " ---------------------------------------------------------------------------- MaskedBox Name maskfim Mask 99/99/99 PrompInclude False PromptChar " " ---------------------------------------------------------------------------- ComboBox Name CboTipo style 0-Dropdown Combo ---------------------------------------------------------------------------- (*)CommandButton Name command1(0) Caption "&Incluir" --------------------------------------------------------------------------- CommandButton Name command1(1) Caption "&Excluir" --------------------------------------------------------------------------- CommandButton Name command1(2) Caption "&Alterar" --------------------------------------------------------------------------- CommandButton Name command1(3) Caption "&Sair" --------------------------------------------------------------------------- CommandButton Name command2 Caption "&Processa" --------------------------------------------------------------------------- SSPanel Caption "" Name SSPanel1 --------------------------------------------------------------------------- Data Name data1 --------------------------------------------------------------------------- DbGrid Name DbGrid1 Column1 Data Column2 Documento Column3 Transacao Column4 Historico Column5 Valor Column6 Saldo --------------------------------------------------------------------------- (**)Label Caption ** AutoSize ** --------------------------------------------------------------------------- (*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um índice identificador. (**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivos controle descrito na fig 1.0. 2-O formulário frmincl é o formulário que será usado para incluir lançamentos. Tem o seguinte aspecto mostrado na fig 2.0 abaixo:

fig 2.0

Para montar o formulário acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1 como frmincl. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulário frmincl ---------------------------------------------------------------------------- Objeto Propriedade Configuração ---------------------------------------------------------------------------- Form Name frmincl Caption "Lançamentos-Inclusão Debito/Crédito MDIChild True ---------------------------------------------------------------------------- Frame Name Frame1 Caption Lançamento ---------------------------------------------------------------------------- OptionButton Name Option1 Caption Débito Value True ---------------------------------------------------------------------------- OptionButton Name Option2 Caption Crédito Value False ---------------------------------------------------------------------------- Frame Name Frame2 Caption Movimentação ---------------------------------------------------------------------------- MaskedBox Name maskdata Mask 99/99/99 PrompInclude False PromptChar " " ---------------------------------------------------------------------------- MaskedBox Name maskvalor format $#,##0.00;($#,##0.00) Mask "" PrompInclude False PromptChar " " ---------------------------------------------------------------------------- ComboBox Name CboTipo style 0-Dropdown Combo ---------------------------------------------------------------------------- TextBox Name txtnudcto ---------------------------------------------------------------------------- TextBox Name txtdescr ---------------------------------------------------------------------------- SSPanel Caption "" Name SSPanel1 --------------------------------------------------------------------------- (*)CommandButton Name command1(0) Caption "&Grava" --------------------------------------------------------------------------- CommandButton Name command1(1) Caption "&Cancela" --------------------------------------------------------------------------- CommandButton Name command1(2) Caption "&Sair" --------------------------------------------------------------------------- (*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um índice identificador. (**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivos controle descrito na fig 2.0. 3-O formulário frmexcl é o formulário que será usado para excluir lançamentos. Tem o seguinte aspecto mostrado na fig 3.0 abaixo:

fig 3.0

Para montar o formulário acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulário Form1 como frmexcl. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulário frmexcl ---------------------------------------------------------------------------- Objeto Propriedade Configuração ---------------------------------------------------------------------------- Form Name frmexcl Caption "Exclusão de Dados" MDIChild True ---------------------------------------------------------------------------- Frame Name Frame1 Caption Excluir Dados ---------------------------------------------------------------------------- OptionButton Name Option1 Caption A partir de Value True ---------------------------------------------------------------------------- OptionButton Name Option2 Caption Antes de Value False ---------------------------------------------------------------------------- OptionButton Name Option2 Caption No Período de Value False ---------------------------------------------------------------------------- TextBox Name text2 ---------------------------------------------------------------------------- TextBox Name txtdcto ---------------------------------------------------------------------------- TextBox Name text1 Visible false ---------------------------------------------------------------------------- CommandButton Name command2 Caption "OK" --------------------------------------------------------------------------- CommandButton Name command1 Caption "&Cancela" ---------------------------------------------------------------------------

Conteúdo

### Controle Financeiro - Código do projeto.

    -Código do formulário de menu:frmmenu

    Botões de Comando do Menu.

    Private Sub SSCommand1_Click(Index As Integer)
       select case index
         case 0
         case 1 'frmtransa
           frmtransa.Show
         case 2
         case 3
         case 4 'sair
           end
       end select
    End Sub

    -Código do formulário das transações:frmtransa

    -Caixa de combinação cliente

    Private Sub cbocliente_Click()
      If cbocliente.Text < > "" Then
         Dim sql_tmp As String
         sql_tmp = "SELECT * FROM tblcontas WHERE tblcontas.cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex)
         enche_combo cboconta, sql_tmp, "cod_conta", "cod_cli"
      End If
    End Sub

    -caixa de combinação conta

    Private Sub cboconta_Click()
      If cboconta.Text < > "" Then
          Dim arqtemp As Recordset
          Set arqtemp = db.OpenRecordset("tblcontas", dbOpenTable)
          arqtemp.Index = "codconta"
          arqtemp.Seek "=", Val(cboconta.Text)
          Label6.Caption = arqtemp("desc_conta")
          arqtemp.Close
          Maskini.SetFocus
      End If
    End Sub

    -Código dos botões Incluir, Excluir, Alterar e Sair

    Private Sub Command1_Click(Index As Integer)
        Dim msg As String

        Set tabela = db.OpenRecordset("tbltrans", dbOpenTable)
        tabela.Index = "cod_conta"

        Select Case Index
        Case 0 'incluir
             alterareg = False
             frmtrans_i.Show 1
        Case 1  'excluir
             frmexcl.Show 1
             data2.Refresh
        Case 2 'alterar
             if dbgrid1.columns(0) < > "" then
                tabela.Seek "=", DBGrid1.Columns(0)
             else
                msgbox "Selecione um lancamento a alterar ! "
                exit sub
             endif
             alterareg = True
             frmtrans_i.Show 1
        Case 3
            Unload Me
            Exit Sub
        End Select

        atualiza_grid (sql)
        Data2.Refresh

    End Sub

    -Código do botão Processar

    Private Sub Command2_Click()

      Dim msg As String
      Dim x As Integer

      '------checa selecao de cliente/conta--
      If cbocliente.ListIndex = -1 Then
        msg = "Selecione um cliente !"
        MsgBox msg, vbExclamation
        cbocliente.SetFocus
        Exit Sub
      End If
      If cboconta.ListIndex = -1 Then
        msg = "Selecione uma conta !"
        MsgBox msg, vbExclamation
        cboconta.SetFocus
        Exit Sub
      End If

      '-- atribui cliente/conta as variaveis publicas
      Cliente = cbocliente.ItemData(cbocliente.ListIndex)
      conta = cboconta.Text

      '--habilita botões de comandos--
      For x = 0 To 2
        Command1(x).Enabled = True
      Next

      '-- estabelece consulta SQL ------
      sql = "SELECT data_trans, cod_trans, lancamento, nu_dcto, saldo, obs_trans  FROM tbltrans"
      sql = sql & " WHERE cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex)
      sql = sql & " AND cod_conta=" & cboconta.Text

      '---------define tipo da transacao para consulta--
      If cbotipo.ListIndex < > -1 Then
          sql = sql & " AND cod_trans=" & cbotipo.ItemData(cbotipo.ListIndex)
       End If

      '---verifica data inicial/final e define período-----
      If Maskini < > "  /  /  " And maskfim < > "  /  /  " Then
        If Not IsDate(Maskini) Then
          msg = "Data inicial invalida"
          Maskini.SetFocus
          MsgBox msg, vbExclamation
          Exit Sub
        ElseIf Not IsDate(maskfim) Then
          msg = "Data final inválida "
          maskfim.SetFocus
          MsgBox msg, vbExclamation
          Exit Sub
        End If
         sql = sql & " AND data_trans >= " & "#" & Format((Maskini), "mm/dd/yy") & "#"
         sql = sql & " AND data_trans <= " & "#" & Format((maskfim), "mm/dd/yy") & "#"
      End If

      '-----atualiaza Recordsource-------
      sql = sql & " ORDER BY data_trans"
      Data2.RecordSource = sql
      atualiza_grid (sql)
      Data2.Refresh

    End Sub

    -Código de carga do formulário

    Private Sub Form_Load()
      Dim x As Integer

      '-------define tamanho do form----
      Me.Width = 8295
      Me.Height = 5595

      '-- desabilita botões de comando
      For x = 0 To 2
        Command1(x).Enabled = False
      Next

      '---- abre tabela / e define índice ativo---
      'Set tabela = db.OpenRecordset("tbltrans", dbOpenTable)
      'tabela.Index = "clicndtr"

      '----configura data control---
      Data2.DatabaseName = App.Path & "\joias.mdb"
      Data2.RecordSource = "SELECT * FROM tbltrans WHERE cod_trans = Null"

      '---------formata grid--------------------
      DBGrid1.Columns(0).Width = 900
      DBGrid1.Columns(1).Width = 950
      DBGrid1.Columns(2).Width = 925
      DBGrid1.Columns(3).Width = 2200
      DBGrid1.Columns(4).Width = 1300
      DBGrid1.Columns(5).Width = 1300
      dbgrid1.columns(6).width = 1300

      '----------atualiza o grid-------------------
      Data2.Refresh

      '-------atualiza combobox  cliente ------------------
      enche_combo cbocliente, "tblcli", "des_cli", "cod_cli"
      enche_combo cbotipo, "tblcodtrans", "des_tran", "cod_tran"
      '----------------------------------------------

     End Sub

    -Código da função que atualiza o Grid

    Public Sub atualiza_grid(sql As String)
      Dim credito, debito As Currency
      Dim saldo_atu As Currency
      Dim arqtemp As Recordset
      saldo_atu = 0

      '---------------------------------------------
      Set arqtemp = db.OpenRecordset(sql, dbOpenDynaset)
      '---------------------------------------------
      If arqtemp.EOF Then
        MsgBox "Não há dados no arquivo !", vbExclamation
        arqtemp.Close
        Exit Sub
      End If
      arqtemp.MoveFirst
      Do
        credito = 0
        debito = 0
        If Not IsNull(arqtemp![lancamento]) Then
            If arqtemp![lancamento] > 0 Then
              credito = arqtemp![lancamento]
            Else
              debito = arqtemp![lancamento]
            End If
        Else
            credito = 0
            debito = 0
        End If
        saldo_atu = credito + debito + saldo_atu
        arqtemp.Edit
        arqtemp![saldo] = saldo_atu
        arqtemp.Update
        arqtemp.MoveNext
      Loop While Not arqtemp.EOF
      arqtemp.Close
    End Sub

    Código do formulário para incluir/alterar dados: Frmincl

    Código dos botões Gravar, Cancelar e Sair

    Private Sub Command1_Click(Index As Integer)
        Select Case Index
        Case 0 'gravar
            grava_recs
            tabela.Update
            If alterareg Then
                Unload Me
                Exit Sub
            End If
            tabela.AddNew
            maskdata.SetFocus
        Case 1 'cancelar
            MsgBox "Atenção , as informações não foram gravadas ! "
            If alterareg Then
                Unload Me
                Exit Sub
            End If
            clear_controls
            maskdata.SetFocus
        Case 2 'sair
            Unload Me
        End Select
    End Sub

    Código de rotina de gravação
    Código do botão de opção Antes de

    Private Sub Option1_Click()
        If Option1.Value = True Then
            Label2.Visible = False
            Text1.Visible = False
        End If
        Text2.SetFocus
    End Sub

    Código do botão de opção A Partir de
    Private Sub Option2_Click()
        If Option2.Value = True Then
            Label2.Visible = False
            Text1.Visible = False
        End If
        Text2.SetFocus
    End Sub

    Código do botão de opção No período de

    Private Sub Option3_Click()
        If Option3.Value = True Then
            Label2.Visible = True
            Text1.Visible = True
        End If
        Text2.SetFocus
    End Sub

    Código do modulo financa.bas

    Código do seção general declarations

    Option Explicit
    Public area As Workspace
    Public db As Database
    Public tabela As Recordset
    Public consulta As QueryDef
    Public alterareg As Boolean
    Public sql As String
    Public cliente As Long
    Public conta As Long

    Código de Sub Main

    Sub main()
       'define area ativa e abre arquivo de dados
       Set area = DBEngine.Workspaces(0)
       Set db = area.OpenDatabase(App.Path & "\banco.mdb")
       'mostra formulário de menu
       frmmenu.Show
    End Sub

    Código da função que preenche as combobox

    Public Sub enche_combo(combo As Control, data As String, campo As String, indice As String)

    '-- cria variável recordset temporária
    Dim arqtemp As Recordset
    '-----limpa combo
    combo.Clear
    '-----abre tabela como Snapshot
    Set arqtemp = db.OpenRecordset(data, dbOpenSnapshot)
    '--inicia loop através da tabela---
    Do Until arqtemp.EOF
        combo.AddItem arqtemp(campo)
        combo.ItemData(combo.NewIndex) = arqtemp(indice)
        arqtemp.MoveNext
    Loop
    '---fecha recordset e não seleciona nada na combo
    arqtemp.Close
    combo.ListIndex = -1

    End Sub

Veja abaixo a tela do formulário transações em tempo em execução:

Conteúdo

### DbGrid - Dicas e Truques.

    1-Tornando uma coluna invisível

    DbGrid1.columns(i).visible= False

Conteúdo

Retorna