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