Neste artigo estarei abordando alguns conceitos básicos ; vou mostrar como realizar algumas tarefas que podem ser simples para quem já tem uma boa noção da linguagem mas que podem ajudar muito quem esta começando. Neste artigo iremos mostrar :
Deu para notar que embora simples podemos extrair muita coisa da nossa aplicação. Vamos a trabalho...
Introdução
Vamos começar dando uma olhada na cara do projeto em sua fase de desenvolvimento. Veja o layout da aplicação abaixo:
![]() |
- Os
controles usados neste projeto são :
|
O projeto possui um formulário chamado frmGrids.frm e um módulo chamado ModGrids.bas e acessa a base de dados Busca.mdb . (Esta base de dados é uma base de dados Access 2000 ). Iremos acessar os dados da tabela Employees cuja estrutura é a seguinte:
username |
text |
Department |
text |
ContacPerson |
text |
Vamos usar o arquivo Busca.avi , que consiste em uma animação de uma lanterna procurando algo , exibindo-o quando o usuário clicar no botão para efetuar uma pesquisa na base dados. Para isto vamos usar o controle Animation.
Vamos começar a comentar o código pelo arquivo - ModGris.bas :
1-) A seção - General Declarations - do módulo tem o seguinte código :
Option Explicit 'função API para dar uma pausa na aplicação Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'constantes usadas para nomear os controles Public Const Cap1 = "Controles Grids no modo Não Vinculado com Busca" Public Const Cap2 = "Digite Texto para Busca >>" Public Const Cap3 = "Procurar" Public Const Cap4 = "Sair" Public Const Cap41 = "Parar" Public Const Cap5 = "Empregados" Public Const Cap6 = "Controle MSFlex Grid" Public Const Cap7 = "Controle Data Grid " Public Const Cap8 = "Busca por Nome" Public Const Cap9 = "Busca por Setor" Public Const Cap10 = "Busca por Contato" 'Variavel para o banco de dados Public cnxnObj As Object Public rstObj As Object |
Esta seção geralmente contém as variávels que devem ser visíveis em todo o projeto. Ele começa começa com a declaração : Option Explicit ; esta declaração irá nos obrigrar a declarar todas as variáveis que vamos utilizar no projeto.
A seguir declaramos a função API - Sleep - ela é usada para dar uma pausa no processamento. O argumento da função é dado em milisegundos onde : 1000 milisegundos = 1 segundo
Definimos as constantes Publicas cap1 a cap10 atribuindo a cada uma os textos que serão usados para identificar os controles Labels e os botões de comando usados no projeto.
As variáveis públicas : cnxnObj e rstObj são declaradas com do tipo objeto e serão usadas para criar a conexão e recordset respectivamente. (Aqui usamos a ligação tardia, que será explicada mais adiante)
2-) A seguir veremos o código da rotina - Main(). Esta rotina será executa no início da aplicação. Definimos isto nas propriedades do projeto , opção Project do menu do VB opção : nome_projeto Properties opção : Startup Object.
Sub Main() Load frmGrids frmGrids.Show End Sub |
- Load frmGrids carrega
o formulário : frmGrids - frmgrids.Show - exibe o formulário carregado |
3- O procedimento - AbrirBDAccess - cria uma conexão com o banco de dados - Busca.mdb.
Public Sub AbrirBDAccess()
Dim ConectaAccess As String
Dim strArquivo As String
Dim strLocal As String
strArquivo = "Busca.mdb"
strLocal = App.Path
Set cnxnObj = CreateObject("ADODB.Connection")
ConectaAccess = "Driver={Microsoft Access Driver (*.mdb)};" & _
"Dbq=" & strArquivo & ";" & _
"DefaultDir=" & strLocal & ";" & _
"Uid=Admin;Pwd=;"
cnxnObj.Open ConectaAccess
End Sub
|
Observe que usamos a notação : Set cnxnObj = CreateObject("ADODB.Connection")
com isto não precisamos referênciar no projeto a biblioteca ADO . Para fazer isto tivemos que declarar a variável cnxnObj como sendo do tipo Object. A isto chamamos de ligação tardia. Como não sabemos o tipo de objeto que vamos utilizar usamos a declaração genérica. Leia mais sobre isto no artigo : VB - Automação OLE - Usando Early Binding e Late Binding.
A string de conexão ConectaAccess utiliza um driver ODBC para realizar a conexão : "Driver={Microsoft Access Driver (*.mdb)};"
Com isto criamos uma conexão a base de dados Access 2000 - busca.mdb. Para substituir o driver ODBC por um provedor OLE DB substitua a string de conexão ConectaAcces como indicado no quadro abaixo:
| ConectaAccess
= "Driver={Microsoft
Access Driver (*.mdb)};"
& _ "Dbq=" & strArquivo & ";" & _ "DefaultDir=" & strLocal & ";" & _ "Uid=Admin;Pwd=;" |
Driver ODBC |
| ConectaAccess = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & strLocal & strArquivo | Provedor OLE DB |
Obs: A conexão usando um provedor OLE DB é mais rápida que usando um driver ODBC.
4- O procedimento - AbrirRecordsetAccess - cria um recordset do tipo ADO. Note que aqui também usamos o código: Set rstObj = CreateObject("ADODB.Recordset"). Para saber mais Leia o artigo: ADO - Otimizando a sua conexão nos detalhes.
Public Sub AbrirRecordSetAccess(strSQL As String)
Set rstObj = CreateObject("ADODB.Recordset")
rstObj.Open strSQL, cnxnObj, 1, 1, 1
End Sub
|
Agora vamos ao código do formulário - frmGrids :
1- Na seção General Declarations temos a declaração das variáveis usadas no formulário:
Option Explicit Dim I As Integer Dim strTextoBusca As String Dim strBusca As String Dim FNome As Boolean Dim FSetor As Boolean Dim FContato As Boolean |
2- No evento Load do formulário atribuimos os textos de identificação aos controles ; abrimos o banco de dados ; abrimos o recordset passando a instrução SQL e preenchemos os grids - DataGrid e MSFlexGrid.
Private Sub Form_Load()
'atribui os textos de identificação dos controles
frmGrids.Caption = Cap1
frmGrids.WindowState = 0
lblBusca.Caption = Cap2
cmdBusca.Caption = Cap3
cmdParar.Caption = Cap4
lblMsFlexGrid.Caption = Cap6
lblDataGrid.Caption = Cap7
Animation1.Visible = False
optNome.Caption = Cap8
optSetor.Caption = Cap9
optContato.Caption = Cap10
optNome.Value = True
' abre o banco de dados
Call AbrirBDAccess
Call AbrirRecordSetAccess("SELECT * FROM Employees Order By UserName")
Call PreencherMSFlexGrid
Call PreencherDataGrid
End Sub
|
3- Abaixo o código da rotina - PreencherMSFlexGrid - que irá preencher com dados o MSFlexGrid.
Sub PreencherMSFlexGrid()
MSFlexGrid1.Cols = 4
MSFlexGrid1.ColWidth(0) = 500
MSFlexGrid1.TextMatrix(0, 0) = "Sr.No"
For I = 0 To rstObj.Fields.Count - 1
MSFlexGrid1.ColAlignment(I) = vbCenter
MSFlexGrid1.ColWidth(I + 1) = 1500
MSFlexGrid1.TextMatrix(0, I + 1) = rstObj.Fields(I).Name
Next
MSFlexGrid1.Rows = rstObj.recordcount + 1
I = 1
Do While Not rstObj.EOF
MSFlexGrid1.TextMatrix(I, 0) = I
MSFlexGrid1.TextMatrix(I, 1) = rstObj(0) 'username
MSFlexGrid1.TextMatrix(I, 2) = rstObj(1) 'Department
MSFlexGrid1.TextMatrix(I, 3) = rstObj(2) 'ContactPerson
I = I + 1
rstObj.MoveNext
Loop
End Sub
|
Obs: para saber mais sobre as propriedades do MSFlexGrid leia o artigo: Utilizando o controle MSFlexGrid e MSHFlexGrid com ADO
4- Agora temos o código que preenche o DataGrid -PreencherDataGrid() - bem mais simples. Apenas damos nome ao cabeçalho de cada coluna e atribuimos o objeto recordset a propriedade DataSource do controle dando a seguir um Refresh.
Sub PreencherDataGrid() DataGrid1.Caption = Cap5 DataGrid1.Columns.Add (0) For I = 0 To rstObj.Fields.Count - 1 DataGrid1.Columns(I).Caption = rstObj.Fields(I).Name Next Set DataGrid1.DataSource = rstObj DataGrid1.Refresh End Sub |
5- O código do botão - Procurar - é dado abaixo :
Private Sub cmdBusca_Click()
On Error GoTo ErrorHandler ' tratamento de erros
If txtBusca = "" Or IsNumeric(txtBusca.Text) Then
MsgBox "Informe um texto alfanumérico válido !", vbCritical, "Erro"
txtBusca.Text = ""
txtBusca.SetFocus
Exit Sub
End If
If cmdParar.Caption = Cap4 Then
cmdParar.Caption = Cap41
Screen.MousePointer = vbHourglass
Animation1.Visible = True
Animation1.AutoPlay = True
Animation1.Open App.Path & "/Busca.avi"
Animation1.Play (10)
Sleep (5000)
strTextoBusca = Trim(txtBusca.Text)
rstObj.Close
Set rstObj = Nothing
If FNome = True Then
strBusca = "SELECT * FROM Employees where UserName Like '" & strTextoBusca & "%' Order By UserName"
FSetor = False
FContato = False
End If
If FSetor = True Then
strBusca = "SELECT * FROM Employees where Department Like '" & strTextoBusca & "%' Order By Department"
FNome = False
FContato = False
End If
If FContato = True Then
strBusca = "SELECT * FROM Employees where ContactPerson Like '" & strTextoBusca & "%' Order By ContactPerson"
FNome = False
FSetor = False
End If
Call AbrirRecordSetAccess(strBusca)
MSFlexGrid1.Refresh
Call PreencherMSFlexGrid
DataGrid1.Refresh
Call PreencherDataGrid
Animation1.Visible = False
Screen.MousePointer = vbDefault
cmdParar.Caption = Cap4
End If
Exit Sub
ErrorHandler: 'inicio do tratamento de erros MsgBox "Erro No. :" & Err.Number & vbCr & " Descrição :" & Err.Description Animation1.Visible = False Screen.MousePointer = vbDefault Resume ' retorna a execução para a mesma linha onde ocorreu o erro cnxnObj.Close Set cnxnObj = Nothing End Sub |
1- a primeira coisa que fazemos é ativar o tratamento de erros :- On Error GoTo ErrorHandler
2- a seguir verificamos se o usuário informou um valor válido para buscar :
If txtBusca =
"" Or IsNumeric(txtBusca.Text) Then
MsgBox "Informe um texto alfanumérico válido !",
vbCritical, "Erro"
txtBusca.Text = ""
txtBusca.SetFocus
Exit Sub
End If
3- Ao clicar no botão Procurar , usamos o controle Animation para exibir um video de uma lanterna procurando algo(arquivo busca.avi) ; o código é o seguinte:
| 1
Animation1.Visible = True 2 Animation1.AutoPlay = True 3 Animation1.Open App.Path & "/Busca.avi" 4 Animation1.Play (10) 5 Sleep (5000) |
|
O Controle Animation utiliza os seguintes comandos para realizar suas operações básicas :
O comando Play possui ainda três argumentos : repeat , start e stop que determinam quantas vezes o arquivo será executado , em qual frame será iniciada a execução e onde a execução será finalizada. Se o argumento repeat não for informado o arquivo será executado de forma ininterrupta. Exemplos:
a - Animation1.Play (toca o arquivo de forma ininterrupta)
b -
Animation1.Play 10, 5, 15
(executa
o arquivo 10 vezes , do sexto ao decimo sexto frame)
4- O código abaixo irá construir
a instrução SQL conforme
o botão de opção que o usuário clicar:
Nome , Setor ou Contato.
If FNome = True Then strBusca = "SELECT * FROM Employees where UserName Like '" & strTextoBusca & "%' Order By UserName" FSetor = False FContato = False End If If FSetor = True Then strBusca = "SELECT * FROM Employees where Department Like '" & strTextoBusca & "%' Order By Department" FNome = False FContato = False End If If FContato = True Then strBusca = "SELECT * FROM Employees where ContactPerson Like '" & strTextoBusca & "%' Order By ContactPerson" FNome = False FSetor = False End If |
5- A seguir abrimos o recordset usando a instrução SQL(strBusca) e preenchemos cada grid com os dados.
|
Call AbrirRecordSetAccess(strBusca) MSFlexGrid1.Refresh Call PreencherMSFlexGrid DataGrid1.Refresh Call PreencherDataGrid |
6- Tornamos o controle Animation1 invisivel e atribuimos o texto definido em Cap4 ao botão de comando.
Animation1.Visible
= False
Screen.MousePointer = vbDefault
cmdParar.Caption = Cap4
7- No tratamento de erros exibimos o número do erro e sua descrição , tornamos o controle Animation1 invisivel , retornamos para linha onde o erro ocorreu e fechamos os objetos Connection e recordset.
ErrorHandler:
'inicio do tratamento de erros
MsgBox
"Erro No. :" & Err.Number & vbCr & "
Descrição :" & Err.Description
Animation1.Visible = False
Screen.MousePointer = vbDefault
Resume ' retorna a execução
para a mesma linha onde ocorreu o erro
cnxnObj.Close
Set cnxnObj = Nothing
Ao executar o projeto , informar um Nome e clicar no botão procurar teremos os seguinte resultado:
![]() |
![]() |
| Iniciando a busca | O resultado da busca |
Moleza , não é mesmo ...até a
próxima...![]()
|
Veja os
Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique
e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ? |
Gostou ?
Compartilhe no Facebook
Compartilhe no Twitter
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
VB6 - DataGrid, MSFlexGrid e alguns conceitos básicos. - Macoratti.net
VB .NET - DataGridView - Selecionando e exibindo ... - Macoratti.net