Sei sulla pagina 1di 8

8.

BANCOS DE DADOS

O Visual Basic disponibiliza meios de se construir aplicativos de bancos de dados de


maneira rpida. De modo geral, bancos de dados so conjuntos de tabelas, ndices e relaes
potencializados por algum driver de banco de dados. O VB possibilita a conexo 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 so potencializados pelo Jet Engine, que o mesmo driver do


Access. A figura 14 mostra a estrutura de um banco de dados mdb na verso 2.5 do Jet Engine.
Esta a verso 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 sero totalmente compatveis com o
Access 1.1.

Alguns termos merecem definio:

DBEngine: um objeto que representa o Jet Engine da MicroSoft e contm todos os outros
objetos de bancos de dados.
Worspace: um objeto que define uma seo de trabalho do usurio. Quando um banco de
dados iniciado, um Workspace default criado, com senha e nome Admin.
DataBase: o objeto banco de dados por excelncia;
TableDef: representa a estrutura de uma tabela, que pode conter vrios campos (Fields) e
vrios 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 (Instantneo). Dynaset uma estrutura mais verstil do que uma tabela,
podendo ser gerado por uma consulta ou uma declarao SQL. Snapshot o tipo mais restritivo
de tabelas e seus dados no pode ser alterados pelo usurio.

O CONTROLE DE DADOS

A maneira mais fcil de manipular bancos de dados por meio do Data Control, ou
Controle de Dados. Este controle, disponvel desde a verso 2.0, abre um banco de dados,
conecta-se a uma tabela especificada e mostra o contedo dos campos em controles ligados.

Para usar o Controle de Dados, proceda da seguinte maneira:

a) Desenhe o Controle de Dados no formulrio;


b) Na janela de propriedades, especifique a propriedade DataBaseName. Esta propriedade deve
conter um banco de dados j existente, com todo o caminho;
c) Especifique a propriedade RecordSource, que deve corresponder a uma tabela vlida do banco
de dados;
d) Desenhe uma caixa de texto para cada campo da tabela;
e) 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 14

Neste ponto, o nosso gerenciador de banco de dados j funcional, ou seja, j podemos


navegar pelos registros, embora no seja possvel fazer muito mais do que isto

As caixas de texto so denominados Controles Ligados (Bound Controls). Outros


controles ligados so os Rtulos, as Caixas de Figuras, Caixas de Imagem, Caixas de Verificao,
Painis e Quadros (Frames). A verso 4.0 oferece, ainda, a DBGrid (Grade ligada), a DBCombo e
a DBList.

Se voc no tem uma banco de dados, a maneira mais fcil 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
opo File | New e escolha o banco de dados que deseja criar. A seguir, crie tantas tabelas
quantas forem necessrias.
UMA AGENDA DE ENDEREOS
O VB pode ser usado para criar um formulrio simples do tipo agenda. Voc precisar de
um banco de dados com os seguintes campos:

Nome;
Endereo;
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 necessrio 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 15.

oito rtulos;
oito caixas de texto;
cinco botes de comando;
um controle de dados.

Uma aparncia mais profissional pode ser conseguida dispondo-se os controles dentro de
paineis convenientemente configurados (no mostrados na figura).

Figura 15 - o formulrio frmAgenda


reg. 1

reg. 2

Os prximos passos consistem em conectar o Controle de Dados ao banco de dados e as


caixas de texto ao Controle de Dados:

a) Na janela de propriedades de Data1, especifique a propriedade DataBaseName para


reg. n AGENDA.MDB, incluindo todo o caminho;
b) Especifique a propriedade RecordSource de Data1, que deve corresponder tabela Nomes;
c) 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 automao da navegao pelos registros. Entretanto, ainda no h dados na tabela.
Poderamos usar o Data Manager para prencher a tabela, mas o nosso programa ser capaz de
fazer isso por si mesmo.

