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