Visual Basic 6 - Acessando e filtrando dados com DAO (para novatos) |
No artigo de hoje eu vou recordar como podemos acessar uma base de dados MS Access , navegar pelos registros e filtrar dados usando a tecnologia DAO. |
A ADO - Data Access Objects (DAOs) e a
Open Database Connectivity (ODBC) são APIs que lhe dão a capacidade de
escrever aplicações que são independentes de qualquer sistema de gerenciamento
de banco de dados específico (DBMS).
A DAO é familiar para os programadores que acessam banco de dados usando o
Microsoft Access ou Microsoft Visual Basic e usa o mecanismo de banco de dados
Microsoft Jet para fornecer um conjunto de objetos de acesso a dados. Os
principais objetos usados são :
- database
- tabledef
- querydef
- recordset
O objeto Recordset representa um conjunto de registros de uma tabela ou o
conjunto de registros resultante de uma consulta SQL e contém a coleção
Fields que contém o objeto Field que representa uma coluna de dados
de um Recordset.
A DAO funciona melhor com arquivos MDB como os criados pelo Microsoft Access, mas você também pode acessar fontes de dados ODBC através de DAO e o motor de banco de dados Microsoft Jet.
Este artigo é para quem esta iniciando ou precisa usar o Visual Basic 6 para acessar um banco de dados usando DAO. Ele é bem simples e mostra como usar os objetos DataBase e Recordset para acessar, navegar e filtrar dados em uma aplicação Visual Basic.
Recursos usados:
Definindo o banco de dados
A primeira coisa a fazer é definir o banco de dados e a tabela que vamos acessar.
Neste exemplo eu vou acessar uma tabela Funcionarios do banco de dados Cadastro.mdb. Esse banco de dados foi criado no MS Access e será fornecido no projeto.
Abaixo vemos a estrutura da tabela Funcionarios:
Note que a tabela é bem simples mas você pode acessar qualquer outra tabela com mais campos definidos.
Criando o projeto no Visual Basic 6
Abra o Microsoft Visual Basic 6, selecione o projeto do tipo STANDARD EXE e clique no botão Abrir:
Salve o projeto como Funcionarios e o formulário padrão como Main_Form.
No menu Project clique em References e inclua as referências como indica a figura a seguir:
Clique novamente no menu Project e a seguir em Components e marque o componente conforme exibido na figura abaixo:
Agora no formulário padrão Main_Form inclua a partir da ToolBox os seguintes controles :
Disponha os controles no formulário conforme o leiaute da figura a seguir:
No início do formulário vamos definir as variáveis objeto Database e Recordset:
Dim db As DAO.Database
Dim rsFunci As DAO.Recordset
A seguir no evento Load do formulário vamos definir o código abaixo:
Private Sub Form_Load()
On Error Resume Next
lblDataHora.Caption = Now()
Set db = OpenDatabase(App.Path & "\Cadastro.mdb")
Set rsFunci = db.OpenRecordset("SELECT * FROM Funcionarios")
End Sub
|
Neste código estamos atribuindo a data e a hora á Label lblDataHora e a seguir definindo o banco de dados Cadastro.mdb e criando o recordset rsFunci com todos os registros da tabela Funcionarios.
No evento Click do botão de comando - Exibir Registro de Funcionarios - inclua o seguinte código :
rivate Sub cmdFuncionarios_Click()
On Error Resume Next
'exibe o frame
frmFunci.Visible = True
'exibe o codigo e nome do funcionario nas caixas de texto do formulario
With rsFunci
txtId.Text = .Fields("id")
txtNome.Text = .Fields("nome")
.MoveFirst
.MoveLast
.MoveFirst
End With
frmProcurar.Enabled = True
lblRegistros.Caption = "Número de Funcionários : " & rsFunci.AbsolutePosition + 1 & " de " & rsFunci.RecordCount
End Sub
|
No evento Click do botão Procurar inclua o código a seguir:
Private Sub cmdProcurar_Click()
'se o frame esta visivel então exibe a lista de funcionarios
If frmFunci.Visible = True Then
Call Procurar(txtProcurar, lstFuncionarios, rsFunci, "nome")
End If
End Sub
|
Neste código estamos chamando a rotina Procurar() passando TextBox, o ListBox , o recordset e o campo a ser procurado.
Vamos então criar a rotina Procurar em um módulo no projeto de forma que seja visível a todos no projeto.
No menu Project clique em Add Module e a seguir clique no botão Abrir:
Salve o módulo com o nome modProcurar.bas.
Defina a rotina Procurar no módulo com o seguinte código:
Sub Procurar(txtbox As TextBox, lstbox As ListBox, rs As Recordset, campo As String)
lstbox.Clear
'procura pelo campo informado no textbox
rs.FindFirst campo & " like '" & txtbox.Text & "*'"
If rs.NoMatch Then
MsgBox "Nenhum registro foi encontrado", vbExclamation, "Procurar"
Exit Sub
End If
Do Until rs.NoMatch = True
Main_Form.MousePointer = vbHourglass
rs.FindNext campo & " like '" & txtbox.Text & "*'"
lstbox.AddItem rs.Fields(campo)
Main_Form.lblinfo.Caption = "O número de registros similares ao critério informado << " _
& UCase(txtbox.Text) & " >> é igual " & lstbox.ListCount & " Registros."
Loop
Main_Form.MousePointer = vbDefault
End Sub
|
Neste código usamos os seguintes métodos do objeto Recordset:
Nota: Temos também os métodos FindPrevious e FindLast.
E estamos incluindo os registros que atendem o critério de busca no ListBox - lstbox.
Você pode usar o evento Click do controle ListBox e tratar quando o usuário seleciona um item da listbox. A seguir um exemplo que trata este evento e exibe o nome do cliente em um Msgbox:
Private Sub lstFuncionarios_Click()
MsgBox (lstFuncionarios.Text)
End Sub
|
Vamos agora definir o código no evento Click de cada um dos botões de comando para navegar pelos registros:
Private Sub cmdPrimeiro_Click()
On Error Resume Next
With rsFunci
.MoveFirst
txtId.Text = .Fields("id")
txtNome.Text = .Fields("nome")
If .BOF Then
.MoveNext
End If
End With
lblRegistros.Caption = "Número de Funcionários : " & rsFunci.AbsolutePosition + 1 & " de " & rsFunci.RecordCount
End Sub
Private Sub cmdAnterior_Click()
On Error Resume Next
With rsFunci
.MovePrevious
txtId.Text = .Fields("id")
txtNome.Text = .Fields("nome")
If .BOF Then
.MoveFirst
End If
End With
lblRegistros.Caption = "Número de Funcionários : " & rsFunci.AbsolutePosition + 1 & " de " & rsFunci.RecordCount
End Sub
Private Sub cmdProximo_Click()
On Error Resume Next
With rsFunci
.MoveNext
txtId.Text = .Fields("id")
txtNome.Text = .Fields("nome")
If .EOF Then
.MoveLast
End If
End With
lblRegistros.Caption = "Número de Funcionários : " & rsFunci.AbsolutePosition + 1 & " de " & rsFunci.RecordCount
End Sub
Private Sub cmdUltimo_Click()
On Error Resume Next
With rsFunci
.MoveLast
txtId.Text = .Fields("id")
txtNome.Text = .Fields("nome")
If .EOF Then
.MovePrevious
End If
End With
lblRegistros.Caption = "Número de Funcionários : " & rsFunci.AbsolutePosition + 1 & " de " & rsFunci.RecordCount
End Sub
|
- MoveFirst:
- Movimenta o ponteiro do registro ativo para o primeiro registro do recordset aberto.
- MoveNext:
- Movimenta o ponteiro do registro ativo para o registro seguinte. Se não houver registro seguinte , você está no último registro, o flag de final de arquivo EOF será ativado.
- MovePrevious:
- Desloca o ponteiro do registro ativo para o registro anterior no recordset aberto. Se não houver registro anterior, você está no primeiro registro, o flag de início de arquivo BOF será ativado.
- MoveLast:
- Movimenta o ponteiro do registro ativo para o último registro do recordset aberto.
- Move n
- Desloca o ponteiro de registro n registros para frente (n positivo) ou para trás (n negativo) a partir do registro ativo no recordset aberto. Se o deslocamento levar o ponteiro de registro além dos limites do recordset ocorrerá um erro.
Para concluir temos o código do botão Sair:
Private Sub cmdSair_Click()
Unload Me
End
End Sub
|
Executando o projeto iremos obter o seguinte resultado:
Pegue o projeto completo aqui: Funcionarios_VB6.zip
Porque a palavra da cruz é loucura para
os que perecem; mas para nós, que somos salvos, é o poder de Deus.
1 Coríntios 1:18
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 ? |
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET
https://wiki.postgresql.org/wiki/Using_Microsoft_.NET_with_the_PostgreSQL_Database_Server_via_ODBC