O cdigo para adicionar um registro tabela usa o mtodo 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 mtodo Delete. Contudo, aps a deleo o
ponteiro permanece sobre um registro invlido. Alm disso, necessrio verifiacar se h registro a
ser deletado. Estes procedimentos, que so bastante gerais, so implementados com as funes
EOF (End Of File ou Fim do Arquivo) e BOF (Begining of File ou Incio do Arquivo), de acordo com
a figura 16 a seguir.

Figura 16

BOF = true

BOF = false
EOF = false

EOF = true

Private Sub cmdDeletar_Click()


If (MsgBox("Quer deletar o registro ?", 36) = 6) Then
If Data1.Recordset.EOF Or Data1.Recordset.BOF Then
Beep
MsgBox "No h registro a deletar !"
Else
Data1.Recordset.Delete
End If
Data1.Refresh
txtNome.Setfocus
End If
End Sub

O mtodo Refresh invocado para se reconstruir a tabela aps modificaes. O ponteiro


enviado para o primeiro registro. A reconstruo feita a partir de informaes contidas no arquivo
em disco. Portanto, informaes no salvas sero perdidas.

Private Sub cmdRefresh_Click()


Data1.Refresh
txtNome.Setfocus
End Sub

Para atualizar o registro aps a edio, basta usar o mtodo UpdateRecord.

Private Sub cmdUpdate_Click()


Data1.UpdateRecord
txtNome.Setfocus
End Sub

Note que em todas as procedures estamos usando o mtodo Setfocus para definir o foco
na caixa de textos txtNome aps a operao. Caso contrrio, o foco ficaria com o boto em
questo. Quando voc navega pelos registros usando o Controle de Dados, todas as alteraes
feitas so automaticamente salvas. Se voc quizer perguntar ao usurio se ele desela salvar as
alteraes, coloque o seguinte trecho no evento Validate de Data1:

Private Sub Data1_Validate(Action As Integer, Save As Integer)


If Save = True Then 'Existem alteraes a serem salvas
If Action = vbDataActionMoveFirst Or vbDataActionMovePrevious _
Or vbDataActionMoveNext Or vbDataActionMoveLast Then
If (MsgBox("Quer salvar as atualizaes ?", vbYesNo) = vbNo) Then
Save = False
End If
End If
End If
Screen.MousePointer = vbHourglass
End Sub

O evento Validate repassa dois parmetros:

Action: descreve a ao que gerou o evento, assumindo os valores da tabela a seguir:


Tabela 20

Action Valor Mtodo 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 formulrio

Save: verdadeiro se existem alteraes a ser salvas e falso caso contrrio.

No Visual Basic 5.0, os passos acima so brincadeira de criana, uma vez que o prprio Data
Manager constri formulrios baseados em tabelas. Aps criada a tabela, escolha a opo
Utility | Data Form Designer e siga as instrues. Naturalmente, os botes so criados com
legendas em ingls, mas isto fcil de mudar. A disposio das caixas de texto na vertical e
voc ter que reposicion-las a seu gosto. Entretanto, muita coisa do cdigo 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
tambm pode ser feito por meio de cdigo de programao.

Data1.RecordSet.MoveFirst: vai para o primeiro registro;


Data1.RecordSet.MoveLast: vai para o ltimo registro;
Data1.RecordSet.MoveNext: vai para o prximo registro;
Data1.RecordSet.MovePrevious: vaia para o registro anterior;

Para editar um registro, devemos, antes prepar-lo para a edio, usando o mtodo Edit,

Data1.RecordSet.Edit
Data1.RecordSet.UpDate.

A primeira linha prepara o registro para a edio. A segunda grava as modificaes feitas.

Voc pode implementar estas alteraes em Agenda.vbp, adicionando quatro botes


(cmdIncio, cmdPrximo, cmdAnterior e cmdltimo) para realizar as aes do Controle de Dados.
No se esquea de inserir o cdigo de verificao de registro vlido. Voc poder, ento, esconder
o Controle de Dados (visible = false) e navegar com os botes.

O Controle de Dados s pode mostrar dados nos chamados controles ligados, que so 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 varivel 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 vlida do banco de dados aberto.

Para declarar e abrir um Dynaset, faa 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)

Potrebbero piacerti anche