CAPÍTULO
8
BANCOS DE DADOS
O Visual Basic
disponibiliza meios de se construir aplicativos de bancos
de dados de maneira rápida. De modo geral, bancos de
dados são conjuntos de tabelas, índices e relações
potencializados por algum driver de banco de dados. O VB
possibilita a conexão com os seguintes drivers:
- Microsoft Access;
- dBase III, IV e 5.0;
- FoxPro 2.0, 2.5 e
3.0;
- Paradox 3.x, 4.x e
5.x;
- ODBC.
Os bancos de dados do
VB são potencializados pelo Jet Engine, que é o mesmo
driver do Access. A figura 21 mostra a estrutura de um
banco de dados mdb na versão 2.5 do Jet Engine. Esta é
a versão de banco de dados do Visual Basic 4.0 e do
Access 2.0. Bancos de dados criados pelo Visual Basic 3.0
usam o Jet Engine 1.1 e somente serão totalmente
compatíveis com o Access 1.1.
Alguns termos merecem
definição:
- DBEngine: é um objeto que
representa o Jet Engine da MicroSoft e contém
todos os outros objetos de bancos de dados.
- Workspace: é um objeto que define
uma seção de trabalho do usuário. Quando um
banco de dados é iniciado, um Workspace default
é criado, com senha "" e nome "
Admin".
- DataBase: é o objeto banco de
dados por excelência;
- TableDef: representa a estrutura de
uma tabela, que pode conter vários campos
(Fields) e vários índices (Indexes);
- Field: representa um campo
dentro de uma tabela.
- Index: representa um índice
dentro de uma tabela.
- QueryDef: representa a estrutura de
uma consulta (query) em uma tabela.
- RecordSet: representa uma tabela ou
parte dela. O Recorset pode ser do tipo Table
(Tabela), Dynaset ou SnapShot (Instantâneo).
Dynaset é uma estrutura mais versátil do que
uma tabela, podendo ser gerado por uma consulta
ou uma declaração SQL. Snapshot é o tipo mais
restritivo de tabelas e seus dados não pode ser
alterados pelo usuário.
O
CONTROLE DE DADOS
A maneira mais fácil de
manipular bancos de dados é por meio do Data Control, ou
Controle de Dados. Este controle, disponível desde a
versão 2.0, abre um banco de dados, conecta-se a uma
tabela especificada e mostra o conteúdo dos campos em
"controles ligados".
Para usar o Controle de
Dados, proceda da seguinte maneira:
- Desenhe o Controle de
Dados no formulário;
- Na janela de
propriedades, especifique a propriedade
DataBaseName. Esta propriedade deve conter um
banco de dados já existente, com todo o caminho;
- Especifique a
propriedade RecordSource, que deve corresponder a
uma tabela válida do banco de dados;
- Desenhe uma caixa de
texto para cada campo da tabela;
- Defina a propriedade
DataSource de cada caixa de texto como sendo
Data1 (ou o nome do Controle de Dados).Da mesma
forma, especifique a propriedade DataField de
cada caixa de texto como uma campo distinto da
tabela.
Figura 21
Neste ponto, o nosso
gerenciador de banco de dados já é funcional, ou seja,
já podemos navegar pelos registros, embora não seja
possível fazer muito mais do que isto
As caixas de texto
são denominados "Controles Ligados" (Bound
Controls). Outros controles ligados são os Rótulos, as
Caixas de Figuras, Caixas de Imagem, Caixas de
Verificação, Painéis e Quadros (Frames). A versão 4.0
oferece, ainda, a DBGrid (Grade ligada), a DBCombo e a
DBList.
Se você não tem uma
banco de dados, a maneira mais fácil de criá-lo é
usando o Gerenciador de Dados (Data Manager), que vem
junto com o Visual Basic. Este aplicativo pode ser
encontrado no menu Add-Ins (suplementos) e é bastante
auto-explicativo. Comece escolhendo a opção File | New e escolha o banco de dados que
deseja criar. A seguir, crie tantas tabelas quantas forem
necessárias.
UMA
AGENDA DE ENDEREÇOS
O VB pode ser usado
para criar um formulário simples do tipo agenda. Você
precisará de um banco de dados com os seguintes campos:
- Nome;
- Endereço;
- Telefone;
- FAX;
- E-mail;
- Cidade;
- Estado;
- CEP.
Este banco de dados pode
ser criado em Access ou por meio do Data Manager.
Denomine este banco de dados de AGENDA.MDB. Será
necessário criar apenas uma tabela dentro deste banco de
dados, a qual chamaremos de NOMES.
Para exibir os dados
de AGENDA.MDB, inicie um novo projeto e posicione os
seguintes controles, conforme indicado na figura 22.
- oito rótulos;
- oito caixas de texto;
- cinco botões de
comando;
- um controle de dados.
Uma aparência mais
profissional pode ser conseguida dispondo-se os controles
dentro de paineis convenientemente configurados (não
mostrados na figura).
Figura 22 - o formulário
frmAgenda
Os próximos passos
consistem em conectar o Controle de Dados ao banco de
dados e as caixas de texto ao Controle de Dados:
- Na janela de
propriedades de Data1, especifique a propriedade
DataBaseName para AGENDA.MDB, incluindo todo o
caminho;
- Especifique a
propriedade RecordSource de Data1, que deve
corresponder à tabela Nomes;
- Defina a propriedade
DataSource de cada caixa de texto como sendo
Data1. Da mesma forma, especifique a propriedade
DataField de cada caixa de texto como o campo
correspondente
Se você rodar o programa,
perceberá que ele já é funcional, ou seja, o Controle
de Dados cuida da automação da "navegação pelos
registros". Entretanto, ainda não há dados na
tabela. Poderíamos usar o Data Manager para prencher a
tabela, mas o nosso programa será capaz de fazer isso
por si mesmo.
O código para
adicionar um registro à tabela usa o método AddNew do
objeto RecordSet, o qual é automaticamente criado pelo
Controle de Dados.
Private
Sub cmdAdicionar_Click()
Data1.Recordset.AddNew
txtNome.Setfocus
End
Sub
Para
deletar um registro devemos usar o método Delete.
Contudo, após a deleção o ponteiro permanece sobre um
registro inválido. Além disso, é necessário
verifiacar se há registro a ser deletado. Estes
procedimentos, que são bastante gerais, são
implementados com as funções EOF (End Of File ou Fim do
Arquivo) e BOF
(Begining of File ou Início do Arquivo).
Private
Sub cmdDeletar_Click()
If (MsgBox("Quer deletar o registro ?", 36) =
6) Then
If Data1.Recordset.EOF Or Data1.Recordset.BOF Then
Beep
MsgBox "Não há registro a deletar !"
Else
Data1.Recordset.Delete
End If
Data1.Refresh
txtNome.Setfocus
End If
End
Sub
O método Refresh é
invocado para se reconstruir a tabela após
modificações. O ponteiro é enviado para o primeiro
registro. A reconstrução é feita a partir de
informações contidas no arquivo em disco. Portanto,
informações não salvas serão perdidas.
Private
Sub cmdRefresh_Click()
Data1.Refresh
txtNome.Setfocus
End
Sub
Para atualizar o registro
após a edição, basta usar o método UpdateRecord.
Private Sub
cmdUpdate_Click()
Data1.UpdateRecord
txtNome.Setfocus
End
Sub
Note que em todas as
procedures estamos usando o método Setfocus para definir
o foco na caixa de textos txtNome após a operação.
Caso contrário, o foco ficaria com o botão em questão.
Quando você navega pelos registros usando o Controle de
Dados, todas as alterações feitas são automaticamente
salvas. Se você quizer perguntar ao usuário se ele
desela salvar as alterações, coloque o seguinte trecho
no evento Validate de Data1:
Private
Sub Data1_Validate(Action As Integer, Save As Integer)
If Save = True Then 'Existem alterações a serem
salvas
If Action = vbDataActionMoveFirst Or
vbDataActionMovePrevious _
Or vbDataActionMoveNext Or vbDataActionMoveLast Then
If (MsgBox("Quer salvar as atualizações ?",
vbYesNo) = vbNo) Then
Save = False
End If
End If
End If
Screen.MousePointer = vbHourglass
End
Sub
O evento Validate repassa
dois parâmetros:
Action: descreve a ação que gerou o evento,
assumindo os valores da tabela a seguir:
Tabela 20
Action |
Valor |
Método gerador |
vbDataActionMoveFirst |
1 |
MoveFirst |
vbDataActionMovePrevious |
2 |
MovePrevious |
vbDataActionMoveNext |
3 |
MoveNext |
vbDataActionMoveLast |
4 |
MoveLast |
vbDataActionAddNew |
5 |
AddNew |
vbDataActionUpdate |
6 |
Update |
vbDataActionDelete |
7 |
Delete |
vbDataActionFind |
8 |
Find |
vbDataActionBookmark |
9 |
Propriedade bookmark definida |
vbDataActionClose |
10 |
Close |
vbDataActionUnload |
11 |
UnLoad do formulário |
Save: é verdadeiro se existem
alterações a ser salvas e falso caso contrário.
No Visual Basic 5.0, os
passos acima são brincadeira de criança, uma vez que o
próprio Data Manager constrói formulários baseados em
tabelas. Após criada a tabela, escolha a opção Utility | Data
Form Designer e
siga as instruções. Naturalmente, os botões são
criados com legendas em inglês, mas isto é fácil de
mudar. A disposição das caixas de texto é na vertical
e você terá que reposicioná-las a seu gosto.
Entretanto, muita coisa do código já está pronta e as
caixas de texto já aparecem ligadas ao Controle de
Dados.

