> ## Utilização da Caixa de Listagem Vinculada aos dados: DBList.

##### Conteúdo

- Introdução.
- Exemplo - Cadastro de Funcionários.
- Código do Projeto - Cadastro de Funcionários.
- Exemplo de busca dinamica usando Dblist.

### Introdução.

    A Caixa de Listagem Vinculada aos dados - DBList  tem função identica a Caixa
    de Listagem - ListBox , a qual seja, apresentar ao usuário uma lista de opções. A
    principal diferença consiste no fato de a Caixa de Listagem Vinculada aos dados
    buscar as informações  em  um recordset ,enquanto  que a Caixa de Listagem,
    obtêm  as  informações através de uma série de instruções AddItem.

    Vejamos como utilizar o controle DBList no roteiro a seguir:

    1- Em um formulário insira o controle Data Control e configure as propriedades:

     - Name          -> nome do Controle. (O nome padrão é Data1.)
     - DataBasename  -> nome do banco de dados que deseja acessar.
     - RecordSource  -> nome da origem dos dados , geralmente o nome de uma tabela
                        do banco de dados referido na opção anterior ou uma string
                        SQL.
     - RecordSetType -> Tipo do recordset utilizado (0-Table, 1-Dynaset , 2-Snapshot)

    2- A seguir insira o controle DBList e atente para as seguintes propriedades:

     - RowSource     -> Nome do controle de dados que contém as informações usadas
                        para preencher a lista.
     - ListField     -> O nome do campo da origem dos dados a ser exibido na lista.

     Com essas propriedades definidas o DBList já será povoado.Vejamos as demais:

     - DataSource    -> Nome do controle de dados que contém o recordset de destino para
                        as informações.
     - DataField     -> Nome do campo de destino.(O que será atualizado.)
     - BoundColumn   -> Nome do campo que contém o valor a ser copiado para outra tabela.

    Conteúdo

### Exemplo de utilização - Cadastro de Funcionários.

    Vamos mostrar um exemplo de utilização típica do Controle DBList através de
    um projeto que tem por objetivo cadastrar os funcionários de uma empresa.

    Iremos cadastrar o código, nome , endereço e setor do funcionário ,para isso definimos
    o banco de dados CADFUN.MDB e a tabela tblcad com os campos indicados
    da seguinte forma:

       Tabela TblCad - CADFUN.MDB
       -----------------------------  Defina um indice para o campo codigo com
       Campo      Tipo       Comp.    nome de codigo
       -----------------------------
       Codigo     Long       -        Defina um indice para o campo nome com o
       Nome       Text       40       nome de nome
       Endereco   Text       40
       Setor      Text       12
       -----------------------------

Nosso formulário em tempo de projeto terá a aparência da figura 1.0.

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

    -1 data control

    -1 Dblist

    -1 Frame

    -3 Labels

    -3 Textbox

    -1 CommandButton

-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 frmcad. --------------------------------------------------------------------------- Objeto Propriedade Configuração --------------------------------------------------------------------------- Form Name frmcad Caption "Cadastro de Funcionários" --------------------------------------------------------------------------- Data Name Data1 Caption Data1 Visible False --------------------------------------------------------------------------- DBlist Name DBlist1 RowSource Data1 MatchEntry 0 - Basic Matching --------------------------------------------------------------------------- CommandButton Name Command1 Caption &Sair --------------------------------------------------------------------------- TextBox Name Text1 Text " --------------------------------------------------------------------------- TextBox Name Text2 Text " --------------------------------------------------------------------------- TextBox Name Text3 Text " --------------------------------------------------------------------------- Label Name Label1 Caption Código AutoSize True --------------------------------------------------------------------------- Label Name Label2 Caption Nome AutoSize True --------------------------------------------------------------------------- Label Name Label3 Caption Endereço AutoSize True --------------------------------------------------------------------------- Frame Caption Funcionarios Name Frame1 --------------------------------------------------------------------------- Conteúdo

### Código do Projeto - Cadastro de Funcionários.

