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:

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()
    frmprocuraprodutos.Show vbModal
End Sub
 

Private Sub Command2_Click()
      frmprocuracategorias.Show vbModal
End Sub

 

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