 VB6 - Usando Formulários de 
Busca dinâmica
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
 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