Vejamos agora o código comentado para cada evento do nosso projeto.

    - Código da seção General Declarations do form.

      Dim ws as Workspace
      Dim db as DataBase
      Dim tblcad as Recordset

    - Código do evento Form Load que ocorre na carga do formulário.

    Private Sub Form_Load()

      'define area de trabalho
      Set area = DBEngine(0)
      'abre banco de dados
      Set db = area.OpenDatabase(App.Path & "\cadfun.mdb")
      'abre tabela que será origem dos dados
      Set tblcad = db.OpenRecordset("tblcad", dbOpenTable)
      'define o indice ativo
      tblcad.Index = "nome"

      'configura propriedades do Data Control
      Data1.DatabaseName = App.Path & "\cadfun.mdb"
      Data1.RecordSource = "SELECT nome FROM tblcad ORDER BY nome"
      Data1.Refresh
      Set rsdata = Data1.Recordset

      'posiciona o ponteiro no primeiro registro
      rsdata.MoveFirst

      'configura propriedades do DBList
      DBList1.ListField = "Nome"
      DBList1.BoundText = rsdata!nome

      'carrega as caixas de texto com os valores do registro atual
      load_recs DBList1.BoundText

    End Sub

    -Código da função que carrega os controles com os dados.

    Public Sub load_recs(strnome As String)
      'busca nome selecionado na tabela
       tblcad.Seek "=", strnome

       'se achar então carrega os controles
       If Not tblcad.NoMatch Then
          Text1 = tblcad("codigo")
          Text2 = tblcad("nome")
          Text3 = tblcad("endereco")
       End If

    End Sub

    -Código do evento Click de DBList.

    Private Sub DBList1_Click()
      'chama a procedure load_recs passando o parametro selecionado de DBlist.
      load_recs DBList1.BoundText
    End Sub

    BoundText é o valor retornado por BoundColumn após cada seleção na lista de opções.

    Note que com a propriedade Match Entry definida para
    0 - Basic Matching  ao  pressionarmos uma tecla nos deslocamos
    para o nome que começa pela letra digita,  e os controles são
    carregados com os dados automáticamente, tudo isso com pouco código.

    -Ao executar a aplicação teremos algo como a tela da figura 2.0 abaixo:

fig 2.0

Conteúdo

### Pesquisa Dinâmica usando DBLIST.

Bem, agora iremos ver mais uma aplicação usando DBLIST. Vamos aproveitar o projeto anterior e incluir mais uma caixa de texto acima do controle DBLIST, conforme figura 3.0 abaixo:

fig 3.0

Queremos que a medida que se digita um nome para pesquisa na Caixa de texto a Caixa de listagem seja preenchida com os nomes do banco de dados que coincidem com as letras digitadas, ou seja, se digitarmos 'A' será mostrada na Caixa de Listagem todos os nomes que comecem com A , e assim por diante. Para isso iremos fazer as seguinte alterações:
- Altere a propriedade RecordsetType do Controle de dados para 1-Dynaset
- Acrescente o rótulo - Digite o nome para Pesquisa acima da Caixa de texto text1.
- Defina a propriedade ListField da Caixa de Listagem para nome.
- Para as Caixas de Texto defina a propriedade DataSource como DATA1, e a propriedade DataField como nome, endereco e setor respectivamente para text2, text3, e text4. Agora só falta inserir o código abaixo para cada evento descrito:

    - Código da seção General Declarations do form.

    Option Explicit
    Dim DB As Database

    - Código do evento Form Load que ocorre na carga do formulário.

    Private Sub Form_Load()
     Set DB = DBEngine.Workspaces(0).OpenDatabase(app.path "\cadfun.mdb")
     Data1.RecordSource = "SELECT nome,endereco,setor FROM tblcad ORDER BY nome"
     Data1.Refresh
    End Sub

    - Código do evento Change da Caixa de Texto text1.

    Private Sub Text1_Change()
       Dim SQL As String
       Dim criterio As String
       criterio = Chr$(39) & Text1.Text & "*" & Chr(39)
       SQL = "SELECT nome,endereco,setor FROM tblcad WHERE nome LIKE " & criterio
       Data1.RecordSource = SQL
       Data1.Refresh
    End Sub

Se você fez tudo certo, ao digitar a letra A na Caixa de texto text1 o sistema irá preencher a Caixa de listagem ( DBLIST1 ) com todos os nomes que comecem com A , conforme figura 4.0 abaixo:

fig 4.0

Até mais... Conteúdo

Retorna