MOVENDO-SE
PELOS REGISTROS
O Controle de Dados
oferece meios para nos movermos ao longo dos registros,
mas isto também pode ser feito por meio de código de
programação.
- Data1.RecordSet.MoveFirst: vai para o primeiro
registro;
- Data1.RecordSet.MoveLast: vai para o último
registro;
- Data1.RecordSet.MoveNext: vai para o próximo
registro;
- Data1.RecordSet.MovePrevious: vaia para o registro
anterior;
Para editar um registro,
devemos, antes prepará-lo para a edição, usando o
método Edit,
Data1.RecordSet.Edit
Data1.RecordSet.UpDate.
A
primeira linha prepara o registro para a edição. A
segunda grava as modificações feitas.
Você pode implementar
estas alterações em Agenda.vbp, adicionando quatro
botões (cmdInício, cmdPróximo, cmdAnterior e
cmdÚltimo) para realizar as ações do Controle de
Dados. Não se esqueça de inserir o código de
verificação de registro válido. Você poderá, então,
esconder o Controle de Dados (visible = false) e navegar
com os botões.
O Controle de Dados só
pode mostrar dados nos chamados "controles
ligados", que são so seguintes:
- DBCombo;
- DBList;
- DBGrid;
- Label;
- TextBox;
- CheckBox;
- ComboBox;
- ListBox;
- PictureBox;
- Image.
Em vez de usar o Controle
de Dados, pdemos declarar objetos de Bancos de Dados e
trabalhar com eles da mesma forma que trabalhamos com o
RecordSet de Data1. . Por exemplo, você pode declarar
uma variável Banco de Dados da seguinte maneira,
Dim BD As DataBase
Em seguida, você deve
abrir o banco de dados com o comando OpenDataBase,
Set BD = OpenDataBase
("AGENDA.MDB")
Para declarar e abrir
uma tabela (Table) proceda da seguinte maneira:
Dim Tabela As Table
Set Tabela =
BD!Nomes.OpenRecordSet(),
onde Nomes é uma tabela
válida do banco de dados aberto. Para
declarar e abrir um Dynaset, faça o seguinte:
Dim
Rec As RecordSet
Set Rec =
BD!Nomes.OpenRecordSet(dbOpenDynaSet)
Para abrir um SnapShot:
Dim
Snap As SnapShot
Set Snap =
BD!Nomes.OpenRecordSet(dbOpenSnapShot)
Copyright © 1998/1999 - Desenvolvido por
Alvaro Augusto de Almeida (isso significa que você pode
manter cópias para uso
particular, mas não para divulgação). Dúvidas e
sugestões serão bem vindas.
|