Conteúdo

Utilização da Caixa de Listagem Vinculada aos dados: 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