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