VB6 - Usando Formulários de
Busca dinâmica
Neste artigo eu vou mostrar como você pode criar formulários para busca dinâmica de dados facilitando assim a vida do usuário.
O objetivo é o seguinte: Geralmente em formulário para cadastrar dados que podem ser previamente apresentados para que o usuário selecione sua opção, sendo que após fazer isto , os campos do formulário seriam preenchidos com os dados automaticamente.
Vamos supor que eu tenha um formulário de cadastro de produtos, conforme exibido a seguir. Ao invés de digitar o código do produto, o usuário poderá clicar no botão de comando ao lado do campo. Ao fazer isto um novo formulário será carregado com os dados da tabela Products e exibido para que o usuário possa selecionar os dados que deseja usar. Ele poderá fazer isto clicando duas vezes sobre o produto ou digitando um nome para busca dinâmica.
![]() |
![]() |
| fig 1.0 - O formulário para Cadastrar produtos | fig 2.0 -O formulário exibindo os dados dos produtos |
![]() |
![]() |
| fig 3.0 - Efetuando uma busca dinâmica | fig 4.0 -Após a seleção os campos do formulário são preenchidos. |
O processo se repete para os campos Categoria e Descrição que irá carregar um formulário exibindo os dados da tabela Categories para seleção do usuário.
O projeto contém um Modulo .bas e 3 formulários :
![]() |
Crie um novo projeto no Visual Basic do tipo STANDARD EXE e no formulário padrão altere o nome para frmprodutos e inclua no formulário os seguintes controles:
5 TetBox , 5 Labels 6 botões de comando ( fig 1.0) .(Os botões para incluir,alterar, excluir e sair são meramente ilustrativos.)
A seguir inclua no projeto via menu Project um módulo via opção Add Module.
Vamos incluir no módulo o código que irá definir as variáveis globais para a tabela , a conexão e o banco de dados. A seguir o código do módulo .bas.
Public banco As ADODB.Connection Public Tabela As ADODB.Recordset Public caminho As String Public Sub AcessoBD() Set banco = New ADODB.Connection banco.CursorLocation = adUseClient banco.Provider = "Microsoft.Jet.OleDB.4.0" banco.Open "Data Source = " & caminho End Sub Private Sub Main() caminho = "d:\teste\northwind.mdb" AcessoBD If App.PrevInstance = True Then MsgBox "O sistema já está em execução!", 48, "Atenção!" End End If frmprodutos.Show End Sub
|
Você deverá definir no seu projeto em Project Properties que a opção Startup Object esteja definida para : Sub Main.
O código acima define o caminho do banco de dados e chama a rotina AcessoBD que abrira uma conexão usando ADO - Activex Data Object - para se conectar com o banco de dados northwind.mdb.
O código também verifica se já existe uma instância do projeto rodando e chama na sequência o formulário frmprodutos.
O código do formulário frmprodutos é bem simples , pois eu vou me ater somente a chamada dos formulário de busca dinâmica. Abaixo o código associado aos botões de comando :
|
Private Sub Command1_Click()
Private Sub Command2_Click() |
O primeiro formulário de busca dinâmica é o frmprocuraprodutos. Ele contém um objeto DataGrid , dois botões de comando e uma caixa de texto:
Vejamos o código por partes:
1- Na carga do formulário estou criando um recordset Tabela com os dados da tabela Products , note que estou selecionado somente os dados que interessam. A seguir os dados são exibidos no DataGrid.
| Private Sub
Form_Load() Set Tabela = New ADODB.Recordset Tabela.Open "Select ProductId, ProductName, UnitPrice From Products", banco Set gridProdutos.DataSource = Tabela End Sub |
2- Se o usuário clicar em um produto da relação exibida no grid duas vezes os dados irão preencher as caixas de texto do formulário frmprodutos. O código que faz isto esta no evento DblClick do DataGrid:
| Private Sub
gridProdutos_DblClick() gridProdutos.Col = 0 frmprodutos.txtCodigoProduto.Text = gridProdutos.Text gridProdutos.Col = 1 frmprodutos.txtNomeProduto.Text = gridProdutos.Text gridProdutos.Col = 2 frmprodutos.txtPrecoProduto.Text = gridProdutos.Text Unload Me End Sub |
3- O usuário poderá ainda filtrar o resultado exibido no DataGrid digitando um critério na caixa de texto. Conforme ele vai digitando os dados vão sendo filtrados. Para selecionar basta clicar duas vezes no produto.
| Private Sub
txtcriterio_Change() Set Tabela = New ADODB.Recordset Tabela.Open "Select ProductId, ProductName, UnitPrice From Products where ProductName like '" & txtcriterio.Text & "%'", banco Set gridProdutos.DataSource = Tabela End Sub |
4- Uma questão importante é sempre fechar o recordset e liberar a memória usada. O evento Query_Unload sempre será executado quando o formulário for descarregado ou fechado. È o lugar ideal para colocar o código abaixo:
| Private Sub
Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Tabela.Close Set Tabela = Nothing End Sub |
O procedimento adotado para o formulário frmprocuracategorias é idêntico ao acima exposto.
Pegue o
projeto completo aqui :
formbusca.zip
Observe no código que eu estou abrindo a conexão com o banco de dados no início da carga do projeto. A seguir os recordsets são abertos e fechados. A aplicação não esta completa , foi criada apenas para mostrar a funcionalidade da busca dinâmica. Ao ser encerrada a aplicação deverá fechar a conexão com o banco de dados.
Eu sei
, é apenas VB, mas, eu gosto !!!
![]()
José Carlos Macoratti