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