Você está na página 1de 118

Microsoft Visual Basic 6

Introduo
Quando se pensa em Windows, algumas palavras nos vm cabea, tais como: interface grfica, objetos,
cones, janelas, mouse, botes, etc., e, como o prprio nome diz, janelas. Alis, uma verdadeira confuso de
janelas: maximizadas, restauradas ou minimizadas; pop-ups, modais ou no-modais; caixas de mensagem
ou de dilogo; janelas mes e janelas filhas. Logicamente, ento, o ponto de partida para a programao em
ambiente Windows s poderia ser uma janela, pois atravs dela que o usurio vai interagir com um sistema.
O Microsoft Visual Basic um pacote para desenvolvimento de aplicaes visuais para ambiente Windows
baseado na linguagem de programao Basic. orientado a eventos, o que quer dizer que trata ocorrncias
que do incio a alguma rotina de trabalho: o programa fica parado at que algo acontea. Quer dizer tambm
que ele permite o uso de objetos, mas no a sua criao, pois no uma linguagem orientada a objetos.
Objetos so estruturas que combinam propriedades e mtodos. As propriedades so caractersticas dos
objetos, que podem ser acessadas e/ou alteradas pelo programador tanto em tempo de projeto (quando o
projeto est sendo desenvolvido) quanto em tempo de execuo (quando o aplicativo est sendo executado).
J os mtodos so rotinas internas ao objeto que servem para executar determinadas aes. Para
exemplificar, pense em uma bicicleta azul. A cor azul uma caracterstica da bicicleta, ou uma propriedade
dela. J um mtodo seria o ato de pedalar, que a rotina necessria para fazer a bicicleta andar.
Para programao em VB, usamos uma verso da linguagem Basic estruturada para a construo de
procedimentos e funes que podem estar associados aos eventos dos objetos de sua aplicao. O VB
tambm faz uma verificao automtica de sintaxe dos comandos, e possui recursos avanados de
compilao e rastreamento de erros.

Iniciando o VB
Clique no boto Iniciar do Windows, depois em Programas, e procure uma opo chamada Microsoft Visual
Basic 6.0. Clique nela, e ser exibida durante alguns segundos uma tela de apresentao do VB, enquanto o
software est sendo carregado. Depois disso, aparecer uma janela onde voc deve indicar o tipo de projeto
que dever ser iniciado:

Microsoft Visual Basic 6

Para iniciar um novo projeto, escolha a opo Standard EXE na aba New. As demais opes dessa aba
iniciam outros tipos de projetos, que no sero abordados nesse curso por tratarem-se de programao
avanada, como a criao de controles ActiveX;
A aba Existing serve para abrir um projeto j existente;
Finalmente, a aba Recent contm os projetos mais recentemente utilizados, e pode ser usada para abrir
um deles de maneira mais rpida que na aba Existing.

A tela do VB
Ao se utilizar o VB, tem-se a impresso que estamos esculpindo nossa aplicao diretamente no Windows.
Isto se deve ao fato de que ele no possui uma janela que ao ser maximizada ocupe toda a rea de trabalho.
Na verdade, o VB constitudo apenas por uma barra de ttulos, uma barra de menus e uma barra de
ferramentas (veja a figura na prxima pgina). Dessa forma, quando construmos os nossos formulrios
estamos vendo exatamente como eles aparecero no Windows. As janelas auxiliares, que podem ser a caixa
de ferramentas, a janela de propriedades, a janela imediata, etc., aparecem flutuando na rea de trabalho do
Windows. Os principais componentes da interface do VB so os seguintes:

A janela Projeto (Project)


No VB, sempre que pensamos em uma aplicao, pensamos em um projeto, que o conjunto dos arquivos
que compem a aplicao. Esses arquivos podem ser formulrios ou mdulos. Existem outros arquivos que
compem um projeto, tais como controles customizados (Custom Controls), bibliotecas de funes, etc.
Entretanto, estes no so parte integrante do arquivo que o VB gera. No VB, cada componente de um projeto
est em um arquivo separado, que pode ser visualizado e acessado atravs da janela Projeto.

Formulrios (Forms)
No VB, as janelas so chamadas de formulrios. Sempre que se comea a desenvolver uma nova aplicao, o
VB nos fornece um formulrio vazio como ponto de partida, e atribui a ele o nome provisrio de Form1.
Podemos inserir diversos tipos de controles neste formulrio, controles estes que esto representados por
botes na caixa de ferramentas.

A caixa de ferramentas (Toolbox)


Procure na figura a caixa de ferramentas do VB. Ela geralmente est esquerda do formulrio, e contm os
botes correspondentes aos controles que podem ser adicionados a ele.

Controles
Os controles so arquivos com extenso OCX e constituem a base da programao visual do VB, alm de
poderem ser utilizados em qualquer outro aplicativo ou linguagem que aceite objetos com esse padro.
Existem dois tipos bsicos de controles: internos ou padronizados e personalizados ou customizados.
Basicamente, os controles padronizados fazem parte do corpo do VB e so disponibilizados na caixa de
ferramentas quando se inicia um novo projeto. J os customizados podem ou no ser fornecidos junto com o
VB, dependendo da verso utilizada, e precisam ser includos no projeto pelo programador - quando se inclui
um controle customizado em um projeto, aparece um novo boto na caixa de ferramentas. Alis, qualquer
pessoa pode criar um controle OCX (o prprio VB permite isso), existindo inclusive vrios deles que so
comerciais, desenvolvidos por software-houses especializadas.
A utilizao dos dois tipos de controles rigorosamente a mesma: ambos possuem propriedades e mtodos,
respondem a eventos, aparecem na caixa de ferramentas, e so manipulados da mesma forma. A diferena
que os customizados no esto disponveis enquanto no forem explicitamente incorporados caixa de
ferramentas do VB pelo programador. Mas, depois que isso acontece, tudo fica transparente.

A propriedade Name
A propriedade Name determina o nome de um objeto. Todos os objetos dentro de um projeto, incluindo
formulrios e controles, precisam ter um nome, pois atravs desse nome que nos referimos a eles quando
estamos escrevendo o cdigo. Quando voc inicia o VB, o formulrio apresentado recebe o nome genrico
de Form1; da mesma maneira, os controles recebem nomes genricos: Command1, Command2, CommandN

Microsoft Visual Basic 6

para os botes de comando; Text1, Text2, TextN para as caixas de texto, e assim por diante.
recomendvel, porm, que os objetos recebam nomes mais descritivos e de fcil memorizao e
identificao, especialmente aqueles usados com muita freqncia, como caixas de texto e labels. Em casos
especiais barras de botes, timers, barras de status e outros, usados mais raramente esse cuidado pode ser
dispensado.

As janelas do VB

A propriedade Name de um objeto deve sempre iniciar com uma letra, possuir no mximo 40 caracteres, e
pode incluir nmeros e o caracter sublinhado _, mas no pode incluir espaos nem sinais de pontuao.
Existe uma conveno usada para a nomeao dos objetos, normalmente adotada como regra pelos
programadores VB, que determina a adoo de um prefixo de duas ou trs letras minsculas identificando o
tipo do objeto, seguido do nome propriamente dito. Por exemplo: se voc quiser chamar um formulrio de
Aviso e usar a conveno, dever determinar para a propriedade Name o valor frmAviso, pois frm o
prefixo que identifica um formulrio. O uso regular dessa conveno ajuda na documentao de um projeto,
facilitando muito sua manuteno. Veja na tabela a seguir os prefixos convencionais utilizados para a
propriedade Name dos objetos mais comuns do VB:
Objeto..........................................................................................................Prefixo..............................Exemplo
Formulrio......................................................................................................frm.................................frmMenu
Caixa de Figura (PictureBox)..........................................................................pic....................................picFoto
Legenda (Label)...............................................................................................lbl.............................lblResultado
Caixa de Texto (TextBox)................................................................................txt...................................txtAviso
Moldura (Frame).............................................................................................fra..............................fraConceito
Boto de Comando (CommandButton)..........................................................cmd.............................cmdApagar
Caixa de Verificao (CheckBox)...................................................................chk..............................chkNegrito
Boto de Opo (OptionButton).....................................................................opt...................................optSexo

Microsoft Visual Basic 6

Objeto..........................................................................................................Prefixo..............................Exemplo
Caixa de Combinao (ComboBox)................................................................cbo.............................cboCidades
Caixa de Listagem (ListBox)...........................................................................lst................................lstClientes
Barra de Rolagem Horizontal (HScrollBar)...................................................hsb..................................hsbIdade
Barra de Rolagem Vertical (VScrollBar)........................................................vsb...................................vsbTaxa
Temporizador (Timer).....................................................................................tmr...............................tmrAlarme
Caixa de Listagem de Unidades (DriveListBox).............................................drv............................drvUnidades
Caixa de Listagem de Diretrios (DirListBox)................................................dir................................dirDestino
Caixa de Listagem de Arquivos (FileListBox)................................................fil...............................filArquivos
Forma (Shape).................................................................................................shp...........................shpQuadrado
Linha (Line).....................................................................................................lin................................linDiviso
Caixa de Imagem (Image)..............................................................................img.................................imgCarro
Controle de Dados (DataControl)...................................................................dat................................datBancos
Grid.................................................................................................................grd.............................grdConsulta
Menu..............................................................................................................mnu...............................mnuEditar
Banco de Dados (DataBase)............................................................................db.......................dbContabilidade
Conjunto de Registros (RecordSet)..................................................................rs................................rsDespesas
Conexo com provedor de dados (Connection)..............................................cnn................................cnnDados

Microsoft Visual Basic 6

Lio 1: Primeiros Passos


Nessa lio vamos criar nossa primeira aplicao no VB. Precisaremos seguir os seguintes passos:
1. Criao da interface com o usurio: para isso, voc vai usar os controles da caixa de ferramentas, que
sero inseridos nos formulrios de modo desenhar a interface;
2. Definio das propriedades dos objetos: aps a insero dos controles, voc deve definir as
propriedades com as quais eles devem ser iniciados quando o programa for executado;
3. Codificao dos eventos: escrever a programao Basic necessria para que o programa responda
corretamente aos eventos que vo ocorrer durante sua execuo.

Criao da interface com o usurio


Vamos ento para a primeira etapa do processo de criao do nosso programa: criar a interface com o
usurio. Para isso voc vai precisar dos seguintes controles:
Apontador (Pointer): esse no bem um controle, e sim uma ferramenta usada para inserir,
movimentar e/ou dimensionar os diversos objetos de uma aplicao.
Boto de comando (CommandButton): sua funo principal executar comandos quando clicado. ,
provavelmente, o controle mais usado em programao visual.
Boto de opo (OptionButton): usado para determinar se uma informao verdadeira ou falsa,
somente um boto pode estar ligado, num dado momento, para cada conjunto desses controles.
Legenda (Label): serve para exibir um texto que no pode ser editado pelo usurio, como uma
mensagem ou o rtulo de um campo a ser digitado.
Caixa de figura (PictureBox): permite a exibio de figuras e o agrupamento controles, tais como
botes de comando, em formulrios do tipo MDI (que sero estudados mais adiante).
Bem, mos obra:
1. Inicie o Windows e o VB, se ainda no o fez. Na janela New Project, escolha a opo Standard EXE da
aba New: ser exibida a tela do VB com um formulrio em branco;
2. Insira um boto de comando nesse formulrio. Para isso, voc pode agir de duas maneiras: dar um click
no cone CommandButtom da caixa de ferramentas e arrastar o mouse sobre o formulrio de modo a
definir o tamanho desejado para o boto, ou ento dar um duplo click no cone (nesse caso o boto ser
inserido no centro do formulrio com um tamanho padronizado):

3. Usando o mesmo procedimento, insira trs botes de opo (OptionButtom) e posicione-os um abaixo do
outro do lado esquerdo do formulrio, de modo a ficar parecido com o exemplo a seguir:

Microsoft Visual Basic 6

10

4. Ao lado dos botes, insira trs caixas de figura (PictureBox). Desenhe-as como quadrados de
aproximadamente 1 centmetro de lado;
5. Insira agora trs Labels direita das caixas de figura, indo at perto da borda direita do formulrio. Seu
formulrio deve estar parecido com esse:

6. No menu File, selecione Save Project. Como a primeira vez que o projeto ser gravado, aparece a
caixa de dilogo Save File As, onde devemos informar o nome que ser dado ao formulrio;
7. Digite Hello e selecione Save. Seu formulrio foi gravado em um arquivo chamado Hello.FRM;
8. Aparece ento a caixa de dilogo Save Project As, onde devemos informar o nome que ser dado ao
projeto. Digite Hello novamente e selecione Save. Seu projeto foi gravado no arquivo Hello.VBP;
Meus parabns! Voc terminou a criao de sua primeira interface com o usurio no VB. Vamos agora
passar segunda fase do nosso programa, que a definio de propriedades para os objetos do formulrio.

Definio das propriedades dos objetos


Antes de comear, verifique se a janela Propriedades (Properties) est aberta. Caso no esteja, voc pode
abr-la pressionando F4 ou selecionando a opo Properties do menu View. A definio de propriedades
um processo muito simples, basta seguir os seguintes passos:
1. D um click no objeto cujas propriedades voc quer mudar (voc tambm pode clicar com o boto
direito sobre ele, e escolher a opo Properties do menu de contexto);
2. Clique na propriedade que deseja alterar;

Microsoft Visual Basic 6

11

3. Digite o novo valor para a propriedade. Algumas propriedades possuem uma caixa de combinao em
que voc pode indicar sua opo. Outras abrem uma caixa de dilogo, como a propriedade Picture de
uma caixa de figura quando isso acontecer, ser indicado por um boto com reticncias ... ao lado do
valor da propriedade.
Seguindo os passos acima, altere as propriedades dos objetos do nosso formulrio, de acordo com a tabela:
Objeto

Nome
(propriedade Name)

Formulrio

frmHello

Boto de opo
Boto de opo
Boto de opo
Caixa de figura

optHappy
optOk
optSad
picHappy

Caixa de figura

picOk

Caixa de figura

picSad

Label

lblHappy

Label

lblOk

Label

lblSad

Boto de comando cmdExit

Outras Propriedades = Valor


Caption = Hello, World!
Icon = FACE05.ICO (obs.: os cones do VB normalmente so
encontrados na pasta C:\Arquivos de Programas\Microsoft
Visual Studio\Commom\Graphics\Icons, e o arquivo citado
est na subpasta Misc)
Caption = Im Happy!
Caption = Im Ok
Caption = Im Sad
Picture = FACE03.ICO
Visible = False
Appearance = 0 Flat
BorderStyle = 0 None
Picture = FACE02.ICO
Visible = False
Appearance = 0 Flat
BorderStyle = 0 None
Picture = FACE04.ICO
Visible = False
Appearance = 0 Flat
BorderStyle = 0 None
Caption = (em branco)
Font = Times New Roman, Negrito, tamanho 12
Caption =
Font = Times New Roman, Negrito, tamanho 12
Caption =
Font = Times New Roman, Negrito, tamanho 12
Caption = &Exit
Style = 1 Graphical
Picture = TRFFC14.ICO (procure na subpasta Traffic do
diretrio de cones do VB)

Note que usamos o caracter & na definio da propriedade Caption do boto cmdExit. Fazemos isso
quando queremos habilitar o acionamento de um controle pela tecla ALT. No formulrio, o rtulo do boto
Exit com a letra E sublinhada, indicando que podemos acion-lo atravs da combinao de teclas
ALT+E. Verifique se voc fez tudo corretamente, comparando seu formulrio com o exemplo abaixo:

Microsoft Visual Basic 6

12

Bem, vamos conhecer melhor as propriedades que usamos nesses controles, e algumas outras interessantes:

Propriedade Caption
Uma boa traduo para Caption rtulo: para um formulrio, Caption determina o texto que ser exibido na
barra de ttulo, e tambm abaixo do cone do aplicativo, se ele for minimizado. Para um controle, determina
o texto exibido dentro ou prximo a ele. Quando um objeto criado o contedo de Caption igual ao nome
padro atribudo pelo VB ao controle.

Propriedade Picture
A propriedade Picture determina o nome de um arquivo grfico para ser exibido pelo controle. Como voc j
viu, podemos escolher o arquivo grfico desejado em uma janela de dilogo que aberta quando clicamos no
boto com ... (reticncias) exibido por Picture. Os formatos grficos suportados pelo VB 4 so: cones
(arquivos de extenso ICO), Windows Metafile (extenso WMF o formato dos cliparts do Word), Bitmap
(extenso BMP o formato dos arquivos criados pelo Paint do Windows), e arquivos JPG e GIF (muito
usados em pginas da Internet). No caso do boto de comando, Picture s tem efeito se a propriedade Style
for igual a 1 Graphical.

Propriedade Style
Essa propriedade indica o estilo da aparncia do controle. No caso dos botes de comando, os valores
possveis so 0 Standard e 1 Graphical. Na prtica, a diferena que, alterando o estilo do
CommandButton para Graphical, ser permitida a exibio de cones, enquanto que em Standard somente
texto poder ser exibido por ele. Vrios controles possuem a propriedade Style, sendo que os valores
possveis variam de um tipo para outro.

Propriedade Visible
Como o prprio nome indica, essa propriedade define se um controle deve ou no estar visvel em um
determinado momento. Ela s pode assumir os valores True (verdadeiro) ou False (falso);

Propriedade Enabled
No usamos essa propriedade em nosso projeto, mas vamos cit-la agora para evitar confuses com Visible.
Voc j reparou quando abre uma janela qualquer do Windows e aparece um boto ou uma opo de menu
cujo rtulo est com uma cor mais apagada, indicando que aquele controle no est acessvel no
momento? A propriedade Enabled quem faz isso: ela habilita (quando True) ou no (quando False) o
acesso ao controle em um determinado momento. Um exemplo: voc cria um boto Ok para ser utilizado
quando forem fornecidos alguns valores necessrios para se realizar um clculo. Voc pode usar Enabled
para desabilitar o boto Ok at que o usurio tenha fornecido esses valores, pois s depois disso ele poder
us-lo.

Propriedade Appearance
A propriedade Appearance define a aparncia do controle no formulrio. Ela s pode ser modificada em
tempo de projeto, e normalmente s pode assumir dois valores: 0 Flat (o controle ter a mesma aparncia
do formulrio, no haver destaque) ou 1 3D (o controle ser exibido em perspectiva 3D).

Propriedade BorderStyle
Essa propriedade normalmente aplicada ao formulrio, e, como o prprio nome indica, define o estilo de
sua borda. Existem seis tipos de bordas, sendo que alguns controles tambm possuem a propriedade
BorderStyle, mas no todos os tipos. Os tipos de bordas so os seguintes:
0 None (Nenhuma);
1 - Fixed Single (Fixa Simples): indica que o formulrio no ser dimensionvel, ou seja, o usurio no
poder alterar o tamanho no formulrio em tempo de execuo.
2 Sizable (Dimensionvel);
3 - Fixed Dialog (Dilogo Fixo): o formulrio no possuir os botes Maximizar e Minimizar, e, alm
disso, no ser dimensionvel. o estilo da borda das caixas de dilogo do Windows;

Microsoft Visual Basic 6

13

4 - Fixed ToolWindow (Ferramenta Fixa): esse tipo no possui o menu de controle e os botes
Maximizar e Minimizar. No dimensionvel, e mostra somente o boto Fechar e a barra de ttulo com a
fonte reduzida. Alm disso, o formulrio no aparece na barra de tarefa do Windows.
5 - Sizable ToolWindow (Ferramenta Dimensionvel): semelhante a Fixed ToolWindow, s que
dimensionvel.

Propriedade StartUpPosition
Aplicada ao formulrio, essa propriedade determina sua posio na tela do computador quando for acionado.
Os valores possveis so:
0 Manual: a posio inicial ser a mesma que o formulrio ocupa em tempo de projeto;
1 Center Owner: a posio inicial ser o centro do formulrio principal da aplicao, quando temos
mais de um formulrio no projeto;
2 Center Screen: a posio inicial ser o centro da tela do computador;
3 Windows Default: o Windows determinar a posio inicial do formulrio.

Propriedade Font
A propriedade Font permite a formatao da fonte usada nas propriedades Text e Caption. Quando voc clica
em Font, aberta a janela de formatao de fontes do Windows, de modo que voc poder aplicar fonte,
tamanho e efeitos ao texto das propriedades citadas. Essa propriedade no pode ser alterada em tempo de
execuo, mas para isso o VB fornece algumas propriedades relacionadas a Font, que so as seguintes:
FontBold (Negrito), FontItalic (Itlico), FontStrikethru (Riscado) e FontUnderline (Sublinhado):
podem assumir os valores True (liga o efeito) ou False (desliga o efeito);
FontName (Nome da Fonte): indica o nome da fonte a ser aplicada ao controle;
FontSize (Tamanho da Fonte): recebe um valor numrico referente ao tamanho a ser aplicado em uma
fonte True Type.
Obs.: com exceo de Font, essas propriedades s podem ser alteradas em tempo de execuo.

Codificao dos eventos


Essa a etapa na qual vamos agora fazer nosso programa funcionar. Como j foi dito anteriormente, o Visual
Basic uma linguagem orientada a eventos, o que quer dizer que os objetos respondem a eventos que
contm a codificao necessria. Cada evento contm uma subrotina (ou procedure) associada a ele. Ou seja,
a codificao ser feita em procedures de acordo com a ao que o programa dever executar quando um
determinado evento ocorrer.
Antes de escrever uma procedure, voc precisa dizer ao VB para qual objeto deseja escrev-la. A maneira
mais simples de se fazer isso dando um duplo click sobre o objeto desejado, e a janela Cdigo (Code) ser
apresentada. Na janela Cdigo temos trs destaques:
Quando aberta, a janela Cdigo apresenta a procedure correspondente ao evento padro do objeto. Por
exemplo: o evento padro de um boto de comando o Click, portanto quando abrirmos a janela Cdigo
de um boto de comando o evento que aparecer ser o Click. Porm, no caso do evento padro no
conter nenhuma codificao, mas outro qualquer sim, ento a janela ser aberta nesse outro evento;
Na parte superior da janela temos duas caixas de combinao. A da esquerda, chamada Object, contm
os nomes de todos os objetos do nosso formulrio, e da direita, chamada Proc, uma lista com todas as
procedures associados ao objeto atualmente selecionado;
Existe uma opo na caixa Object chamada General, que a princpio s contm uma procedure,
chamada Declarations. Esse no um objeto, e sim uma Seo: uma parte do programa onde so
escritas instrues especiais, como declarao de variveis e funes de uso geral.
Quando estamos programando em VB, freqente a necessidade de se modificar o valor das propriedades
dos objetos em tempo de execuo. Para fazer isso, o VB refere-se s propriedades de um objeto da seguinte
maneira:
Objeto.Propriedade = <valor>

Microsoft Visual Basic 6

14

Mas vamos fazer a codificao do nosso projeto. Comecemos pelo boto cmdExit: para escrever o cdigo
necessrio ao seu funcionamento, siga os seguintes passos:
1. D um duplo click sobre o boto cmdExit: a janela Cdigo se abre no evento Click:

2. Escreva o seguinte cdigo:


Private Sub cmdExit_Click()
End
End Sub

A primeira linha da procedure indica seu nome cmdExit_Click e sua classe Private (privada). A ltima
linha indica o fim da procedure, atravs do comando End Sub. Entre o nome da procedure e o comando End
Sub que escrevemos a codificao necessria, que nesse caso resumiu-se ao comando End (que nome
sugestivo, no?), cuja funo encerrar a execuo do programa.
Vamos agora testar nosso programa. Para isso, basta clicar no boto Start da barra de ferramentas ou ento
pressionar a tecla F5. Teste o funcionamento de seu aplicativo: se tudo foi feito corretamente, quando voc
clicar no boto Exit o programa ser encerrado e voc retornar ao VB.
Uma observao: quando estamos criando um formulrio ou escrevendo cdigo dizemos que estamos em
tempo de projeto; quando estamos executando um programa dizemos que estamos em tempo de execuo.
Essa diferenciao importante, pois existem algumas propriedades que no podem ter seu valor alterado em
tempo de execuo.

Planejando a codificao
Planejamento a palavra chave para ns, programadores, quando chegamos na fase de escrever a
programao do aplicativo. Antes de comear a codificao de um programa voc precisa saber o que ele
deve fazer e quando: identificar quais os eventos que podem ser acionados pelo usurio e como eles vo
influenciar a execuo do aplicativo, para poder assim program-los de maneira a chegar ao resultado
desejado. Vamos ento planejar nosso primeiro aplicativo:
Temos em nosso formulrio trs botes de opo, que serviro para indicar nosso humor matinal;
Temos tambm trs caixas de figura, inicialmente invisveis, cada uma delas contendo uma carinha
diferente, e trs Labels que no contm texto nenhum;
Quando clicarmos em um boto qualquer, a figura e o texto correspondente a ele devero aparecer, e a
figura e o texto dos outros botes no devero mais ser exibidos;
Voc j deve ter percebido que o evento que vamos trabalhar o Click dos botes de opo, pois ele que
vai gerar as aes necessrias para cumprirmos nosso planejamento. Agora que j sabemos o que fazer,
vamos escrever a codificao para isso:
1. D um duplo-click no boto de opo optHappy. A janela Cdigo ser aberta e a procedure
optHappy_Click exibida;
2. Digite os comandos indicado:
Private Sub optHappy_Click()
picHappy.Visible = True
picOk.Visible = False
picSad.Visible = False
lblHappy.Caption = "I'm going to Disneyworld!"
lblOk.Caption = Empty
lblSad.Caption = Empty
End Sub

Microsoft Visual Basic 6

15

Obs.: Empty uma funo do VB que retorna uma string vazia (nula).
3. D um click na lista Object e escolha o objeto optOk. Se a procedure exibida pela janela Cdigo no for
a optOk_Click, selecione-a na lista Proc;
4. Digite a procedure:
Private Sub optOk_Click()
picHappy.Visible = False
picOk.Visible = True
picSad.Visible = False
lblHappy.Caption = Empty
lblOk.Caption = "I'm Ok today."
lblSad.Caption = Empty
End Sub

5. Selecione agora o objeto optSad e a procedure optSad_Click, e escreva o cdigo para ela (voc pode usar
os recursos de copiar e colar do Windows):
Private Sub optSad_Click()
picHappy.Visible = False
picOk.Visible = False
picSad.Visible = True
lblHappy.Caption = Empty
lblOk.Caption = Empty
lblSad.Caption = "Goodbye, cruel world..."
End Sub

6. Pressione F5 para executar o programa. Se voc digitou tudo corretamente, o VB exibir seu formulrio
na tela, como no exemplo a seguir:

7. D um click no boto com o rtulo Im Happy e veja se o resultado o esperado:

Microsoft Visual Basic 6

16

8. Verifique o funcionamento dos outros botes de opo. Se algo estiver errado, confira a codificao e
execute o aplicativo novamente.

Criando um arquivo executvel


O ltimo passo de qualquer projeto a criao do arquivo executvel. Ou voc vai entregar para o cliente os
arquivos que o compem? Alm das razes monetrias bvias, voc no vai correr o risco de um curioso
qualquer alterar ou copiar o cdigo que voc tanto suou para criar, vai? Alm disso, se voc no criar um
executvel, o cliente dever possuir um cpia do VB instalada em sua mquina para poder rodar o aplicativo,
o que no l muito prtico. A criao de arquivos executveis feita pela opo Make <nome do
projeto>.exe do menu File:
1. Escolha a opo Make hello.exe do menu File do VB. Uma caixa de dilogo ser exibida, onde voc
dever informar o nome do arquivo executvel, caso queira mud-lo. Aps indicar o nome, clique em
Ok;
2. Crie um atalho para o arquivo executvel na rea de trabalho do Windows. Veja que, como cone do
atalho, ser exibida a carinha feliz.

Package and Deployment Wizard


A criao do executvel, apesar de importante, ainda no suficiente para a distribuio de uma aplicao
desenvolvida em VB. Como voc sabe, o Windows um sistema composto de inmeros arquivos e
programas, cada qual com sua funo especfica, sendo que alguns so necessrios para a execuo de
aplicativos. Alm disso, o programa escrito em VB no tem o poder de rodar sozinho, mesmo aps a
criao do mdulo executvel: para funcionar, necessita de algumas bibliotecas chamadas de run-time, e dos
arquivos OCX que esto gravados no diretrio do Windows. Chamamos a esses arquivos de dependncias.
Mas, como saber quais so as dependncias de um aplicativo?
Um dos utilitrios que acompanham o VB em suas verses comerciais o Package and Deployment Wizard,
cuja funo justamente resolver esse problema. Ele cria um programa de instalao para sua aplicao, que
vai copiar para a mquina onde o programa for instalado todos os arquivos de run-time, DLLs e OCXs que
ele precisar, da mesma maneira que em um aplicativo comercial.
O uso desse utilitrio muito simples:

Microsoft Visual Basic 6

17

1. Na caixa Select Project, selecione o projeto para o qual deve ser criado o programa de instalao;
2. Clique no boto Package para iniciar o assistente;
3. Voc dever responder algumas perguntas (por exemplo, o nome da opo que ser criada no menu
Iniciar do Windows) sendo que para a maioria delas no necessrio fazer qualquer alterao. Devemos
porm destacar uma delas na qual deve-se indicar, se for o caso, o nome dos arquivos externos ao projeto
que tambm precisam ser copiados. O caso mais comum o de arquivos de banco de dados, quando da
primeira instalao do aplicativo;
4. Depois que voc responder essas perguntas, dever indicar em que unidade e (se for o caso) em que
pasta onde devem ser gravados os arquivos da instalao. Se voc indicar uma unidade de disquetes, o
Wizard criar os disquetes de instalao automaticamente;
5. Pronto, o Wizard resolve todas as dependncias e cria o programa de instalao para voc.

Microsoft Visual Basic 6

18

Lio 2: Entrada e Sada de Dados


Entrada e sada so dois conceitos importantssimos em Processamento de Dados, pois envolvem a interao
do usurio com a mquina: por entrada, entende-se toda solicitao ou fornecimento de dados ao computador
pelo operador, e por sada, o retorno pelo computador do resultado obtido. Nessa lio voc vai aprender a
implementar esses dois conceitos em seus programas.

Caixas de Texto
Em programao visual, existem vrias maneiras de se permitir a entrada de dados, mas a principal o
uso das caixas de texto (TextBox). Seu evento padro o Change, que ocorre sempre que acontece
uma digitao, e a propriedade principal a Text. Vejamos ento algumas propriedades importantes:

Propriedade Text
A propriedade Text de uma caixa de texto armazena o texto contido na rea de edio. Ela pode ser alterada
pelo usurio em tempo de execuo, o que permite ento a digitao de dados no programa. Como a
propriedade Text armazena textos, quando houver a necessidade do dado a ser digitado ser numrico teremos
que converter seu contedo usando funes especficas para esse fim.

Propriedade MaxLength
Essa propriedade serve para determinar o tamanho mximo em caracteres do dado digitado em uma caixa de
texto. Por exemplo: sabendo que a digitao em uma caixa de texto chamada txtNome no pode ter mais de
30 caracteres, determinamos para a MaxLength de txtNome o valor 30. Se MaxLength no for definida, o
valor padro zero, e no haver limite para a digitao no campo.

Propriedade Multiline
A funo dessa propriedade permitir ou no a digitao de mais de uma linha em uma caixa de texto. Os
valores possveis so True (Multiline habilitada) ou False. Com MuliLine = True, quando Enter for
pressionada, a digitao passa para a prximo linha. Alm disso, a propriedade Alignment de uma caixa de
texto s funciona de Multiline estiver habilitada.

Propriedade PasswordChar
Eis uma propriedade muito interessante: voc j digitou uma senha em um programa qualquer em que
aparece na caixa um caractere especial (normalmente um *) ao invs daquele digitado? Quem faz isso
PasswordChar: basta informar em seu valor o caracter desejado, e o efeito ser exatamente esse.

Propriedades ForeColor e BackColor


A propriedade ForeColor define a cor da fonte usada no texto exibido pelo controle, e BackColor indica a
cor do fundo de um objeto. Essas propriedades recebem como valor um cdigo numrico ou hexadecimal
que representa a cor desejada. Em tempo de projeto, para alter-las a maneira mais simples clicar sobre a
propriedade que deve ser modificada e depois no boto com as reticncias que aparece ao lado do cdigo da
cor atual. Uma janela com as opes de cores disponveis se abre e basta escolher a que mais lhe agrade.
Para alterar seus valores em tempo de execuo, so usadas as funes RGB e QBColor, que estudaremos
mais adiante.
Para exemplificar o uso das TextBoxes, vamos elaborar o projeto de uma calculadora simples:
1. Inicie um novo projeto;
2. Dimensione o formulrio e insira os controles necessrios de modo a ficar parecido com o modelo da
prxima pgina;

Microsoft Visual Basic 6

19

3. Altere as propriedades dos objetos:


Objeto
Formulrio

Nome
frmCalculadora

Caixa de Texto

txtNum1

Caixa de Texto

txtNum2

Caixa de Texto
Label

txtResultado
lblMultiplicao

Boto de Comando cmdIgual


Boto de Comando cmdLimpar

Outras Propriedades = Valor


Caption = Calculadora
BorderStyle = 1 Fixed Single
StartUpPosition = 2 Center Screen
Text = (em branco)
MaxLenght = 10
Text =
MaxLenght = 10
Text =
Caption = X (maisculo)
Font = Arial, Negrito, tamanho 16
Style = 1 Graphical
Picture = Misc\MISC22.ICO
Caption = &Limpar

Nesse projeto, digitaremos um nmero em txtNum1 e outro em txtNum2. Quando clicarmos em cmdIgual, o
resultado da multiplicao aparecer em txtResultado. Para limpar as caixas de texto, clicaremos em cmdLimpar. O projeto ir trabalhar, portanto, basicamente com dois eventos:
Click em cmdIgual (=)
Click em cmdLimpar (Limpar)
No se preocupe com o clculo agora, pois voltaremos a esse assunto na prxima lio. Vamos ento
escrever a codificao do nosso programa:
1. D um duplo click no boto cmdIgual e entre com o seguinte cdigo:
Private Sub cmdIgual_Click()
vValor1 = Val(txtNum1.Text)
vValor2 = Val(txtNum2.Text)
txtResultado.Text = vValor1 * vValor2
End Sub

2. Alterne para a procedure cmdLimpar_Click e digite os comandos a seguir:


Private Sub cmdLimpar_Click()
txtResultado.Text = Empty
txtNum1.Text = Empty
txtNum2.Text = Empty
End Sub

3. Execute o projeto. Para testar, entre com um nmero qualquer em txtNum1, outro em txtNum2, d um
click no boto =, e o resultado da multiplicao aparecer em txtResultado;
4. Grave o formulrio como frmCalc e o projeto como Calc.
Obs.: voc deve ter percebido que na codificao foram usados alguns recursos novos: por enquanto, o que
nos interessa que vValor1 e vValor2 so variveis, e Val uma funo de converso.

Sada de Dados
Voc j usou na lio anterior um dos principais meios de exibio de dados do VB: o controle Label. Ele
tem, nesse caso, uma vantagem muito grande sobre as caixas de texto, fcil de perceber: execute novamente

Microsoft Visual Basic 6

20

o programa Calc, faa um clculo qualquer e clique com o mouse sobre a caixa de texto txtResultado. Agora
escreva alguma coisa: a digitao aceita, o que, convenhamos, no l muito recomendvel para a exibio
de dados. J um label no permite digitao, resolvendo esse problema. Vamos ento alterar nosso programa:
1. Apague do formulrio a caixa txtResultado;
2. Inclua um label em seu lugar, e altere suas propriedades para:
Name = lblResultado
Caption = (em branco)
Alignment = 2 Center
BorderStyle = 0 None
BackStyle = 1 Opaque
BackColor = (clique nas reticncias e escolha a cor branca)
3. Altere a ltima linha da procedure cmdIgual_Click para:
lblResultado.Caption = vValor1 * vValor2

4. Altere a primeira linha da procedure cmdLimpar_Click para:


lblResultado.Caption = Empty

5. Execute o programa, faa um clculo qualquer e tente alterar o resultado: como o label no permite
digitao, isso no mais possvel.

Sada Formatada
muito comum a necessidade de se aplicar mscaras para a exibio dos dados. Isso fica claro quando, em
nossa calculadora, um clculo resulta em um valor alto, pois no existem separadores de milhar ou decimal.
O VB possui algumas funes especficas para a formatao de dados de sada:

Funo Format
A funo Format usada na aplicao de mscaras em dados numricos ou datas. Sua sintaxe a seguinte:
Format(<expresso>,<formato>)

Onde Expresso o dado a ser formatado e Formato a mscara que ser aplicada a ele, e o resultado ser
uma string correspondente expresso formatada com a mscara. Veja alguns exemplos:
Formato
0
0,00
#,##0
#,##0.0
$#,##0;($#,##0)
$#,##0.00;($#,##0.00)
0%
0.00E+00

5 positivo
5
5,00
5
5,0
$5
$5,00
500%
5,00E+00

5 negativo
-5
-5,00
-5
-5,0
($5)
($5,00)
-500%
-5,00E+00

5 decimal
1
0,50
1
0,5
$1
$0,50
50%
5,00E-1

Em formato o nmero 0 ser mostrado ou trocado pelo caractere em sua posio, j o sustenido (#) no
ser mostrado. Podemos usar smbolos na mscara, como no exemplo: $ , % e E (que representa
exponenciao). Note que a separao de milhares e decimais na mscara deve ser feita no padro
americano, ou seja, , para separao de milhares e . para decimais, mas o resultado vai seguir as
configuraes feitas na opo Internacional do Painel de Controle do Windows. Format tambm pode ser
usada para formatao de data e hora:
Formato
d/m/yy
dd-mm-yyyy
dd-ddd
hh:mm AM/PM
h:mm:ss a/p
d/m/yy h:mm

Exibio
10/7/96
01-Jun-1996
02-Dom
08:50 AM
8:50:20 a
03/12/95 9:30

Formato
General Date
Long Date
Medium Date
Short Date
Long Time
Medium Time (12 horas)
Short Time (24 horas)

Exibio
06/09/96 9:40:18
Sexta, 9 de setembro de 1996
09-set-96
09/09/96
9:40:19
09:40 AM
09:40

Microsoft Visual Basic 6

21

Funes UCase e LCase


Essas funes so usadas na converso de textos em letras maisculas (UCase) ou minsculas (LCase).

Funo StrConv
A funo StrConv tambm usada na formatao de strings, mas mais flexvel que UCase e LCase, pois
recebe um parmetro que indica como deve ser feita a converso de maisculas para minsculas e viceversa. Esse parmetro pode ser:
1 vbUpperCase: converte a string em caracteres maisculos. O mesmo que UCase;
2 vbLowerCase: converte a string em caracteres minsculos. O mesmo que LCase;
3 vbProperCase: converte em letra maiscula a primeira letra de cada palavra na seqncia de
caracteres, e as demais em minsculas.
Por exemplo:
Funo
UCase(MICROSOFT Visual basic)
ou
StrConv(MICROSOFT Visual basic, vbUpperCase)
LCase(MICROSOFT Visual basic)
ou
StrConv(MICROSOFT Visual basic, vbLowerCase)
StrConv(MICROSOFT Visual basic, vbProperCase)

Exibio
MICROSOFT VISUAL BASIC
microsoft visual basic
Microsoft Visual Basic

Vamos alterar a exibio do resultado na calculadora:


1. Abra a janela Cdigo no evento Click do boto cmdIgual;
2. Altere a ltima linha da procedure como segue:
lblResultado.Caption = Format(vValor1 * vValor2, ###,##0.00)

3. Execute o programa e teste a alterao;


4. Grave seu trabalho. Guarde-o com cuidado, pois esse projeto ser usado novamente na prxima lio.

Microsoft Visual Basic 6

22

Lio 3: Fundamentos da Linguagem


Como j foi dito anteriormente, a programao em VB feita atravs de uma verso da linguagem Basic
estruturada. essa linguagem que comearemos a estudar a partir de agora. Nessa lio, veremos a criao e
o uso de variveis e constantes, e a razo da existncia dos computadores: clculos. Estudaremos tambm
um conceito muito importante em programao visual: o foco.

Variveis
Varivel uma rea da memria que identificamos com um nome e onde podem ser guardados dados com
possibilidade de alterao em tempo de execuo. O nome de uma varivel pode ter at 255 caracteres, deve
comear com uma letra e tem que ser nico. O nome pode conter nmeros e sublinhados, e no pode ser uma
palavra reservada. Nesse texto adotaremos como padro iniciar todos os nomes de variveis com a letra v.
Por exemplo: para uma varivel que identifica uma quantidade poderemos adotar o nome vQuantidade.
Existem vrios tipos de variveis, dependendo do dado que queremos que ela armazene:
Tipo
Byte
Boolean
Date
Integer
Long
Single

Tamanho (Bytes)
1
2
8
2
4
4

Sufixo
nenhum
nenhum
nenhum
%
&
!

Double

8
varivel
varivel

@
$
nenhum

Currency
String
Variant

Faixa de Dados
0 a 255
True (-1) ou False (0)
1/Jan/100 a 31/Dez/9999
-32.768 a 32.767
-2.147.483.647 a 2.147.483.647
-3,402823E38 a -1,401298E-45;
1,401298E-45 a 3,402823E38
-1,79769313486232E308 a -4,94065645841247E-324;
4,94065645841247E-324 a 1,79769313486232E308
-922.337.203.685.477,5808 a 922.337.203.685.477,5807
Qualquer dado alfanumrico
Qualquer tipo de dado: ser assumido o tipo e tamanho mais
apropriado ao dado a ela atribudo

A coluna Sufixo contm caracteres que servem para indicar o tipo da varivel desejada, quando a usamos
pela primeira vez. Por exemplo: para iniciar uma varivel de nome vTroco e declar-la como sendo do tipo
Currency, poderemos usar a linha de comando:
vTroco@ = 0

Uma observao: internamente, o tipo Date um nmero do tipo Long que representa uma data, sendo que a
parte inteira desse nmero indica a data propriamente dita, e a parte decimal a hora.

Declarao de Variveis
Declarar uma varivel indicar ao VB que deve ser reservada uma rea na memria para o armazenamento
de um dado, e de que tipo ser esse dado. Existem trs maneiras de declarar variveis:
1. Inicializar a varivel onde ela for necessria. Como o VB no obriga a declarao de variveis, podemos
simplesmente atribuir um valor a ela e a varivel assumir o tipo mais adequado para o dado que est
sendo armazenado: o que chamamos de declarao implcita;
2. Usar o mesmo mtodo acima, porm indicando o tipo da varivel atravs dos sufixos, na primeira vez
em que a utilizarmos;
3. Usar os comandos Dim, Static, Private ou Public para alocar o espao na memria para a varivel e
indicar seu tipo. A sintaxe a mesma para todos os comandos:
<comando> Varivel1, Varivel2, Varivel3, ..., VarivelN As <tipo>

Tambm podemos obrigar a declarao de todas as variveis de uma aplicao, o que muito interessante,
pois declarar variveis uma prtica de programao altamente recomendvel. Para isso usamos o comando
Option Explicit na seo Declarations do formulrio ou mdulo de programao.

Microsoft Visual Basic 6

23

Escopo das Variveis


Escopo so os pontos da aplicao de onde podemos acessar a varivel. O escopo de uma varivel
determinado pelo comando usado em sua declarao (Dim, Static, Private ou Public):
Variveis Locais: so reconhecidas apenas pela procedure na qual foram declaradas. Diferentes
procedures podem ter variveis locais com o mesmo nome sem que isso cause conflitos, pois quando
uma procedure encerrada o contedo de suas variveis locais ser perdido. A declarao de variveis
locais feita com os comandos Dim ou Private. Importante: variveis com declarao implcita sero
sempre locais;
Variveis Estticas: so variveis locais cujo contedo ser retido ao trmino da procedure. Nesse caso,
quando a procedure que contm uma varivel esttica for executada novamente, a varivel no ser
reinicializada e seu contedo ser o mesmo que ela continha quando a procedure foi encerrada da ltima
vez. Para declarar uma varivel como esttica usa-se o comando Static;
Variveis Privadas: compartilham informaes entre todas as procedures em um mdulo de
programao ou formulrio, mas no para outros mdulos ou formulrios. A declarao de variveis
privadas feita com os comandos Dim ou Private na seo Declarations de um formulrio ou mdulo de
programao;
Variveis Pblicas: esto disponveis para todos os mdulos de programao e formulrios do
aplicativo. Para a declarao de variveis pblicas usamos o comando Public.
Obs.: por uma questo de compatibilidade com verses anteriores do VB, tambm pode ser usado o comando
Global para declarao de variveis pblicas.

Inicializao de Variveis
De modo geral, para inicializar uma varivel basta atribuir um contedo a ela. Obviamente, esse contedo
deve ser compatvel com o tipo usado na declarao da varivel.
Para dados numricos basta indicar o valor desejado:
vSalrioBase = 1200

Valores reais devem usar o ponto para separao da parte decimal, jamais a vrgula, mesmo que a
configurao do Painel de Controle do Windows indique o contrrio:
vPi = 3.1416

Dados tipo String devem vir entre aspas:


vNomeEscola = CEMEP

Dados tipo Date so identificados pelo caracter # (sustenido) no seu incio e fim. Por exemplo: para
armazenar a data 15/07/1998 em uma varivel, podemos usar o comando:
vDataCurso = #15/07/1998#

Constantes
Constantes tambm so posies de memria que tm as mesmas caractersticas das variveis e podem ser
dos mesmos tipos, mas, como o prprio nome indica, no podem ter seu valor alterado durante a execuo
do programa. So teis para guardar parmetros e valores que sero usados em vrias procedures do sistema,
pois com elas podemos centralizar a atribuio desses valores em alguns poucos locais, o que facilita muito a
programao. Por exemplo: quando um cliente compra um sistema, obviamente pretende que o nome de sua
empresa aparea nos relatrios emitidos por ele. Se voc incluir o nome da empresa em cada programa de
relatrio, e depois vender esse sistema para outro cliente, ter que rastre-lo todo a procura dessas
ocorrncias e fazer as alteraes necessrias. Mas, se voc definir uma constante pblica no incio do sistema
contendo o nome da empresa, s ter que fazer uma alterao. Constantes s podem ser declaradas com os
comandos Public (constantes pblicas) ou Private (constantes privadas ou locais). A sintaxe usada na sua
criao :
<escopo> Const NomeDaConstante As <tipo> = <valor>

Por exemplo:
Public Const Pi As Single = 3.1415926535

Microsoft Visual Basic 6

24

Constantes de Sistema
O VB possui diversas constantes pr-definidas, chamadas de Constantes de Sistema, que podem ser usadas a
qualquer momento pelo programador. A principal vantagem de seu uso a clareza da codificao e a
conseqente facilidade de manuteno. Um bom exemplo do uso desse tipo de constante o de uma
aplicao que trate com dias da semana. Se a comparao do nmero do dia da semana de uma data com 1
for verdadeira, saberemos que esse dia um domingo, pois o VB identifica um domingo pelo valor 1. Existe
uma constante de sistema, de nome vbSunday, cujo valor 1, que foi criada justamente para ser usada em
casos como esse: ao invs do programador comparar o dia da semana com 1 e ter que se lembrar a toda hora
que 1 domingo, pode comparar com vbSunday, e seu cdigo ficar muito mais legvel. A lista completa das
constantes de dias da semana a seguinte:
Constante
vbSunday
vbMonday
vbTuesday
vbWednesday
vbThursday
vbFriday
vbSaturday

Valor
1
2
3
4
5
6
7

Dia da semana
Domingo
Segunda
Tera
Quarta
Quinta
Sexta
Sbado

Um observao importante que uma constante de sistema facilmente identificvel, pois seu nome
geralmente comea com vb repare na tabela acima. Voc tambm j viu algumas delas na lio anterior,
quando estudamos a funo StrConv: os valores vbUpperCase, vbLowerCase e vbProperCase so constantes
de sistema cujos valores so, respectivamente, 1, 2 e 3. Estudaremos mais algumas delas durante o curso.

Funes de Converso
Como j vimos anteriormente, a entrada de dados feita pelas caixas de texto, obrigando o uso de
conversores quando houver necessidade do dado ser numrico ou data. Os conversores so funes que
recebem dados de um tipo e os convertem em outro. Cada tipo de converso tem uma funo
correspondente. Por exemplo: no podemos usar um conversor de string para Byte se sabemos que o texto
representa um valor maior que 255, pois esse o valor limite do tipo Byte: o tamanho do dado no ser
suportado na converso.
A tabela a seguir mostra as funes para converso de dados tipo String em numricos. Considere que a
vari-vel vPi contm um texto correspondente ao valor de (3.1415926535):
Funo/Sintaxe
Val(<string>)
CInt(<string>)
CLng(<string>)
CSng(<string>)
CDbl(<string>)
CCur(<string>)

Exemplo
Val(vPi)
Cint(vPi)
CLng(vPi)
CSng(vPi)
CDbl(vPi)
Ccur(vPi)

Tipo Resultante
Long
Integer
Long
Single
Double
Currency

Resultado da converso
3
3
3
3.14159
3.1415926536
3.1416

Observao: as funes Val e CLng diferem-se na converso de um dado no numrico: Val a nica funo
que consegue tratar um dado String que no represente um valor. Nesse caso, ela retornar zero. As outras
funes, inclusive CLng, geram um erro de execuo se forem usadas para esse tipo de converso.
A converso de um dado tipo String em uma data feita pela funo CDate. Essa funo tambm gera um
erro de execuo se o texto a ser convertido no representar uma data vlida. Veja sua sintaxe e um exemplo
de utilizao:
CDate(<data>)
' Define a data:
vDia = "12/02/1969"
' Converte vDia para vDataNasc, do tipo Date.
vDataNasc = CDate(vDia)

Obs.: as linhas iniciadas com o apstrofo (') so comentrios.

Microsoft Visual Basic 6

25

O VB tambm possui uma funo para converso de expresses numrica ou data em dados tipo String: a
funo Str, cuja sintaxe :
Str(<valor>)

Por exemplo: o resultado da linha de comando Str(3.1416) ser o texto 3.1416.

Operadores
Depois que o programa recebe dados do usurio, o prximo passo fazer algo com esses dados,
normalmente clculos. Qualquer tipo de clculo envolve uma operao; portanto, os comandos especiais
para trabalhar com dados so chamados operadores. O VB fornece cinco tipos de operadores:

Operadores Aritmticos
So os operadores matemticos clssicos, que permitem somar, subtrair, multiplicar e dividir nmeros ou
variveis que contenham nmeros:
Operador
Funo
=
Nesse caso, atribuio de valor
+
Soma de dois nmeros

Subtrao de dois nmeros


Inverso de positivo/negativo
*
Multiplicao de dois nmeros
/
Diviso de dois nmeros, sendo que o resultado ser um
nmero com ponto flutuante (decimal), como 5.8547
\
Diviso de dois nmeros, sendo que o resultado ser um
nmero inteiro
Mod
Resto da diviso inteira de um nmero por outro
^

Exponenciao

Exemplo
Varivel = 0
vSoma = X + Y
vSalLiq = vSalBruto vImposto
vNegativo = vPositivo
vTotal = vPreo * vQuantidade
vTeste = 1910 / 25
(vTeste ser igual a 76.4)
vTeste = 1910 \ 25
(vTeste ser igual a 76)
vTeste = 1910 Mod 25
(vTeste ser igual a 10)
vQuadrado = vNmero ^ 2

Operador de String
O mais simples de todos. o operador &, que realiza a concatenao (unio) de dois ou mais dados tipo
String. Veja um exemplo:
vLinguagem = Visual & Basic

O comando acima resulta em Visual Basic, pois o dado aps o operador agrupado por este ao final do
primeiro, resultando na unio de ambos: foram concatenados. Tambm pode ser usado para isso o operador
+, mas recomenda-se usar & porque este converte dados de outros tipos antes da concatenao, evitando
erros de execuo.

Operadores de Datas
So aqueles que permitem efetuar clculos com dados tipo Date. Como as datas so representadas
internamente pelo VB como nmeros, podemos obter outras datas somando valores a elas, ou ento
determinar o nmero de dias entre uma data e outra atravs de subtrao. Veja a tabela:
Operador
Funo
Exemplo
+
Obter a partir da soma de uma data inicial e um nmero
vVencimento = Date + 30
uma outra data. O nmero ser entendido como (Date retorna a data de hoje, qual
quantidade de dias.
sero somados trinta dias)

Obter a diferena em dias entre duas datas


vAtraso = vPagto vVenc
(vAtraso receber o nmero de
dias entre o vencimento e o
pagamento)
Um lembrete: como o tipo Date tambm serve para indicar horas, para clculos de horas usamos os mesmos
operadores, mas trabalhamos com a parte decimal das variveis ou expresses.

Microsoft Visual Basic 6

26

Operadores Lgicos
So aqueles que manipulam os valores lgicos True (verdadeiro) e False (falso). O VB tambm representa
esses valores como 1 e 0, respectivamente. No entraremos em muitos detalhes com esses operadores
agora, pois eles sero mais bem estudados quando abordarmos as estruturas de controle.
Operador
Funo
And
E lgico: retorna verdadeiro se todos os valores da
expresso forem verdadeiros e falso em qualquer outro
caso
Or
Ou lgico: retorna falso somente se todos os valores da
expresso forem falsos e verdadeiros em qualquer outro
caso
Xor
Ou lgico exclusivo: a diferena desse operador para Or
que, se todos os valores da expresso forem verdadeiros,
ele retorna falso (no h erro, isso mesmo!)
Not
No lgico: nega, ou melhor, inverte o valor lgico da
expresso

Exemplo
Expresso1 And Expresso2
Expresso1 Or Expresso2
Expresso1 Xor Expresso2
Expresso1 = Not Expresso2

Operadores de Comparao
Servem para a comparao de dados. Assim como os operadores lgicos, estudaremos melhor esse assunto
juntamente com as estruturas de controle.
Operador
<
<=
>
>=
=
<>

Funo

Exemplo
Expresso1 < Expresso2
Expresso1 <= Expresso2
Expresso1 > Expresso2
Expresso1 >= Expresso2
Expresso1 = Expresso2
Expresso1 <> Expresso2

Menor que
Menor ou igual a
Maior que
Maior ou igual a
Nesse caso, igual a
Diferente de

Muito cuidado ao comparar strings com os operadores = e <>, pois duas strings so iguais apenas se
forem absolutamente idnticas. Isso quer dizer que, se voc fizer a comparao a = A, o resultado ser
falso, pois a (minsculo) possui um cdigo ASCII diferente de A (maisculo), e portanto no so iguais.

O Foco
No Windows, apenas uma janela (formulrio) ou controle pode, num dado instante, receber aes (cliques)
do mouse ou entradas via teclado. Dizemos que esse objeto possui o foco (focus, em ingls). O foco
geralmente indicado por uma legenda ou moldura destacada, ou ento pelo cursor estar posicionado no
controle, e pode ser alterado pela ao do usurio ou atravs de cdigo. Quando um objeto recebe o foco,
ocorre o evento Got-Focus, e quando ele o perde ocorre o evento LostFocus.
Outra caracterstica importante a ser observada que, quando um programa VB executado, o cursor se
posiciona no primeiro controle que voc inseriu no formulrio. Por exemplo: se o primeiro controle a ser
inserido foi o txtNum1, quando voc iniciar o aplicativo nele que o cursor estar posicionado. Usando a
tecla Tab, o cursor vai se alternando entre os campos, sempre seguindo a ordem em que os controles foram
colocados no formulrio. Isso chama-se ordem de tabulao e determinada pela propriedade TabIndex
dos controles.

Propriedade TabIndex
Como j foi dito, conforme voc insere controles em um formulrio eles recebem uma ordem para
recebimento do foco, que o valor da propriedade TabIndex. O primeiro controle receber o valor 0 para
TabIndex, o segundo 1, e assim por diante. Essa ordem pode ser mudada pelo programador, bastando alterar
o valor de TabIndex de modo a ajust-la. No caso de ser digitado para TabIndex um valor j pertencente a
outro controle, o VB vai reorganiz-los automaticamente. TabIndex no pode ser alterada em tempo de
execuo.

Microsoft Visual Basic 6

27

Propriedade TabStop
Essa propriedade impede o acesso ao controle pela tecla Tab se estiver desligada. Isso acontece porque
TabStop determina se o controle deve ou no atender ordem de tabulao. Mas importante ressaltar que
TabStop no evita que o usurio acesse o controle usando o mouse. Os valores possveis para TabStop so
True (TabStop ligada) ou False (TabStop desligada).

Propriedade Default
Existem, nas aplicaes para Windows, botes de comando que podem ser acionados pela tecla Enter,
independente da ordem de tabulao, como os botes Ok das caixas de dilogo do Windows. Quem
determina o acionamento do boto por Enter a propriedade Default, que pode receber os valores True ou
False. O objeto cuja propriedade Default for igual a True aparecer com um contorno mais espesso, dando a
indicao que, se Enter for pressionada, ele ser acionado.

Mtodo SetFocus
Para posicionar o foco em um determinado objeto em tempo de execuo usamos o mtodo SetFocus, sendo
que somente formulrios ou controles visveis podem receb-lo. A sintaxe a seguinte:
objeto.SetFocus

Modificando a Calculadora
Vamos agora aplicar o que aprendemos:
1. Se ainda no o fez, abra a VB e o projeto da calculadora que iniciamos na lio anterior;
2. Execute o aplicativo e verifique se a ordem de tabulao corresponde seguinte: txtNum1 = 0, txtNum2
= 1, cmdIgual = 2 e cmdLimpar = 3. Se necessrio, altere as propriedades TabIndex dos controles para
que fiquem de acordo com a ordem indicada;
3. No formulrio da calculadora, selecione o boto cmdIgual e pressione a tecla Delete. Lembra-se que
havia programao associada a ele? E agora que esse objeto apagado, para onde ela foi?
4. Abra a janela Cdigo e procure a seo General do formulrio. Note que a lista Proc agora contm, alm
da seo Declarations, a procedure cmdIgual_Click, que est l como uma procedure geral. Uma
procedure geral aquela que pode ser chamada por qualquer outra procedure do formulrio, ou seja,
funciona como uma subrotina ou funo. Ela no executada por estar associada a um objeto e a partir
de um evento, e sim quando chamada. Estudaremos isso melhor na prxima lio;
5. Agora altere o formulrio da calculadora como no exemplo:

6. Altere as propriedades dos novos objetos seguindo a tabela:

Microsoft Visual Basic 6

Objeto
Nome
Label
Label1
Label
Label2
Boto de Comando cmdMultiplicar
Boto de Comando cmdDividir
Boto de Comando cmdSomar
Boto de Comando cmdSubtrair

28

Outras Propriedades = Valor


Caption = Primeiro Nmero:
Caption = Segundo Nmero:
Style = 1 Graphical
Picture = Misc\MISC20.ICO
Style = 1 Graphical
Picture = Misc\MISC21.ICO
Style = 1 Graphical
Picture = Misc\MISC18.ICO
Style = 1 Graphical
Picture = Misc\MISC19.ICO

7. Chame a janela Cdigo e procure a procedure cmdIgual_Click (est na seo Declarations, lembra-se?) e
altere seu nome para cmdMultiplicar_Click. Ao trmino da alterao, o cdigo do antigo boto cmdIgual
ser associado ao boto cmdMultiplicar (veja nas caixas de combinao da janela Cdigo);
8. Altere a procedure cmdMultiplicar para que fique de acordo com a codificao a seguir. Note que foi
includa na programao a declarao das variveis como do tipo Single, e a funo de converso usada
foi substituda pela CSng, que apropriada a esse tipo:
Private Sub cmdMultiplicar_Click()
Dim vValor1 As Single
Dim vValor2 As Single
vValor1 = CSng(txtNum1.Text)
vValor2 = CSng(txtNum2.Text)
lblResultado.Caption = Format(vValor1 * vValor2, "###,##0.00")
End Sub

9. Selecione todo o texto da procedure, menos o cabealho e End Sub, e copie para a rea de transferncia
usando a opo Copy do menu Edit ou teclando Ctrl+C;
10. Abra a janela cdigo no evento Click de outro boto e cole o trecho de programao usando a opo
Paste do menu Edit ou ento Ctrl+V;
11. Faa as alteraes necessrias para que o boto funcione corretamente;
12. Repita esse procedimento para os outros operadores;
13. Grave seu trabalho e teste o aplicativo.

Microsoft Visual Basic 6

29

Lio 4: Estruturas de Controle


Assim como em outras linguagens, como C ou Pascal, o VB tambm possui estruturas de tomada de deciso
e para controle de repetio (loops). Nessa lio aprenderemos a lidar com essas estruturas e tambm mais
alguns recursos da linguagem.

Estruturas de Deciso
Estruturas de deciso so aquelas que permitem o desvio do fluxo do programa de acordo com uma
condio. As estruturas de deciso do VB so similares s encontradas em outras linguagens:

Estrutura If...Then
Executa um comando ou uma srie de comandos de acordo com uma condio. Se a condio no for
verdadeira, os comandos sero ignorados e a execuo do programa passa para o prximo comando aps a
estrutura. Essa estrutura pode ser escrita de duas maneiras:
If <condio> Then <comando>

ou:
If <condio> Then
<comando1>
<comando2>
...
<comandoN>
End If

O que diferencia as duas estruturas o nmero de comandos executados se <condio> for verdadeira. Na
primeira somente um comando executado, por isso esse comando pode vir logo aps a palavra reservada
Then, e o comando End If no necessrio. Exemplo:
If txtNome.Text = Empty Then MsgBox Um nome deve ser digitado!

Na segunda vrios comandos devem ser executados se a condio for verdadeira, ento cada comando
dever ser escrito em uma linha e o comando End If deve ser usado para fechar a estrutura. Veja dois
exemplo:
If txtNome.Text = Empty Then
MsgBox Um nome deve ser digitado!
End If
If vSaldoMdio > 1000 Then
lblStatus.Caption = Cliente Especial
vTaxaJuros = 0.015
End If

Estrutura If...Then...Else
Semelhante ao If...Then, porm contm um ou mais comandos para serem executados no caso da condio
ser falsa, indicados pelo Else da sintaxe:
If <condio> Then
<comandos para condio verdadeira>
Else
<comandos para condio falsa>
End If

A condio testada, e, se for verdadeira, o primeiro conjunto de comandos ser executado. Se for falsa, o
segundo conjunto ser executado. Exemplo:
If vSaldoMdio > 1000 Then
lblStatus.Caption = Cliente Especial
vTaxaJuros = 0.015
Else
lblStatus.Caption = Cliente Comum
vTaxaJuros = 0.018
End If

Microsoft Visual Basic 6

30

Estrutura Select Case


Quando houver a necessidade de se testar um nmero maior de situaes o VB nos oferece a estrutura Select
Case, que possibilita a construo de cdigo mais eficiente e legvel do que um encadeamento de Ifs. Sua
sintaxe a seguinte:
Select Case <expresso>
Case <valor1>
<comandos para valor1>
Case <valor2>
<comandos para valor2>
...
Case <valorN>
<comandos para valorN>
[Case Else]
[<comandos>]
End Select

Valor1, valor2, valorN so os valores que a expresso pode assumir: se a expresso assumir o valor1 os
comandos para o valor1 sero executados, se assumir valor2 os comandos para valor2 sero executados, e
assim por diante. Se o valor assumido no for nenhum dos valores indicados, os comandos aps o Case Else
sero executados. interessante destacar que Case Else opcional. Exemplo:
Select Case vCodigoCliente
Case 1
lblStatus.Caption =
vTaxaJuros = 0.012
Case 2
lblStatus.Caption =
vTaxaJuros = 0.015
Case 3
lblStatus.Caption =
vTaxaJuros = 0.018
Case Else
lblStatus.Caption =
End Select

Cliente Preferencial
Cliente Especial
Cliente Comum
Cdigo Invlido

Estrutura If...ElseIf
Essa uma variao do comando If que possui uma sintaxe muito parecida com o Select Case:
If <expresso1> Then
<comandos para expresso1>
ElseIf <expresso2> Then
<comandos para expresso2>
ElseIf <expresso3> Then
<comandos para expresso3>
...
ElseIf <expressoN> Then
<comandos para expressoN>
[Else]
[<comandos>]
End If

Por exemplo: o comando que codificamos com Select Case, se escrito com If...ElseIf, ficaria assim:
If vCodigoCliente = 1 Then
lblStatus.Caption = Cliente Preferencial
vTaxaJuros = 0.012
ElseIf vCodigoCliente = 2 Then
lblStatus.Caption = Cliente Especial
vTaxaJuros = 0.015
ElseIf vCodigoCliente = 3 Then
lblStatus.Caption = Cliente Comum
vTaxaJuros = 0.018
Else
lblStatus.Caption = Cdigo Invlido
End Select

Microsoft Visual Basic 6

31

Comando With
Esse um comando muito til quando temos vrias instrues que sero aplicadas a um mesmo objeto. Ele
informa ao VB qual objeto deve ser considerado sempre que em um comando qualquer no houver nenhuma
indicao da aplicao de uma propriedade, mtodo ou campo. Sua sintaxe :
With <objeto>
<comandos a serem aplicado em objeto>
End With

mais fcil entender vendo um exemplo prtico: suponhamos que voc precisa aplicar uma srie de
comandos a uma caixa de texto:
txtTeste.Visible = True
txtOutra.Visible = False
txtTeste.FontName = Arial
txtTeste.FontSize = 20
txtTeste.FontBold = True
txtTeste.Text = Isso um teste.

Com o comando With, voc poderia escrever o mesmo trecho de programao da seguinte maneira:
With txtTeste
.Visible = True
txtOutra.Visible = False
.FontName = Arial
.FontSize = 20
.FontBold = True
.Text = Isso um teste.
End With

Todas as propriedades onde no foi indicada a caixa de texto txtTeste esto sendo aplicadas ela da mesma
maneira, devido ao comando With. Note que a instruo aplicada txtOutra no mudou, mesmo estando
dentro do conjunto de comandos contidos entre o With e o End With.
importante destacar que podem existir um bloco With dentro de outro, sendo que o mais interno ter efeito
sobre todos os objetos a ele subordinados enquanto no for encontrado um End With fechando-o. Antes e
depois do bloco mais interno, quem tem efeito o With mais externo.

Evento Load
Load o evento que ocorre quando um formulrio lido. Usamos Load normalmente para a inicializao de
variveis privadas ou ento para escrever comandos e rotinas que devem ser executadas logo que o
formulrio aberto. Ou melhor: no evento Load de um formulrio usamos comandos e rotinas cuja execuo
necessria ao seu funcionamento e de seus controles de uma maneira geral.

O Aplicativo TesteCor
Vamos testar o que aprendemos em um novo aplicativo. Ele funcionar assim: quando um boto de comando
for clicado, a cor do texto de um label mudar para a prxima cor numa escala pr-definida, e o rtulo desse
label dever informar qual a cor atual. Por exemplo: se a cor atual for 2 Verde, passar a ser 3
Ciano. Um outro boto far o processo inverso, ou melhor: a cor passar a ser a anterior na escala.
Mas qual a melhor maneira de codificar esse processo todo? Vejamos:
Algumas cores sero modificadas a cada vez que um dos botes for clicado. Ento, precisamos guardar o
cdigo da cor atual em uma varivel que possa ser acessada por vrias procedures, j que cada evento
ligado a uma procedure. Resumindo: precisamos de variveis privadas.
Existe tambm uma seqncia de comandos repetida para alguns botes: a mudana de uma das cores do
label e a exibio do nome dessa cor. Ento, podemos criar uma subrotina que contenha essa seqncia
de comandos e possa ser chamada pela procedure Click de um dos botes, de modo a no haver
necessidade de repetio de cdigo.

Microsoft Visual Basic 6

32

Funes QBColor e RGB


Essas funes geram cores de acordo com valores que representam cdigos associados a elas. A diferena
entre ambas que QBColor s aceita os valores de 0 a 15, cada um representando uma cor diferente,
enquanto RGB permite a composio de uma cor pela mistura das cores bsicas Vermelho (Red), Verde
(Green) e Azul (Blue), da seu nome. A quantidade de vermelho, verde e azul que deve ser usada na
composio da cor representada por valores inteiros que variam de 0 a 255. Veja as sintaxes:
QBColor(<cdigo>)
RGB(<vermelho>,<verde>,<azul>)

Os cdigos aceitos por QBColor so os seguintes:


Cdigo
0
1
2
3

Cor
Preto
Azul
Verde
Ciano

Cdigo
4
5
6
7

Cor
Vermelho
Magenta
Amarelo
Branco

Cdigo
8
9
10
11

Cor
Cinza
Azul Claro
Verde Claro
Ciano Claro

Cdigo
12
13
14
15

Cor
Vermelho Claro
Magenta Claro
Amarelo Claro
Branco Brilhante

Na tabela abaixo esto os valores de vermelho, verde e azul necessrios para se conseguir algumas cores
com a funo RGB:
Cor Desejada
Preto
Azul
Verde
Azul Claro
Vermelho
Magenta
Amarelo
Branco

Vermelho
0
0
0
0
255
255
255
255

Verde
0
0
255
255
0
0
255
255

Azul
0
255
0
255
0
255
0
255

Como voc com certeza j percebeu, em nosso caso a funo QBColor a que melhor se encaixa. Mas
vamos comear a trabalhar: crie o formulrio de acordo com o exemplo:

Altere as propriedades dos objetos:


Objeto
Formulrio

Nome
FrmTeste

Label
Label

Label1
Label2

Outras Propriedades = Valor


Caption = Teste das Cores
StartUpPosition = 2 Center Screen
Caption = Cor do Texto:
Caption = Cor do Fundo:

Microsoft Visual Basic 6

Objeto

33

Label

Nome
LblTeste

Label

LblTexto

Label

LblFundo

Boto de Comando
Boto de Comando
Boto de Comando
Boto de Comando

cmdTextoAnt
cmdTextoProx
cmdFundoAnt
cmdFundoProx

Outras Propriedades = Valor


Caption = Teste das Cores
Alignment = 2 Center
BackColor = Branco
BorderStyle = 1 Fixed Single
Font = Arial, Negrito, tamanho 20
Caption = 0 Preto
BorderStyle = 1 Fixed Single
Font = Negrito
Caption = 15 Branco Brilhante
BorderStyle = 1 Fixed Single
Font = Negrito
Caption = Anterior
Caption = Prxima
Caption = Anterior
Caption = Prxima

Sendo assim, vamos criar nossa codificao:


1. Abra a janela Cdigo na seo Declarations. Vamos declarar as variveis privadas:
Dim vCorTexto As Integer
Dim vCorFundo As Integer

2. D agora um duplo click sobre uma rea do formulrio que no contenha nenhum controle. A janela
Cdigo aberta no evento Load do objeto Form, aonde vamos inicializar as variveis que declaramos no
item anterior:
Private Sub Form_Load()
vCorTexto = 0
vCorFundo = 15
End Sub

3. Acesse a procedure Click do boto cmdTextoAnt e escreva os comandos abaixo:


Private Sub cmdTextoAnt_Click()
vCorTexto = vCorTexto - 1
If vCorTexto < 0 Then vCorTexto = 15
MudaCorTexto
End Sub

Note como o comando If...Then foi usado: j que s existe um comando aps Then, End If no foi
necessrio. No entanto, poderamos escrever essa estrutura da seguinte maneira, com o mesmo
resultado:
If vCorTexto < 0 Then
vCorTexto = 15
End If

Voc deve ter percebido tambm que temos algo novo nessa procedure: o comando MudaCorTexto. Na
verdade, isso a chamada a uma subrotina, aquela que citamos quando estvamos planejando nosso
aplicativo. Podemos criar uma subrotina atravs da opo Add Procedure do menu Tools: o VB abre uma
caixa de dilogo onde devemos informar, entre outras coisas, o nome da subrotina que ser criada (veja a
figura na prxima pgina), mas existe uma maneira mais simples:

Criando uma Subrotina


A criao de subrotinas pode ser feita diretamente na janela Cdigo, bastando para isso fazer a declarao da
procedure (ou funco veremos mais adiante). Subrotinas podem ser declaradas como privadas ou pblicas.
Usamos a palavra reservada Sub para inicar uma procedure, e o comando End Sub para fech-la.
1. Com a janela Cdigo aberta, escolha a opo General na caixa de combinao Object. Proc deve estar
na seo Declarations;
2. Declare a procedure MudaCorTexto escrevendo o cabealho a seguir:
Public Sub MudaCorTexto()

Microsoft Visual Basic 6

34

A janela Add Procedure

3. Note que, quando terminar a declarao, o prprio VB insere o comando End Sub fechando a procedure,
que deve estar parecida com a da figura abaixo:

4. Vamos ento escrever os comandos da subrotina:


Private Sub MudaCorTexto()
lblTeste.ForeColor = QBColor(vCorTexto)
With lblTexto
Select Case vCorTexto
Case 0
.Caption = "0 - Preto"
Case 1
.Caption = "1 - Azul"
Case 2
.Caption = "2 - Verde"
Case 3
.Caption = "3 - Ciano"
Case 4
.Caption = "4 - Vermelho"
Case 5
.Caption = "5 - Magenta"
Case 6
.Caption = "6 - Amarelo"
Case 7
.Caption = "7 - Branco"
Case 8
.Caption = "8 - Cinza"
Case 9
.Caption = "9 - Azul Claro"
Case 10
.Caption = "10 - Verde Claro"
Case 11
.Caption = "11 - Ciano Claro"
Case 12
.Caption = "12 - Vermelho Claro"
Case 13
.Caption = "13 - Magenta Claro"
Case 14
.Caption = "14 - Amarelo Claro"
Case Else
.Caption = "15 - Branco Brilhante"

Microsoft Visual Basic 6

35

End Select
End With
End Sub

5. Execute o aplicativo, teste o funcionamento do boto e verifique se est de acordo com o planejado.
6. Escreva a procedure cmdTextoProx_Click: note que ela quase igual do boto cmdTextoAnt, s que
muda para a prxima cor na escala:
Private Sub cmdTextoProx_Click()
vCorTexto = vCorTexto + 1
If vCorTexto > 15 Then vCorTexto = 0
'Chamada da subrotina:
MudaCorTexto
End Sub

7. Escreva agora as procedures para os eventos click dos botes cmdFundoAnt e cmdFundoProx, e a
subrotina a ser chamada por elas, que deve ter o nome de MudaCorFundo. A propriedade a ser alterada
para exibir a nova cor a BackColor;
8. Teste o funcionamento de todos os botes e verifique se est de acordo com nosso planejamento.
9. Salve o formulrio com o nome de frmTeste e o projeto com o nome de TesteCor.

Estruturas de Repetio
As Estruturas de Repetio permitem que uma ou mais linhas de cdigo sejam executadas um determinado
nmero de vezes ou at que uma condio seja verdadeira. Resumindo: criam loops.

Estruturas Do While
A estrutura Do While (faa enquanto) permite que um determinado bloco de comandos seja executado
enquanto uma condio for verdadeira. Existem dois tipos de estruturas Do While:
Loop com teste a priori: como voc sabe, esse tipo de loop testa sua condio de trmino antes da execuo
dos comandos que esto nele contidos, o que implica na possibilidade desses comandos no serem
executados, caso a condio de trmino seja satisfeita logo de incio. A sintaxe para a criao de loops com
teste a priori em VB usando Do While a seguinte:
Do While <condio>
<comandos>
Loop

Loop com teste a posteriori: j esse tipo de loop testa sua condio de trmino aps a execuo dos
comandos nele contidos, ou seja, os comandos sero executados ao menos uma vez, mesmo que a condio
de trmino seja satisfeita logo de incio. A sintaxe de Do While com teste a posteriori a seguinte:
Do
<comandos>
Loop While <condio>

Veja exemplos da estrutura Do While usando os dois tipos de loop para a mesma operao:
Do While vTotal < 500
vTotal = vTotal + Quantidade
Loop

Do
vTotal = vTotal + Quantidade
Loop While vTotal < 500

Estruturas Do Until
Do Until quer dizer faa at que. Essa estrutura difere da anterior por executar os comandos do loop
enquanto a condio for falsa. Tambm existem duas sintaxes para Do Until:
Loop com teste a priori:

Do Until <condio>
<comandos>
Loop

Loops com teste a posteriori:

Do
<comandos>
Loop Until <condio>

Microsoft Visual Basic 6

36

Para que a diferena entre as duas estruturas fique mais clara, vamos alterar os exemplos usados em Do
While para estruturas Do Until. Note que foi necessria uma mudana na formulao da condio de trmino
do loop para obtermos o mesmo efeito:
Do Until vTotal >= 500
vTotal = vTotal + Quantidade
Loop

Do
vTotal = vTotal + Quantidade
Loop Until vTotal >= 500

Estrutura For Next


Essa estrutura deve ser usada quando se conhece de antemo o nmero de vezes que o loop ser executado.
Sua sintaxe a seguinte:
For <contador> = <valor inicial> To <valor final> [Step <valor do incremento>]
<comandos>
Next <contador>

Onde:
Contador uma varivel que ser usada para controlar o nmero de vezes que o loop ser executado;
Valor Inicial o primeiro valor que a varivel de controle assumir;
Valor Final o ltimo valor que o contador assumir na execuo do loop;
Valor do Incremento o valor que ser somado ou subtrado (pois podemos usar valores negativos) do
contador a cada vez que Next for executado.
Ao entrar em um loop For Next o VB faz com que o contador seja igual ao valor de incio. A cada vez que os
comandos so executados e a estrutura atinge o Next, o contador incrementado pelo valor indicado em Step
(que opcional se no for declarado ser assumido o valor 1) e comparado com o valor final indicado. Se o
contador ultrapassar o valor final, o loop ser terminado, caso contrrio a seqncia de comandos ser
executada novamente.
Exemplo: a estrutura abaixo calcula a soma dos nmeros de 1 a 100:
vSoma = 0
For i = 1 To 100
vSoma = vSoma + i
Next i

Com uma pequena mudana na estrutura, somaremos apenas os nmeros mpares entre 1 e 100:
vSoma = 0
For i = 1 To 100 Step 2
vSoma = vSoma + i
Next i

Comando Exit
O comando Exit permite que um loop ou uma subrotina sejam abandonados (terminem antes do final normal
de sua execuo). A sintaxe do comando Exit exige que indiquemos que estrutura queremos abandonar,
assim:
Para abandonar um loop Do................................: Exit
Para abandonar um loop For...............................: Exit
Para abandonar uma subrotina Sub...................: Exit
Para abandonar uma subrotina Function..........: Exit

Do
For
Sub
Function

And, Or, Xor e Not


Os operadores lgicos And, Or, Xor e Not (E, Ou, Ou exclusivo e No) so normalmente usados em
estruturas de controle para estabelecer uma relao entre duas ou mais condies em uma mesma expresso.
Como j vimos na lio 2, a funo desses operadores a seguinte:
And faz uma combinao das condies, retornando verdadeiro somente se todas as condies da
expresso forem verdadeiras.
Or funciona de maneira contrria: a expresso s ser falsa se todas as condies forem falsas.

Microsoft Visual Basic 6

37

Xor semelhante a Or, mas retorna falso se todas as condies forem verdadeiras.
Not inverte a condio de verdadeiro para falso e vice-versa.
Veja a tabela de resultados:
Operador

Condio 1
Verdadeiro
Verdadeiro
Falso
Falso
Verdadeiro
Verdadeiro
Falso
Falso
Verdadeiro
Verdadeiro
Falso
Falso

And

Or

Xor
Not

Condio 2
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso
Verdadeiro
Falso

Resultado
Verdadeiro
Falso
Falso
Falso
Verdadeiro
Verdadeiro
Verdadeiro
Falso
Falso
Verdadeiro
Verdadeiro
Falso
Falso
Verdadeiro

O Aplicativo Fatorial
Para testar o uso das estruturas de repetio, vamos escrever um pequeno aplicativo para calcular o fatorial
de um nmero inteiro (n!), que o resultado da multiplicao dos nmeros inteiros de 1 at n. Exemplo:
5! = 1

5 = 120

Veja o modelo e a tabela de propriedades no incio da prxima pgina. A codificao do aplicativo envolve
apenas um evento: quando o usurio clicar em cmdCalcular ou teclar Enter o fatorial do nmero digitado em
txtNmero ser calculado e exibido em lblFatorial.
1.

Inicie um novo projeto;

2. Formate o formulrio e altere as propriedades dos objetos como a seguir:

Objeto
Formulrio

Nome
frmFatorial

Label
Label
Caixa de Texto
Label

Label1
Label2
txtNmero
lblFatorial

Boto de Comando cmdCalcular

Outras Propriedades = Valor


Caption = Fatorial
StartUpPosition = 2 Center Screen
Caption = Digite um nmero:
Caption = O fatorial desse nmero :
Text =
Caption =
Alignment = 2 Center
BackColor = Branco
BorderStyle = 1 Fixed Single
Caption = Calcular
Default = True

Microsoft Visual Basic 6

38

3. Abra a janela Cdigo no evento Click do boto Calcular e escreva os comandos para o clculo:
Private Sub cmdCalcular_Click()
Dim vNmero As Double, vFatorial As Double
vNmero = Val(txtNmero.Text)
If vNmero < 0 Then
Beep
lblFatorial.Caption = Empty
Else
If vNmero = 0 Or vNmero = 1 Then
lblFatorial.Caption = 1
Else
vFatorial = 1
Do
vFatorial = vFatorial * vNmero
vNmero = vNmero - 1
Loop Until vNmero <= 1
lblFatorial.Caption = Str(vFatorial)
End If
End If
txtNmero.SetFocus
End Sub

Observaes:
Por definio, 0! = 1;
O comando Beep faz com que o computador emita um sinal sonoro (um apito).
Note o uso do operador Or no segundo If: poderamos escrever a condio vNmero <= 1 ao invs da
expresso usada, j que nesse ponto temos a certeza que vNmero no negativo (veja o If anterior),
mas fizemos isso para exemplificar o uso de Or;
Como exerccio de fixao, reescreva o loop do clculo do fatorial usando as estruturas Do While e For
Next. Tente tambm modificar as estruturas de teste a posteriori para teste a priori.
4. Grave o formulrio com o nome de frmFator e o projeto com o nome de Fatorial.

Microsoft Visual Basic 6

39

Lio 5: Tratamento de Erros de Execuo


Eis um assunto importantssimo: tratamento de erros irrecuperveis de execuo. Quando um erro
irrecupervel acontece, o VB emite uma mensagem informando o erro e encerra a execuo do aplicativo.
Esses erros acontecem sob vrias condies: um arquivo no encontrado, incompatibilidade entre tipos de
variveis, uma chamada de funo invlida, falta de memria, etc.
fcil conferirmos essa caracterstica: execute a calculadora que fizemos na lio 2 e, ao invs de um
nmero, digite uma letra qualquer nas caixa de textos. Quando voc executar um clculo, uma caixa de
mensagem com os dizeres Run-time Error aparecer informando o tipo do erro que ocorreu, e o aplicativo
ser encerrado.
Nessa lio aprenderemos a trabalhar com esses erros de modo que, mesmo que um deles acontea, o
aplicativo no seja encerrado. Adicionalmente, aprenderemos a usar as caixas de mensagem e de entrada da
dados do VB.

Comando On Error
Esse comando a chave para o tratamento de erros no VB: sua funo a de desviar o fluxo da execuo de
uma procedure para um pargrafo em caso de erro irrecupervel. Sua sintaxe a seguinte:
On Error GoTo <nome_de_pargrafo>

O pargrafo para o qual o fluxo ser desviado deve obrigatoriamente fazer parte da mesma procedure, e deve
estar posicionado no final da mesma, antes do comando End Sub. O nome do pargrafo identificado por ser
terminado com dois pontos :.

Comando Resume
O comando Resume indica ao VB que o aplicativo deve continuar a ser executado mesmo em caso de erro
irrecupervel. Veja a sintaxe:
Resume <destino>

Sendo que o <destino> da execuo no obrigatrio. Se no for informado, a execuo passa para a
prxima instruo na seqncia normal do programa. As opes para <destino> so:
Next: produz um desvio para a prxima instruo na seqncia normal da execuo do aplicativo;
0: faz com que o execuo retorne ao incio da procedure atual (parmetro recursivo);
Nome_De_Pargrafo: desvia a execuo para um pargrafo da procedure atual.

Objeto Err
O objeto Err indica o cdigo do erro irrecupervel ocorrido, atravs da propriedade Number, de tipo Integer.
Pelo cdigo informado por Err.Number podemos identificar o erro e escrever os comandos necessrios para
que o aplicativo continue funcionando. Outra propriedade interessante do objeto Err a Description, que
contm a descrio do erro ocorrido.
Para obter a lista completa com os cdigos dos erros tratveis do VB, acesse o menu Help e escolha a
seqncia Contents Trappable Errors Miscellaneous Messages.
Vejamos ento um exemplo da utilizao desses recursos:
Public Sub Exemplo_Erro()
Dim vQualquer As Integer
On Error GoTo Erro_Na_Converso
vQualquer = CInt(txtNmero.Text)
Erro_Na_Converso:
If Err.Number = 13 Then
'13 o cdigo de erro para Tipo Incompatvel de Dados:
vQualquer = 0
Resume Next
End If
End Sub

Microsoft Visual Basic 6

40

Como j citamos anteriormente, a funo CInt gera um erro irrecupervel em caso de tipo incompatvel de
dados (Type Mismatch) na tentativa de converso de uma string que no represente um valor. Na procedure
Exemplo_Erro estamos dizendo para o VB que, se isso acontecer, a execuo deve ser desviada para o
pargrafo Erro_Na_Converso, onde testamos o valor de Err.Number e escrevemos a codificao necessria
para que o programa continue normalmente. O comando Resume Next indica ento ao VB que a execuo
deve ser desviada para a prxima instruo na seqncia normal da programao.

Caixas de Mensagem
At agora falamos sobre o tratamento de erros mas no informamos ao usurio o que exatamente aconteceu,
o que muito importante em qualquer aplicativo que se preze. Uma das formas que o VB nos oferece para
fornecer mensagens ao usurio so as caixas de mensagens padronizadas. Por exemplo: supondo que o
campo Nome de um aplicativo qualquer no possa ser deixado em branco pelo operador, se isso acontecer,
poderamos exibir na tela uma caixa de mensagem como a da figura:

Caixas de mensagem padronizadas como essa podem ser obtidas com o comando MsgBox e a funo
MsgBox. Veja a sintaxe de ambos:
MsgBox <mensagem>,<tipo>,<ttulo>
<varivel> = MsgBox(<mensagem>,<tipo>,<ttulo>)

Onde:
Mensagem: uma string com a mensagem a ser exibida pela caixa. Esse o nico parmetro obrigatrio
da sintaxe. No nosso exemplo: O campo Nome deve ser preenchido!;
Tipo: um valor obtido a partir da soma dos cdigos que especificam o nmero e o tipo dos botes
exibidos pela caixa, o cone a ser utilizado, o boto default e a modalidade de exibio da caixa. No
nosso exemplo esse valor 4144. Esse valor tambm pode ser obtido a partir de algumas constantes de
sistema. Veja a seguir uma lista com os valores admitidos e seu significado;
Ttulo: uma string a ser exibida como ttulo da caixa. No nosso exemplo: Aviso;
Varivel (somente para a funo): nome da varivel que receber o nmero do boto selecionado pelo
usurio.
Veja a seguir as constantes de sistema usadas para se obter o tipo da caixa com seus respectivos valores:
Constante
vbOKOnly
vbOKCancel
vbAbortRetryIgnore
vbYesNoCancel
vbYesNo
vbRetryCancel
vbCritical

Valor
0
1
2
3
4
5
16

Descrio
Exibe somente o boto OK.
Exibe os botes OK e Cancelar.
Exibe os botes Abortar, Repetir e Ignorar.
Exibe os botes Sim, No e Cancelar.
Exibe os botes Sim e No.
Exibe os botes Repetir e Cancelar.
Exibe o cone Mensagem Crtica :

vbQuestion

32

Exibe o cone Consulta de Aviso:

vbExclamation

48

Exibe o cone Mensagem de Aviso:

vbInformation

64

Exibe o cone Mensagem de Informao:

vbDefaultButton1
vbDefaultButton2
vbDefaultButton3

0
256
512

O primeiro boto o default.


O segundo boto o default.
O terceiro boto o default.

Microsoft Visual Basic 6

Constante
vbDefaultButton4
vbApplicationModal
vbSystemModal

41

Valor
Descrio
768 O quarto boto o default.
0
Janela restrita do aplicativo: o usurio deve responder caixa de
mensagem antes de continuar o trabalho no aplicativo atual.
4096 Janela restrita do sistema: todos os aplicativos so suspensos at que o
usurio responda caixa de mensagem.

No nosso exemplo, o valor 4144 pois usamos apenas o boto Ok (0), o cone Exclamao (48), o boto Ok
o default por ser o nico (0), e a modalidade sistema (4096). Ento, 0 + 48 + 0 + 4096 = 4144. O
comando completo para se obter a caixa de mensagem do exemplo a seguinte:
MsgBox O campo Nome deve ser preenchido!, 4144, Aviso

Podemos tambm usar as constantes correspondentes configurao desejada:


MsgBox O campo Nome deve ser preenchido!, _
vbOk + vbExclamation + vbDefaultButton1 + vbSystemModal, Aviso

Ou ento apenas aquelas que tero algum efeito na configurao (so diferentes de zero):
MsgBox O campo Nome deve ser preenchido!, _
vbExclamation + vbSystemModal, Aviso

Ou ainda uma varivel:


vConf = vbExclamation + vbSystemModal
MsgBox Nome deve ser preenchido!, vConf, Aviso

Obs.: o smbolo _ (subscrito) indica continuao da codificao na prxima linha.

Identificando o boto selecionado


A diferena entre o comando MsgBox e a funo MsgBox que a funo retorna um nmero inteiro
representando o boto selecionado pelo usurio na caixa de mensagem. Assim, podemos identificar esse
boto e executar a ao correspondente a ele. Veja os valores retornados por MsgBox:
Constante
vbOK
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes
vbNo

Valor
1
2
3
4
5
6
7

Descrio
Selecionado o boto Ok.
Selecionado o boto Cancelar.
Selecionado o boto Abortar.
Selecionado o boto Repetir.
Selecionado o boto Ignorar.
Selecionado o boto Sim.
Selecionado o boto No.

Por exemplo: suponha um aplicativo qualquer que possua um boto de comando para encerrar sua execuo,
mas que antes disso solicite ao usurio uma confirmao. A programao para isso poderia ser a seguinte:
Private Sub cmdFechar_Click()
Dim vOk As Integer
vOk = MsgBox("Tem certeza que deseja encerrar o programa?", 36, "Sada")
If vOk = 6 Then
End
End If
End Sub

Ou ento, se usarmos as constantes de sistema:


Private Sub cmdFechar_Click()
Dim vOk As Integer
vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _
vbYesNo + vbQuestion, "Sada")
If vOk = vbYes Then
End
End If
End Sub

Em qualquer dos casos, a caixa de mensagem resultante da funo MsgBox acima a seguinte:

Microsoft Visual Basic 6

42

Mas qual a vantagem de se usar constantes de sistema se a codificao fica maior? A resposta :
documentao! Leia novamente os dois trechos de programao e seja honesto: qual deles ficou mais fcil de
entender?

Caixas de Entrada de Dados


Alm das caixas de mensagem o VB dispe de outro tipo de caixa de dilogo padronizada: as caixas de
entrada de dados, que so obtidas com a funo InputBox. A sintaxe dessa funo a seguinte:
<varivel> = InputBox(<mensagem>,<ttulo>,<valor padro>)

Onde:
Mensagem: nico parmetro obrigatrio, um texto a ser exibida dentro da caixa como legenda;
Ttulo: uma string a ser exibida como ttulo da caixa;
Valor padro: o valor que a varivel deve receber de InputBox caso o usurio no digite nada.
Importante: a funo InputBox sempre retorna um dado tipo string, portanto se voc precisar de um dado de
qualquer outro tipo dever convert-lo.
Por exemplo: suponha um boto de comando que permita a digitao de um desconto para a emisso de uma
nota fiscal de compra. A programao desse boto poderia ser a seguinte:
Private Sub cmdDesconto_Click()
Dim vDesconto As String
vDesconto = InputBox("Digite o valor do desconto:", _
"Digitao de desconto")
End Sub

A InputBox resultante dessa programao a da figura abaixo:

O Aplicativo Carro
Para usar os conceitos vistos nessa lio, vamos criar um aplicativo que calcule o valor da prestao mensal
para financiamento de automvel. Antes de comear, vamos estudar um novo controle que ser usado em
nosso projeto:

Caixa de Imagem (ImageBox)


Esse controle muito semelhante a uma PictureBox, pois tambm exibe figuras ou cones nos
formulrios. A principal diferena que responde ao evento Click, funcionando como um boto de
comando quando clicado. Outra diferena importante a propriedade Stretch, que pode aceitar os valores
True e False: quando Stretch = True, o tamanho da imagem ser ajustado ao tamanho da caixa de imagem,
permitindo a exibio de figuras que devido ao seu tamanho no caberiam em um formulrio. Se Stretch =
False, ento o tamanho da ImageBox que ser ajustado ao da figura.
Bem, vamos comear: inicie um novo projeto e formate o formulrio de acordo com o modelo:

Microsoft Visual Basic 6

43

As propriedades dos objetos so as seguintes:


Objeto
Formulrio

Nome
frmCarro

Caixa de Imagem

imgCarro

Label
Label
Label
Label
Label
Label
Label

Label1
Label2
Label3
Label4
Label5
Label6
lblValFinanciado

Label

lblPrestMensal

Caixa de Texto
Caixa de Texto
Caixa de Texto
Caixa de Texto
Boto de Comando

txtValor
txtEntrada
txtJuros
txtMeses
cmdCalcular

Boto de Comando cmdFechar

Outras Propriedades = Valor


Caption = Financiamento de Automvel
StartUpPosition = 2 Center Screen
Stretch = True
BorderStyle = 1 Fixed Single
Picture = CARRO.WMF
(Procure na pasta ClipArt\Popular do diretrio do MS-Office)
Caption = Valor do Financiamento (R$):
Caption = Entrada (R$):
Caption = Juros / ms (%):
Caption = N de meses:
Caption = Valor Financiado (R$):
Caption = Prestao Mensal (R$):
Caption =
Alignment = 2 Center
BackColor = Branco
BorderStyle = 1 Fixed Single
Caption =
Alignment = 2 Center
BackColor = Branco
BorderStyle = 1 Fixed Single
Text =
Text =
Text =
Text =
Caption = &Calcular
Enabled = False
Caption = &Fechar
Enabled = False
TabStop = False

Inicialmente o boto Calcular estar desabilitado pois s aps a digitao de todos os dados necessrios o
clculo da prestao mensal poder ser feito. A frmula para esse clculo a seguinte:

Prestao Mensal = Valor Financiado * Juros * (1 + Juros)Meses


(1 + Juros)Meses - 1

Microsoft Visual Basic 6

44

Antes de comear a programar, vamos conhecer um evento que ser necessrio para nossa codificao:

Evento KeyPress
Sempre que pressionada uma tecla, estando o foco sobre um controle, ocorre o evento KeyPress. Associada
a ele est a varivel KeyAscii, que carregada com o cdigo ASCII da tecla pressionada. Dessa maneira
podemos identificar quando o usurio usa uma tecla qualquer, e, se for o caso, escrever um cdigo a ser
executado quando essa tecla for utilizada. Por exemplo: podemos fazer com que o foco passe para outro
controle quando a tecla Enter for pressionada numa caixa de texto. Sabendo-se que o cdigo ASCII da tecla
Enter 13, correspondente constante vbKeyReturn, o cdigo para isso poderia ser o seguinte:
Private Sub Text1_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then Text2.SetFocus
End Sub

Propriedade KeyPreview
Essa propriedade dos formulrios indica se, quando pressionada uma tecla qualquer, ela deve ser ou no
identificada pelo formulrio. Os valores possveis so True (habilita a verificao das teclas pelo formulrio)
e False (desabilita). Usando esse recurso e a funo SendKeys, podemos fazer o Enter funcionar em qualquer
campo, atravs do evento KeyPress do formulrio (as linhas precedidas pelo apstrofo so
comentrios):
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
'Identifica o Enter
SendKeys "{Tab}"
'Grava no buffer do teclado um Tab
KeyAscii = 0
'Zera KeyAscii para eliminar o Enter
End If
End Sub

Na procedure acima, a cada vez que o usurio teclar Enter em um controle para o qual no surta efeito, ele
ser substitudo por uma tabulao, e o foco passar para o prximo controle na seqncia de TabIndex.
Mas vamos codificar o aplicativo:
1. Abra a janela Cdigo e acesse a seo Declarations. Vamos declarar as variveis que recebero os dados
digitados como privadas, pois elas sero acessadas por vrias procedures:
Dim
Dim
Dim
Dim

vValor As Currency
vEntrada As Currency
vJuros As Single
vMeses As Integer

2. V agora ao evento Form_Load. Vamos inicializar as variveis:


Private Sub Form_Load()
vValor = 0
vEntrada = 0
vJuros = 0
vMeses = 0
End Sub

3. Em tempo de execuo, faremos com que o foco passe de uma caixa de texto para outra quando
teclarmos Enter. Para isso vamos alterar o evento KeyPress do formulrio. D um duplo clique sobre
uma parte vazia do formulrio e procure o evento KeyPress na lista de procedures;
4. Escreva a procedure como segue:
Private Sub Form_KeyPress(KeyAscii As Integer)
If KeyAscii = vbKeyReturn Then
SendKeys "{Tab}"
KeyAscii = 0
End If
End Sub

5. Vamos testar o evento KeyPress: execute o aplicativo e d um Enter na caixa de texto txtValor. Nada
aconteceu? porque a propriedade KeyPreview do formulrio no est habilitada. Saia do aplicativo
para fazer a correo;
6. Altere o valor da propriedade KeyPreview do formulrio para True;

Microsoft Visual Basic 6

45

7. Teste o aplicativo novamente: se tudo correu bem, o foco passou para a caixa txtEntrada. Desta, o foco
vai para txtJuros, e assim por diante. Aps testar em todos os controles, saia do aplicativo para podermos
continuar;
8. Agora vamos fazer a codificao necessria para carregar a varivel vValor. Como voc pode observar,
como o tipo de vValor Currency, usaremos a funo CCur para converter o texto contido em txtValor
para a varivel, o que pode gerar um erro irrecupervel de execuo se txtValor contiver qualquer texto
que no represente um valor. Devemos ento usar uma rotina de tratamento de erro para evitar
problemas. Mas, onde escrever essa rotina? Podemos fazer isso no evento LostFocus do controle, pois
assim uma mensagem de erro ser exibida assim que txtValor perder o foco, se esta contiver um dado
invlido. Abra a janela cdigo no evento LostFocus do controle txtValor e escreva a codificao a
seguir:
Private Sub txtValor_LostFocus()
On Error GoTo Valor_Errado
vValor = CCur(txtValor.Text)
Valor_Errado:
If Err = 13 Then
MsgBox "Dado invlido na digitao do valor do financiamento", _
vbExclamation + vbSystemModal, "Aviso"
txtValor.Text = InputBox("Informe o valor correto do financiamento:", _
"Valor do Financiamento")
Resume 0
End If
End Sub

Note que usamos a funo InputBox() para solicitar ao usurio que digite um dado vlido em caso de
erro de execuo;
Note tambm que o comando Resume seguido do valor 0, o que vai fazer com que o VB retorne ao
incio da procedure em caso de erro e refaa a converso do contedo de txtValor. Isso importante
pois, caso o usurio insista em escrever um dado invlido na caixa de entrada, o processo todo ser
repetido.
9. Vamos testar nossa procedure. Execute o aplicativo e escreva um texto qualquer na caixa txtValor.
Digamos, aaa. O resultado deve ser o da figura a seguir:

10. Clicando no boto Ok, dever aparecer a caixa de entrada:

Microsoft Visual Basic 6

46

11. Agora digite um valor correto, como 12000. O texto aparecer na caixa txtValor e o foco passar para
txtEntrada. Saia do aplicativo para continuarmos a programao;
12. Usando a procedure txtValor_LostFocus como base, escreva as rotinas para o evento LostFocus das
outras caixas de texto. Lembre-se que a varivel vJuros do tipo Single, e portanto voc deve usar a
funo CSng para a converso. Alm disso, o valor obtido deve ser dividido por 100, pois um
percentual. J para a varivel vMeses, que Integer, voc dever usar a funo CInt;
13. Aps isso, ainda falta escrevermos a rotina de clculo que ser chamada pelo boto cmdCalcular. V at
a seo Declarations e adicione uma subrotina de nome Prestao;
14. Na subrotina Prestao escreva a seguinte codificao (note o uso do operador And):
Public Sub Prestao()
Dim vValFinanciado As Currency
Dim vPrestMensal As Currency
If vValor <> 0 And vJuros <> 0 And vMeses <> 0 Then
If vEntrada >= vValor Then
MsgBox "O valor da Entrada deve ser menor que o do Financiamento", _
vbExclamation + vbSystemModal, "Aviso"
lblValFinanciado.Caption = Empty
lblPrestMensal.Caption = Empty
txtEntrada.SetFocus
Exit Sub
End If
vValFinanciado = vValor - vEntrada
vPrestMensal = vValFinanciado * vJuros * (1 + vJuros) ^ vMeses / _
((1 + vJuros) ^ vMeses - 1)
lblValFinanciado.Caption = Format(vValFinanciado, "###,##0.00")
lblPrestMensal.Caption = Format(vPrestMensal, "###,##0.00")
cmdCalcular.Enabled = True
cmdFechar.Enabled = True
Else
lblValFinanciado.Caption = Empty
lblPrestMensal.Caption = Empty
End If
End Sub

Observaes:
O primeiro If verifica se todos os dados necessrios para o clculo esto disponveis;
O segundo If verifica se o valor da entrada no maior ou igual ao do financiamento, pois seno o
resultado do clculo seria uma prestao negativa (se que isso existe...);

Microsoft Visual Basic 6

47

A propriedade Enabled dos botes de comando s foi habilitada dentro dessa rotina pois assumimos
que o usurio far ao menos um clculo quando acionar o programa.
15. Agora s falta fazer com que o boto cmdCalcular execute a subrotina:
Private Sub cmdCalcular_Click()
Prestao
End Sub

16. Voc tambm pode fazer que, aps o primeiro clculo, toda vez que um valor for alterado os resultados
sejam imediatamente atualizados. Para isso, altere a procedure txtValor_LostFocus como a seguir:
Private Sub txtValor_LostFocus()
On Error GoTo Valor_Errado
vValor = CCur(txtValor.Text)
' s incluir a linha abaixo:
Prestao
Valor_Errado:
If Err = vbKeyReturn Then
MsgBox "Dado invlido na digitao do valor do financiamento", _
vbExclamation + vbSystemModal, "Aviso"
txtValor.Text = InputBox("Informe o valor correto do financiamento:", _
"Valor do Financiamento")
Resume 0
End If
End Sub

17. Faa o mesmo para as outras caixas de texto;


18. Nosso aplicativo est praticamente terminado. S falta a programao do boto cmdFechar. Nesse boto,
vamos solicitar ao usurio uma confirmao de que ele realmente deseja sair do programa, usando a
funo MsgBox:
Private Sub cmdFechar_Click()
Dim vOk As Integer
vOk = MsgBox("Tem certeza que deseja encerrar o programa?", _
vbYesNo + vbQuestion, "Sada")
If vOk = vbYes Then End
End Sub

19. Grave o formulrio com o nome de frmCarro e o projeto com o nome de Carro;
20. Por fim, execute o aplicativo e teste-o bem. Procure usar vrios valores diferentes nas caixas de texto
para observar os resultados. Tente tambm entrar com dados invlidos e verifique se o comportamento
do projeto o esperado. Se necessrio, faa os ajustes na programao para que seu funcionamento seja
perfeito.

Microsoft Visual Basic 6

48

Lio 6: Iniciando a Construo de um Sistema


Um projeto em VB um conjunto de objetos. At agora trabalhamos com apenas um objeto em cada projeto:
o formulrio. Sim, o formulrio tambm um objeto: voc no reparou que ele tambm possui propriedades
e responde a mtodos? Obviamente, em um aplicativo mais complexo, como ser o caso do sistema de
Controle de Bibliotecas que comearemos a desenvolver nessa lio, alm do formulrio principal existem
outros destinados a entrada de dados, exibio de mensagens ou de resultados de consultas, etc.
Existem outros tipos de objetos que podem ser adicionados ao projeto, como mdulos de programao,
relatrios, controles ActiveX e mdulos de classe. O que os caracteriza o fato de serem gravados em
arquivos separados. Assim, o projeto pode ser considerado como um conjunto de arquivos, cada um deles
correspondente a um objeto.

Trabalhando com Vrios Formulrios


Quando estamos desenvolvendo um projeto do qual vrios formulrios faro parte, obviamente vamos
precisar adicionar a ele formulrios novos e, muitas vezes, prontos. Alm disso, uma aplicao Windows
freqentemente trabalha com outros tipos de formulrios, diferentes daquele que usamos at agora.

Adicionando formulrios ao projeto


Para incluir um novo formulrio ou um formulrio existente em um projeto, siga os seguintes passos:
Abra o menu Project do VB;
Escolha a opo Add Form: a janela Add Form ser aberta, com vrias opes de tipos de formulrios:

Se desejar acrescentar um formulrio j existente, clique na aba Existing e indique sua localizao;
Se o formulrio ainda no existe (formulrio novo), voc deve escolher um dos tipos da aba New. Para
um formulrio padro, escolha a opo Form.
Em ambos os casos, o formulrio ser includo na lista Forms da janela Projeto. A partir desse momento, ele
poder ser manipulado como outro qualquer. Vejamos alguns recursos necessrios a esse trabalho:

Mtodo Show
Esse mtodo usado para carregar e exibir um formulrio. Sua sintaxe :
<formulrio>.Show <modalidade>

Microsoft Visual Basic 6

49

Onde <formulrio> o nome do formulrio, e <modalidade> indica se o formulrio ser exibido como
modal ou no. Um formulrio modal aquele que deve ser obrigatoriamente encerrado para que o aplicativo
continue: enquanto ele estiver ativo, nenhuma outra janela ou aplicativo pode ser acessado. Para indicar se o
formulrio deve ser exibido como modal usamos a constante de sistema vbModal:
frmMeuForm.Show vbModal

Se a modalidade for omitida, ser assumida como no-modal.

Mtodo Refresh
Durante a execuo do sistema, s vezes acontece uma situao que impede a exibio correta do formulrio.
Normalmente, isso ocorre quando alteramos um objeto de um formulrio que j est sendo exibido em uma
procedure externa a ele, ou ento quando estamos executando aes que demandam uma certa quantidade de
recursos do sistema, como na abertura de arquivos. O mtodo Refresh corrige esse problema simplesmente
provocando a reconstruo imediata do formulrio. Outros objetos, como os controles Data, tambm aceitam
o mtodo Refresh.

Comando Unload
O comando Unload fecha um formulrio e devolve o controle do sistema ao formulrio que o chamou. Sua
sintaxe muito simples: basta indicar o nome do formulrio. Exemplo:
Unload frmMeuForm

Eliminando formulrios do projeto


Para excluir um formulrio do projeto, basta clicar com o boto direito do mouse sobre o nome do formulrio
na janela Projeto e escolher a opo Remove <nome do formulrio> no menu de contexto.

Formulrios MDI
Um formulrio MDI (Multiple-Document Interface) funciona como uma janela que contm outros
formulrios a ela subordinadas (chamados de MDIChild), atuando em background para uma aplicao. Para
criar um formulrio MDI voc deve escolher a opo Add MDI Form no menu Project do VB. Por suas
caractersticas, o formulrio principal de uma aplicao freqentemente criado como MDI. Veja as
principais:
Uma aplicao pode conter apenas um formulrio MDI, mas pode conter vrios MDI Child Forms;
Se o formulrio MDIChild contm uma estrutura de menus, a barra de menu do formulrio MDI
automaticamente atualizada e o menu exibido passa a ser o do MDIChild ativo. Falaremos mais sobre
menus logo adiante;
Se o formulrio MDI minimizado, todos os formulrios MDIChild abertos tambm so;
Se um formulrio MDIChild minimizado, aparece como um cone no rodap do MDI;
A maioria das propriedades, mtodos e eventos dos formulrios MDI so os mesmos de um formulrio
comum, mas um MDI no pode ser aberto como modal;
Um formulrio MDI s pode conter menus e o controle PictureBox, ou ento controles customizados
preparados para isso. Voc pode usar outros controles no formulrio MDI apenas se criar uma
PictureBox e ento inserir esses controles dentro dela, como se fosse uma moldura;
Um formulrio MDIChild no aceita a propriedade StartUpPosition.

Propriedade MDIChild
Essa propriedade indica se um formulrio ser exibido como MDIChild ou no. A propriedade MDIChild s
tem efeito quando existe no projeto um formulrio MDI. Nesse caso, qualquer outro formulrio que no o
MDI (obviamente) poder ser configurado como MDIChild.
Quando o valor de MDIChild True, o formulrio poder ser maximizado, minimizado ou movido dentro do
formulrio principal (MDI). Assim como o MDI, um formulrio MDIChild no pode ser aberto como modal.
MDIChild no pode ser alterada em modo de execuo, e o valor padro False.

Microsoft Visual Basic 6

50

Startup Object
O objeto de abertura (ou Startup Object) o primeiro objeto a ser executado quando iniciamos um
aplicativo. Quando criamos um novo projeto, o formulrio Form1 definido como objeto de abertura, por ser
o primeiro objeto a fazer parte dele. Mas qualquer formulrio pode ser configurado como Startup. Para
alterar o objeto de abertura, siga as instrues a seguir:
Abra o menu Project;
Escolha a opo Project Properties: ser exibida a janela Project Properties:

A caixa de combinao Startup Object contm os objetos que podem ser configurados como Startup:
note que s so exibidos os formulrios contidos no projeto (alm da sub Main, que estudaremos mais
adiante);
Indique na combo qual ser o objeto de abertura e clique em Ok.

Menus
A barra de menus um dos mais importantes componentes de um aplicativo Windows. O VB dispe de uma
poderosa e prtica ferramenta para o projeto de menus: o Editor de Menu (Menu Editor veja a figura da
prxima pgina). Com ele, em poucos passos voc pode criar menus que funcionam exatamente como nos
aplicativos mais conhecidos.
Existem algumas regras de padronizao que devem ser seguidas na criao de menus para os aplicativos
Windows:
O usurio j sabe o que esperar em determinados menus, quando presentes em um aplicativo. No menu
Editar, por exemplo, ele espera encontrar ao menos as opes Copiar, Recortar e Colar. Outros menus
tambm possuem opes padronizadas: Abrir, Salvar e Imprimir so freqentemente encontradas no
menu Arquivo;
As opes da barra de menus devem permitir o acesso atravs da combinao Alt+Letra Sublinhada;
Para as opes mais comuns interessante que existam teclas de atalho. Mas, cuidado: algumas teclas de
atalho tambm so padronizadas no Windows. Por exemplo: Ctrl+C o atalho para copiar algo para a
rea de transferncia, no importa qual seja o aplicativo;
Itens relacionados devem ser agrupados e separados dos demais por barras separadoras. Exemplo: as
opes Localizar, Localizar Prximo e Substituir do menu Editar do WordPad;

Microsoft Visual Basic 6

51

A janela Menu Editor

Quando o item leva o usurio a uma caixa de dilogo, seu rtulo deve ser seguido de reticncias (...).
Quando leva a um submenu, deve ser seguido de uma seta ;
Itens selecionveis, como a opo Rgua do menu Exibir do WordPad, devem ser precedidos pela marca
de seleo quando estiverem ativos;
Quando algum pr-requisito para o funcionamento de uma opo no estiver sendo cumprido, ela deve
aparecer desabilitada. Por exemplo: se no houver texto selecionado, as opes Copiar e Recortar no
devem estar disponveis.
Para acessar a janela Menu Editor, o formulrio deve estar selecionado. Escolha ento a opo no menu
Tools do VB, acione a combinao Ctrl+E ou escolha o boto Menu Editor na barra de ferramentas.
Vamos descrever alguns componentes da janela Menu Editor:
Caption: neste campo deve ser digitado o rtulo que aparecer na barra de menus ou dentro do menu:
corresponde propriedade Caption de um controle;
Name: neste campo informamos o valor da propriedade Name do menu;
ShortCut: permite a definio de uma tecla de atalho;
Checked: permite a definio da propriedade Checked (marca de seleo);
Enabled e Visible: o mesmo que as propriedades Enabled e Visible dos controles;
Index: quando o menu fizer parte de uma matriz, permite indicar seu ndice;
Botes Up e Down: permitem a movimentao do menu selecionado para cima ou para baixo, mudando
sua posio na barra;
Botes Left e Right: permitem a mudana de nvel do menu, ou seja: se a opo aparecer na barra de
menu ou se far parte de um submenu. Podem ser criados at quatro nveis;

Microsoft Visual Basic 6

52

Boto Next: move a seleo para a prxima linha, se houver. Se no houver, insere uma nova linha no
final da lista;
Boto Insert: insere uma nova linha acima da selecionada;
Boto Delete: exclui da lista a linha selecionada.

O Aplicativo Bibliotecrio
Para exercitar os vrios assuntos que veremos nessa lio, vamos iniciar a construo no nosso sistema, que
chamaremos de Bibliotecrio:
1. Inicie um novo projeto;
2. Remova a formulrio Form1 do projeto;
3. Adicione ao projeto um formulrio MDI, e altere suas seguintes propriedades:
Name: frmBiblio
Caption: Bibliotecrio Controle de Acervo de Bibliotecas
BackColor: Amarelo Claro (ou outra de sua preferncia mas no escolha uma cor muito forte para
no ofuscar o coitado do usurio);
Icon: Writing\Books01.ICO;
WindowState: 2 - Maximized
4. Configure-o como Startup Object. Aproveite que j est na janela Project Properties e altere tambm a
propriedade Project Name para Bibliotecrio. Essa propriedade equivale a um rtulo a ser exibido na
janela Project para identificao do projeto, mas sua definio no obrigatria;
5. Salve o formulrio com o nome de FrmBiblio e o projeto como Bibliotecario;
6. Abra a janela Menu Editor;
7. Defina os campos para a primeira opo do nosso menu: Caption = &Cadastros e Name =
mnuCadastros;
8. Clique no boto Next para passar para a prxima linha:

9. O prximo item a opo Livros do menu Cadastros:


Caption: &Livros
Name: mnuCadLivros

Microsoft Visual Basic 6

53

10. Clique no boto Ok e veja o resultado. Note que as opes esto no mesmo nvel, pois a opo Livros
est ao lado de Cadastros. O correto seria que Livros fosse um item do menu Cadastros;
11. Acione novamente o Menu Editor e selecione a linha que contm o menu Livros;
12. Clique na seta para a direita. O nvel do menu Novo foi alterado, e agora est abaixo do menu Cadastro:

13. Clique no boto Ok e observe se o resultado agora o esperado;


14. Inclua mais dois trs opes ao menu Cadastros:
Caption: &Usurios
Name: mnuCadUsuarios
Caption: &Categorias
Name: mnuCadCategorias
Caption: &Editoras
Name: mnuCadEditoras

Microsoft Visual Basic 6

54

15. Vamos incluir agora uma barra separadora. Selecione a opo Editoras e clique no boto Next;
16. Indique para a propriedade Caption um hfen (-), e altere Name para BS1 (de Barra Separadora n 1).
Clique em Next;
17. Para terminar o menu Cadastros, vamos incluir nele uma opo para sair do sistema:
Caption: &Sair do Sistema
Name: mnuSair
18. Clique no boto Ok e confira o menu. Faa correes, se necessrio;
19. Adicione as demais opes do menu de acordo com a tabela abaixo:
Caption:
&Operaes
....&Emprstimo de Livros
....&Devoluo de Livros
C&onsultas
....&Livros
........&Todos
................por A&utor
........por &Categoria
........por E&ditora
................&Emprestados
........Em &Atraso
....&Usurios
....&Categorias
....&Editoras
&Relatrios
....&Livros
....&Usurios
....&Categorias
....&Editoras
&?
....&Sobre o Bibliotecrio

Name:
mnuOperacoes
mnuEmprestimos
mnuDevolucoes
mnuConsultas
mnuConLivros
mnuConTodos
BS2
mnuLivrosPorAutor
mnuLivrosPorCategoria
mnuLivrosPorEditora
BS3
mnuConEmprestados
mnuConAtrasados
mnuConUsuarios
mnuConCategorias
mnuConEditoras
mnuRelatrios
mnuRelLivros
mnuRelUsuarios
mnuRelCategorias
mnuRelEditoras
mnuHelp
mnuSobre

20. Verifique o funcionamento do menu. Note que na barra devem constar cinco opes: Cadastros,
Operaes, Consultas, Relatrios e ?. Alm disso, nos menus Consultas e Relatrios, o item Livros leva
a submenus. Seu formulrio agora deve estar parecido com o do exemplo a seguir:

Microsoft Visual Basic 6

55

21. Faa ajustes, se necessrio;


22. Salve o formulrio como frmBiblio e o projeto como Bibliotecario.

Associando Codificao a um Menu


Um menu se comporta como outro objeto qualquer do VB, quanto codificao. S um evento associado a
um menu: o Click. Para exemplificar, vamos fazer a codificao do menu mnuSair:
1. Em tempo de projeto, clique sobre o menu Cadastros para abri-lo;
2. Clique sobre a opo Sair (no necessrio o duplo-click);
3. A janela Cdigo aberta. Escreva a procedure correspondente:
Private Sub mnuSair_Click()
Dim vOk as Integer
vOk = MsgBox("Confirma o encerramento do sistema?", _
vbYesNo + vbQuestion + vbApplicationModal, "Sada")
If vOk = vbYes Then End
End Sub

4. Execute o aplicativo e verifique o funcionamento da procedure.

Formulrios Splash
A maioria dos aplicativos para Windows (como o Word e o prprio VB) exibe uma janela com diversas
informaes sobre o produto enquanto ele carregado. Essa janela chamada de Splash Window, ou tela de
Splash. O VB 6 permite a criao dessas telas com muita facilidade. Para esses casos, o VB nos oferece um
modelo de formulrio pronto, configurado e com a programao necessria para funcionar como aqueles dos
aplicativos comerciais. Vamos ento criar um formulrio Splash em nosso aplicativo:
1. Abra a janela Add Form;
2. Lembra-se que na aba New h vrios tipos disponveis de formulrios? Um deles chamado de Splash
Screen. essa opo que usaremos para criar nossa tela de Splash. Escolha Splash Screen, e o
formulrio abaixo ser adicionado ao projeto:

Microsoft Visual Basic 6

56

3. Voc pode alterar o tamanho do formulrio e seus objetos vontade, incluir novos labels e figuras,
apagar os que no forem necessrios, enfim, deixar o formulrio ao seu gosto. Veja como ficou o meu:

Obs.: os formulrios padronizados, como os que estamos usando, quando inseridos no projeto
normalmente j trazem algum tipo de programao pr-definida. Deve-se ento verificar essa
programao e alter-la, ou apag-la se no for necessria, para evitar erros da execuo.
4. Grave o novo formulrio como frmSplash.

O Controle Timer
Existe um problema em nosso projeto: no existe em frmSplash nenhum objeto que possa ser usado
para acionar o frmBiblio, como um boto de comando. Mas o VB oferece um controle cujo
funcionamento se encaixa perfeitamente em casos como esse: o controle Timer, que usado em situaes de
execuo de um ou mais comandos a intervalos de tempo regulares. Por exemplo: atualizar os registros
exibidos em uma tela de consulta de um sistema multiusurio a cada 10 segundos. O controle Timer s
responde ao evento Timer.

Propriedade Interval
A propriedade Interval do controle Timer determina o intervalo de tempo, medido em milisegundos, da
ocorrncia do evento Timer. do tipo Integer, portanto o maior valor possvel 65.535, o que equivale a
pouco mais de 1 minuto. O valor default 1.000 milisegundos, ou 1 segundo. Esse controle pode ser
posicionado em qualquer lugar do formulrio, pois no exibido durante a execuo do aplicativo.

Microsoft Visual Basic 6

57

Em nosso sistema, usaremos um Timer para provocar uma pausa de 5 segundos, durante a qual ser exibida
nossa tela de Splash:
1. Adicione um Timer ao frmSplash;
2. Altere o valor da propriedade Interval do Timer para 5000;
3. D um duplo click sobre o controle Timer e faa a codificao do evento Timer conforme segue:
Private Sub Timer1_Timer()
Unload Me
frmBiblio.Show
End Sub

Obs.: Me equivalente ao nome do formulrio em uso. Assim, ao invs de ficarmos escrevendo o


nome do formulrio para acessar suas propriedades e mtodos durante a codificao, podemos escrever
simplesmente Me em seu lugar que o resultado ser o mesmo.
4. Execute o projeto e veja: seu aplicativo agora tem uma tela de Splash!
5. Grave seu trabalho.

Formulrios About
Outro modelo de formulrio pr-definido que o VB nos oferece o About Form, usado para a confeco
daquelas janelas Sobre.... Para adicion-lo o processo o mesmo do Splash. Vamos inserir no projeto um
formulrio do tipo About:
1. Abra a janela Add Form e escolha na aba New a opo About Dialog;
2. O formulrio a seguir ser inserido em seu projeto. Note os botes de comando: Ok fecha o formulrio e
System Info abre a janela de Informaes do Sistema do Windows:

3. Modifique-o ao seu gosto, mas cuidado com o evento Load: ele altera o rtulo de alguns labels. Se voc
mudar esses labels, apague as linhas correspondentes a eles em Form_Load. Veja como ficou o meu:

Microsoft Visual Basic 6

58

4. Grave o formulrio como frmAbout;


5. Abra o formulrio frmBiblio e escreva o comando para exibir frmAbout em mnuSobre_Click:
Private Sub mnuSobre_Click()
frmAbout.Show vbModal
End Sub

6. Execute o aplicativo. No formulrio principal, escolha a opo Sobre no menu e veja se o formulrio
frm-About est funcionando corretamente;
7. Grave seu trabalho. Continuaremos o desenvolvimento do sistema na prxima lio.

Microsoft Visual Basic 6

59

Lio 7: Controles Customizados


At agora s usamos em nosso projeto controles padronizados, aqueles que aparecem na caixa de
ferramentas quando iniciamos o VB. Mas no so apenas esses os controles disponveis para uso em nossos
projetos. Muito pelo contrrio, existe uma infinidade de outros controles no mercado, muitos deles
comerciais e desenvolvidos por empresas especializadas. Alguns desses controles adicionais, chamados de
customizados, so fornecidos junto com o pacote do VB e podem ser usados livremente na construo de
aplicativos.
Os controles customizados no aparecem na caixa de ferramentas: eles devem ser
adicionados ao projeto para serem usados. Uma vez que isso feito, porm, eles se
comportam da mesma maneira que qualquer controle padronizado. Mas no v adicionando
controles vontade em seu projeto, pois, como so arquivos OCX separados, para cada um
deles que voc usar seu aplicativo vai engordar alguns Kbytes. Assim sendo, s adicione
aqueles controles que realmente ir usar.

Adicionando um Controle Customizado


Vamos ento adicionar um controle customizado ao nosso aplicativo. Se ainda no o fez, inicie o VB e abra
o projeto Bibliotecario:
1. No menu Project do VB, escolha a opo Components, ou ento tecle Ctrl+T: a janela Components ser
aberta: ela permite que controles customizados sejam adicionados ao projeto:

2. Procure e marque a opo Microsoft Windows Commom Controls 6.0;


3. Clique no boto Aplicar: repare que alguns cones novos, como os da figura ao lado, foram inseridos na
caixa de ferramentas;
4. Clique em Ok. A partir de agora, voc poder usar qualquer um dos Microsoft Windows Commom
Controls em seu projeto como qualquer outro controle.

Microsoft Visual Basic 6

60

Criando Uma Barra de Ferramentas


Sem dvida um dos recursos mais comuns nos aplicativos para Windows a barra de botes ou de
ferramentas - o prprio VB as tem em profuso. A principal finalidade dessas barras a de facilitar o acesso
do usurio aos comandos mais comuns do aplicativo.

O Controle ToolBar
Um dos controles customizados que acabamos de adicionar o ToolBar, que permite a criao de
barras de botes com muita facilidade. Ele responde ao evento Click, e a identificao do boto
clicado feita pelo seu nmero de ndice.
Para criar os botes, ToolBar trabalha em conjunto com outro controle:

O Controle ImageList
O controle ImageList tambm faz parte dos Microsoft Windows Commom Controls e, como seu
prprio nome indica, serve para criar uma lista de imagens que ser associada a um outro controle,
como uma ToolBar. Esse controle no responde a nenhum evento e no aparece no formulrio durante a
execuo do aplicativo. Depois que a ImageList associada a um controle, no pode mais ser alterada, a
menos que a associao seja excluda.
Vamos ento criar uma barra de botes em nosso projeto:
1. Em tempo de projeto, abra o formulrio frmBiblio;
2. Adicione ao formulrio uma ImageList. No se preocupe com a posio em que ela vai ficar, pois como
j disse ela no aparecer durante a execuo do aplicativo;
3. Clique com o boto direito do mouse sobre a ImageList;
4. No menu de contexto que se abre, escolha a opo Properties. A janela de propriedades da ImageList
ser exibida:

5. Na aba General definimos o tamanho em pixels das imagens da lista. Compare os tamanhos:
16 x 16:
32 x 32:
48 x 48:

Microsoft Visual Basic 6

61

6. Na aba Images inserimos as imagens que faro parte da lista:

7. Para adicionar imagens, clicamos no boto Insert Picture e para excluir uma imagem no boto Remove
Picture. Clique em Insert Picture e adicione o cone Writing\Books02.ICO:

Obs.: note que, aps adicionar o cone, o campo Index passou a indicar o valor 1. Esse o nmero de
ndice da imagem na lista, atravs do qual fazemos a associao da imagem com o boto da ToolBar.
8. Adicione as seguintes imagens na lista. Procure respeitar a ordem na incluso, para que o ndice
corresponda corretamente imagem desejada quando estivermos criando a barra de botes:
Misc\Misc28.ICO (Index 2)
Writing\Book04.ICO (Index 3)
Writing\Books04.ICO (Index 4)
Traffic\Trffc14.ICO (Index 5)
9. Se voc fez tudo corretamente, sua ImageList deve estar parecida com o exemplo a seguir:

Microsoft Visual Basic 6

62

10. Clique no boto Ok para retornar ao formulrio;


11. Adicione ao formulrio uma ToolBar. Note que esse controle automaticamente posicionado no topo da
rea de trabalho do formulrio, logo abaixo da barra de menus;
12. A configurao da ToolBar feito como na ImageList: clique com o boto direito do mouse sobre o
controle e escolha a opo Properties;
13. Na aba General definimos as propriedades que determinam a aparncia da Toolbar. As principais so:

ImageList: indica o nome da ImageList que ser usada na criao da barra de botes. Escolha a
opo ImageList1, que deve ser a nica disponvel;
Appearance: determina a aparncia da barra, que pode ser em perspectiva 3D (opo 1 - cc3D) ou
integrada rea de trabalho do formulrio (opo 0 ccFlat). Escolha 3D;
BorderStyle: indica se a barra ter borda (opo 1 ccFixedSingle) ou no (opo 0 ccNone). A
aparncia final da borda depende da propriedade Appearance. Escolha None;

Microsoft Visual Basic 6

63

Style: indica o estilo dos botes da barra: pode ser 0 tbrStandard, em que eles sero apresentados
como pequenos botes de comando, ou 1 tbsFlat, em que os botes tero a mesma aparncia das
barras de ferramentas do VB. Escolha Flat.
14. Na aba Buttons configuramos cada um dos botes da barra. Para inserir um boto, clicamos em Insert
Button, e para remover clicamos em Remove Button. Clique no boto Insert Button;
15. Vamos definir as propriedades do boto que inserimos. As principais propriedades dos botes so:
Index: indica o ndice do boto na barra, pelo qual ele ser identificado quando for clicado.
Normalmente no alteramos o valor essa propriedade;
Caption: define um rtulo para o boto. Deixe em branco, assim s ser exibido o cone no boto;
ToolTipText: texto a ser exibido em uma pequena etiqueta explicativa quando o ponteiro do mouse
ficar parado por alguns instantes sobre o boto. Escreva Cadastro de Livros nessa propriedade
(obs.: quase todos os controles do VB possuem essa propriedade);
Image: indica o nmero da imagem da ImageList a ser exibida por esse boto. Indique o valor 1, que
corresponde ao primeiro cone da ImageList;
Visible e Enabled: o mesmo que as propriedades Visible e Enabled dos demais controles.
16. Sua configurao do boto 1 deve estar assim:

17. Insira mais quatro botes na barra, conforme a tabela a seguir:


Boto
2
3
4
5

Propriedades = Valor
ToolTipText = Cadastro de Usurios
Image = 2
ToolTipText = Emprstimo de Livros
Image = 3
ToolTipText = Devoluo de Livros
Image = 4
ToolTipText = Sai do Sistema
Image = 5

18. Clique no boto Ok. Seu formulrio deve estar parecido com o do exemplo a seguir:

Microsoft Visual Basic 6

64

19. Salve seu trabalho.

Programando a Barra de Ferramentas


A programao dos botes da barra de botes muito simples: como a barra s responde ao evento Click,
basta que identifiquemos qual boto foi clicado e fazer a codificao correspondente. Como j vimos, a
identificao do boto feita pela propriedade Index. Vamos ento programar o boto Sair:
1. D um duplo click sobre a barra de botes para abrir a janela Cdigo no evento Click da barra;
2. Note que a procedure recebe um parmetro, chamado Button, que indica em que boto aconteceu o click.
Testaremos ento o ndice desse parmetro (propriedade Index) para saber qual foi o boto clicado em
breve estudaremos a propriedade Index mais detalhadamente:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
If Button.Index = 5
'Foi clicado o boto Sair:
mnuSair_Click
End If
End Sub

3. Repare que, se o boto for o nmero 5, chamaremos a subrotina mnuSair_Click, ou seja, estamos
desviando a execuo para o evento Click do menu Sair, pois a programao em ambos os casos a
mesma. Isso pode ser feito vontade, pois os eventos dos controles tambm so subrotinas como
quaisquer outras, e portanto podem ser executadas sempre que necessrias;
4. Teste o aplicativo e verifique se o boto est funcionando como previsto;
5. Salve seu trabalho. Os demais botes da barra sero programados conforme os formulrios a que eles se
referem forem sendo construdos nas prximas lies.

Microsoft Visual Basic 6

65

Lio 8: Bancos de Dados


Sempre que trabalhamos com qualquer linguagem temos a inteno de guardar as informaes geradas para
a obteno de algum resultado, ou ento para consult-las quando forem necessrias. Assim, elas devem ser
gravadas em arquivos criados para esse fim, chamados de Bancos de Dados, ou sero perdidas aps o
encerramento do programa que as gerou. Existem vrios softwares especficos para o gerenciamento desses
arquivos no mercado, e cada um deles possui padres prprios de armazenamento de dados. Exemplos de
Sistemas Gerenciadores de Bancos de Dados (SGDB) so o SQL Server, o Dataflex, o FoxPro, o Oracle, o
Access, etc.
O VB pode acessar arquivos de dados de vrios formatos diferentes, incluindo os citados, mas vamos utilizar
o MDB do Access. Esse formato nativo do VB, tanto que o utilitrio para a criao de bancos de dados que
o acompanha, chamado Visual Data Manager, uma verso reduzida do Access. Alis, bastante reduzida:
suas funes limitam-se criao e manipulao de bancos de dados e de suas tabelas.
Nesse texto, assumimos que voc j conhece o Access o suficiente para a criao do banco de dados, das
tabelas e das consultas que vamos utilizar. Caso no o possua instalado em sua mquina, use ento o Visual
Data Manager, acessando-o pelo menu Add-Ins do VB.

Mtodos de Acesso
Basicamente, um mtodo de acesso o meio pelo qual associamos um tipo especial de varivel chamado de
varivel objeto ao banco de dados. Elas so chamadas de objeto porque possuem propriedades e respondem
a mtodos, permitindo assim a manipulao dos dados. O mtodo de acesso usado tradicionalmente pelo VB
o DAO (ou Data Access Object), que consiste na abertura de suas tabelas e execuo de comandos atravs
das variveis objeto. Porm, a partir da verso 6 do VB a Microsoft introduziu um novo mtodo, chamado de
ADO (ou ActiveX Data Objects), pelo qual o aplicativo se comunica com o gerenciador de banco de dados
atravs de um provedor em uma conexo de rede, mesmo que a aplicao e o SGBD estejam rodando
localmente. As operaes de incluso, excluso, alterao e seleo de dados so executadas a partir de
comandos SQL enviados pelo aplicativo ao SGBD atravs do provedor (veremos o que SQL e como us-la
nas prximas lies). Em nosso projeto, usaremos o mtodo ADO.

Objeto ADO Connection


Connection a varivel objeto que representa a conexo propriamente dita. Normalmente declarada como
pblica (portanto, em um mdulo de programao) com o tipo ADODB.Connection. Porm, antes de ver
como criar uma conexo ADO, devemos estudar alguns conceitos bsicos:

Propriedade ConnectionString
Essa propriedade do objeto Connection uma string formada pelo nome do provedor usado e pelos
parmetros necessrios para estabelecer a conexo com o SGBD.

O Provedor
A funo do provedor , como j disse, permitir a conexo do aplicativo com o banco de dados. Essa
conexo do tipo OLEDB, ou Object Linking and Enbedding Database. Portanto, na verdade o que acontece
quando nos conectamos ao banco de dados via ADO a vinculao de um objeto ao banco, que passa a
responder s propriedades e mtodos do objeto a ele vinculado. Esse vnculo se assemelha a uma conexo de
rede, ou seja: o banco de dados no um arquivo que pode ser manipulado diretamente, mas mantm um
canal de comunicao com seu aplicativo pela qual as operaes sero executadas. como uma ligao
telefnica: voc pode conversar com as outras pessoas, mas no pode abra-las.
Existe um provedor especfico para cada SGBD. No nosso caso, como usaremos uma base Access, o
provedor ser o Microsoft Jet OLEDB Provider. So necessrios alguns parmetros para se estabelecer a
conexo, que variam de acordo com o provedor, mas no caso do Jet os parmetros necessrios so trs:
Data Source: nome e o caminho completo (path) do arquivo MDB a ser conectado;
User ID: identificao do usurio;

Microsoft Visual Basic 6

66

Password: senha do usurio.


Obviamente, os dois ltimos podem ser omitidos se o banco no estiver protegido por senha.

Abrindo e fechando a conexo


Aps definir a ConnectionString, podemos estabelecer a conexo aplicando o mtodo Open ao objeto
Connection. Veja um exemplo de conexo ADO usando o Jet:
Dim cnnTeste As New ADODB.Connection
cnnTeste.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Sistema\Dados.mdb;"
cnnTeste.Open

Obs.: 4.0 a verso do Jet para o Access 2000.


Para fechar a conexo existe o mtodo Close, mas ao invs de us-lo aconselhvel a remoo da varivel
da memria usando a palavra-chave Nothing e o comando Set:
Set cnnTeste = Nothing

Objeto ADO Command


Um comando ADO uma varivel objeto que contm a definio do comando a ser executado pelo provedor
no banco de dados. Ele necessrio para qualquer operao ou manipulao dos dados do banco (uma
seleo de registros, por exemplo), pois nele que definimos as configuraes exigidas pelo provedor para
executar o comando SQL correspondente. Entre essas configuraes, devemos destacar as seguintes:

Propriedade ActiveConnection
Contm o nome da conexo ADO ativa a ser usada para execuo do comando.

Propriedades CommandText e CommandType


CommandText uma string que contm o comando a ser executado pelo objeto command, e CommandType
indica seu tipo, ou melhor, como CommandText ser avaliado em tempo de execuo pelo objeto Command.
CommandType pode ser um dos seguintes:
adCmdUnknown: indefinido (default).
adCmdText: string que representa um comando SQL vlido;
adCmdTableDirect: nome de uma tabela;
adCmdStoredProc: nome de uma stored procedure (o equivalente a uma consulta ao do Access) ou
de uma view (que equivale a uma consulta seleo);
adExecuteNoRecords: indica que CommandText um comando ou stored procedure que no retorna
nenhum registro. Por exemplo, um comando de insero de registros em uma tabela. Caso algum registro
seja retornado, ele ser desprezado. Sempre deve ser combinado com adCmdText or adCmdStoredProc.

Executando o comando
A execuo do comando ADO feita pelo mtodo Execute. Veja um exemplo:
Dim cnnComando As New ADODB.Command
With cnnComando
.ActiveConnection = cnnTeste
.CommandType = adCmdStoredProc
.CommandText = "spAtualizaSaldo"
.Execute
End With

Note o uso das propriedades: como o tipo informado em CommandType adCmdStoredProc, o provedor
interpreta o texto contido em CommandText (spAtualizaSaldo) como sendo o nome de uma stored
procedure, que ser executada.

Microsoft Visual Basic 6

67

Objetos Recordset
Um Recordset a representao lgica de um conjunto de registros, da seu nome. Pode receber todos os
registros de uma tabela, o resultado de uma consulta, ou ainda uma seleo de dados feita por um comando
SQL. O recordset tambm uma varivel objeto, assim, para fazer a associao com o conjunto de registros
desejado deve ser usado o comando Set e o mtodo Execute em um comando ADO. Veja um exemplo:
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
With cnnComando
.ActiveConnection = cnnTeste
.CommandType = adCmdTableDirect
.CommandText = "Clientes"
Set rsSelecao = .Execute
End With

Em nosso exemplo, o recordset rsSelecao ser associado tabela Clientes, e assim todos os seus registros e
campos podero ser acessados atravs de rsSelecao. Note que informamos que Clientes o nome de uma
tabela atravs do valor adCmdTableDirect em CommandType.
Para se referir a um campo de um Recordset, devemos usar o caractere !. Por exemplo: para atribuir o
valor do campo Preo de um Recordset chamado rsProdutos a uma varivel, poderamos usar o seguinte
comando:
vPreo = rsProdutos!Preo

Para fechar um Recordset, novamente usamos o comando Set e a palavra chave Nothing, da mesma maneira
que fizemos com o Command:
Set rsSelecao = Nothing

Veja a seguir as principais propriedades e mtodos do Recordset:

Propriedades BOF e EOF


Essas propriedades indicam se o apontador de registros est posicionado no incio ou no fim da tabela. BOF
retorna True se o apontador estiver no incio da tabela, e EOF retorna True se estiver no final da tabela. Em
qualquer outro caso, ambas retornam False.

Propriedade AbsolutePosition
Essa propriedade retorna o nmero do registro corrente na tabela.

Propriedade RecordCount
Retorna o nmero de registros que contidos no Recordset.

Mtodos Move (MoveFirst, MoveLast, MoveNext e MovePrevious)


Esses mtodos fazem a movimentao seqencial do apontador de registros dentro do Recordset:
MoveFirst move o apontador para o primeiro registro do Recordset;
MoveLast move o apontador para o ltimo registro do Recordset;
MoveNext move o apontador para o prximo registro;
MovePrevious move o apontador para o registro anterior.

Mdulos de Programao
Como vimos na lio anterior, existem vrios tipos de objetos que podem ser adicionados ao projeto. Um dos
mais usados o mdulo de programao, que um arquivo texto com extenso BAS contendo procedures,
funes e declaraes de uso geral no sistema. Um uso muito freqente a declarao de variveis pblicas.
Variveis Connection so freqentemente declaradas como pblicas, para que no seja necessria a criao
de uma conexo com o banco a cada vez que precisarmos usar um command se a conexo pblica,
podemos usar sempre a mesma.

Microsoft Visual Basic 6

68

Para adicionar um mdulo de programao ao projeto, usamos a opo Add Module do menu Project do VB.
A operao da janela Add Module a mesma da Add Form:

Usando o Banco de Dados


Para comear, criaremos um novo banco de dados no Access com o nome de Biblio. Ele conter quatro
tabelas, que devem conter as estruturas descritas a seguir (siga fielmente os nomes das tabelas e os nomes e
propriedades dos campos, para que a codificao do projeto funcione corretamente):
Tabela: Categorias
Nome do Campo
CodCategoria (Chave primria)
NomeCategoria

Tipo
Nmero
Texto

Propriedades
Tamanho = Inteiro Longo
Tamanho = 35

Tabela: Editoras
Nome do Campo
CodEditora (Chave primria)
NomeEditora

Tipo
Nmero
Texto

Propriedades
Tamanho = Inteiro Longo
Tamanho = 35

Tabela: Livros
Nome do Campo
CodLivro (Chave primria)
Titulo
Autor
CodEditora
CodCategoria
AcompCD
AcompDisquete
Idioma
Observacoes
Emprestado
CodUsuario
DataEmprestimo
DataDevolucao

Tipo
Nmero
Texto
Texto
Nmero
Nmero
Sim/No
Sim/No
Nmero
Memorando
Sim/No
Nmero
Data/Hora
Data/Hora

Propriedades
Tamanho = Inteiro Longo
Tamanho = 50
Tamanho = 35
Tamanho = Inteiro Longo
Tamanho = Inteiro Longo
Tamanho = Byte
Tamanho = Inteiro Longo
Formato = Data Abreviada
Formato = Data Abreviada

Microsoft Visual Basic 6

Tabela: Usuarios
Nome do Campo
CodUsuario (Chave primria)
NomeUsuario
Endereco
Cidade
Estado
CEP
Telefone

69

Tipo
Nmero
Texto
Texto
Texto
Texto
Texto
Texto

Propriedades
Tamanho = Inteiro Longo
Tamanho = 35
Tamanho = 60
Tamanho = 25
Tamanho = 2
Tamanho = 9
Tamanho = 15

Aps a criao do banco de dados, vamos criar a conexo no sistema Bibliotecrio:


1. Abra o VB e o projeto Bibliotecario, se ainda no o fez;
2. Precisamos adicionar s referncias do projeto a biblioteca que permite a utilizao dos objetos ADO.
Abra o menu Project do VB e escolha a opo References:

3. O VB abre uma janela chamada References. Note que j existem algumas referncias marcadas. Para
adicionar uma nova, basta clicar na checkbox ao lado de seu nome. Para remover uma referncia, remova
a marca de seleo (obs.: o VB no permite a remoo de uma biblioteca que esteja em uso);
4. A biblioteca que usaremos a Microsoft ActiveX Data Objects Library Existem vrias verses dessa
biblioteca, dependendo da verso do Jet que estiver instalada em sua mquina. Se houver mais de uma,
procure sempre utilizar a mais recente (na figura est sendo usada a verso 2.5). Clique em Ok;
5. Vamos declarar a varivel Connection como pblica. Para isso, precisamos de um mdulo de
programao. Abra o menu Project e escolha a opo Add Module;
6. Aps adicionar o mdulo abra-o na janela Cdigo, e na seo Declarations escreva o comando:
Public cnnBiblio As New ADODB.Connection

7. Grave o mdulo de programao com o nome de Biblio.BAS;


8. Vamos abrir a conexo com o banco de dados no evento Timer do formulrio de Splash. Abra o
formulrio frmSplash na janela Cdigo;
9. Altere a procedure Timer1_Timer para que fique como a seguir:
Private Sub Timer1_Timer()
On Error GoTo errConexao
cnnBiblio.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & App.Path & "\Biblio.mdb;"
cnnBiblio.Open

Microsoft Visual Basic 6

70

Unload Me
frmBiblio.Show
Exit Sub
errConexao:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro na conexo com o banco de dados." & _
vbCrLf & "O sistema ser encerrado.", _
vbCritical + vbOKOnly + vbApplicationModal, _
"Erro na conexo"
.Number = 0
Set cnnBiblio = Nothing
End
End If
End With
End Sub

Obs.: note que no trecho acima usamos a verso 3.51 do Jet. Note tambm o uso de App.Path em Data
Source: App o objeto Application, e Path uma propriedade que retorna a pasta onde a aplicao est
instalada. Portanto, App.Path informa ao provedor que o arquivo Biblio.MDB est localizado na mesma
pasta da aplicao.
10. interessante fechar a conexo quando encerramos o sistema. Abra ento o formulrio frmBiblio na
janela Cdigo e escreva o evento Unload, que ocorre quando o formulrio fechado:
Private Sub MDIForm_Unload(Cancel As Integer)
Set cnnBiblio = Nothing
End Sub

11. Grave seu trabalho.


Repare que ainda no usamos nenhum comando ADO, s nos conectamos ao banco de dados. Antes de fazer
isso, vamos estudar um pouco de SQL, que o assunto da prxima lio.

Microsoft Visual Basic 6

71

Lio 9: Manipulao de Registros


Nessa lio, vamos estudar a programao necessria para executar as operaes bsicas de manipulao de
registros, que so: seleo, incluso, alterao e excluso. Usaremos como base para nosso estudo a tabela de
Usurios, pois como ela possui apenas um campo numrico, e todos os demais so do tipo texto, a mais
simples de trabalhar com os controles que conhecemos at aqui.
importante ressaltar que no constar nessa apostila os formulrios e a programao referentes s tabelas
Editoras e Categorias, pois sero praticamente iguais quelas que vamos elaborar para a de Usurios. Ficar
para voc, portanto, desenvolver essas rotinas como exerccio de fixao.

Um Pouco de SQL
Antes de comear a trabalhar no formulrio, precisamos conhecer um pouco da linguagem SQL. A SQL
(Structure Query Language Linguagem de Consulta Estruturada) uma linguagem comum de
gerenciamento de bancos de dados relacionais criada para padronizar o tratamento dos dados em todos os
sistemas que obedeam ao padro SQL vigente. Isso quer dizer que os mesmos comandos SQL que voc usa
no Access podem ser aplicados na maioria dos SGBDs de arquitetura cliente-servidor existentes no mercado.
importante destacar, porm, que a SQL no uma linguagem de programao comum, usada para a
criao de sistemas e aplicativos, e sim uma linguagem voltada exclusivamente para aplicaes em bancos
de dados relacionais.
No vamos abordar SQL a fundo nesse texto, pois no esse o objetivo do curso. Veremos apenas os
comandos principais, que permitam aplicao que estamos construindo executar as operaes bsicas de
manuteno de bancos de dados.

Comando SELECT
SELECT o comando para selecionar dados no banco de dados e retornar as informaes solicitadas como
um conjunto de registros. Certamente o comando SQL mais utilizado. Sua sintaxe bsica :
SELECT * FROM <tabela> [WHERE <condio>] [ORDER BY <ordem>];

Ou ento:
SELECT campo1, campo2, campo3, ..., campoN FROM <tabela>
[WHERE <condio>] [ORDER BY <ordem>];

Onde:
*: indica que todos os campos da tabela devem ser selecionados;
Lista de campos: indica que somente os campos especificados devem ser selecionados;
Tabela: nome da tabela que contm os dados a serem selecionados;
Condio (opcional): expresso lgica que indica que somente os registros que atendam ela devem ser
selecionados pelo comando SELECT;
Ordem (opcional): lista de campos, separados por vrgulas, que indicam a ordem de classificao dos
registros selecionados.
Ao executar esta operao, o provedor procura no banco de dados a tabela especificada, extrai as colunas
escolhidas, seleciona as linhas que satisfazem a condio e finalmente classifica as linhas resultantes na
ordem especificada.
importante destacar que, apesar de WHERE e ORDER BY serem opcionais e podermos us-los em
separado, no caso de ambos serem utilizados obrigatoriamente WHERE dever vir antes de ORDER BY.
Veja alguns exemplos:
Para selecionar todos os campos da tabela de funcionrios:
SELECT * FROM Funcionarios;

Se quiser ordenar os regitros em ordem alfabtica, poderia usar:


SELECT * FROM Funcionarios ORDER BY Nome;

Microsoft Visual Basic 6

72

Para selecionar apenas os campos Nome e Departamento da mesma tabela:


SELECT Nome, Departamento FROM Funcionarios;

Para filtrar apenas os funcionrios do departamento RH:


SELECT Codigo, Nome FROM Funcionarios WHERE Departamento = RH;

Usando WHERE e ORDER BY juntos:


SELECT Codigo, Nome FROM Funcionarios
WHERE Departamento = RH ORDER BY Nome;

Em um primeiro momento, usaremos o comando SELECT para selecionar apenas um registro por vez. Nas
prximas lies, principalmente quando falarmos de consultas, estaremos estudando-o com um pouco mais
de profundidade.

Comando INSERT
INSERT o comando SQL usado para adicionar registros a uma tabela. Sua sintaxe a seguinte:
INSERT INTO <tabela> (campo1, campo2, campo3, ..., campoN)
VALUES (valor1, valor2, valor3, ..., ValorN);

Onde:
Tabela: o nome da tabela em que o novo registro deve ser inserido;
Lista de campos: os nomes dos campos nos quais os dados devem ser gravados;
Lista de valores: dados a serem gravados nos campos, sendo que cada valor inserido no campo
correspondente posio do valor na lista: valor1 em campo1, valor2 em campo2, e assim por diante.
No necessrio indicar valores para todos os campos da tabela. Quando um dado no forem designado para
um campo qualquer, o valor padro definido nas propriedades dos campos omitidos ser inserido pelo Jet. Se
no existir um valor padro, ento ser inserido Null (nulo) nas colunas omitidas. Nesse caso, o campo deve
suportar o valor nulo. Os registros so sempre adicionados no final da tabela.
O ponto-e-vrgula faz parte da sintaxe de todo comando SQL. chamado de terminador, e serve para indicar
o fim do comando. Para alguns provedores (como o Jet) ele dispensvel.
Veja um exemplo que cria um novo registro numa tabela chamada Funcionrios:
INSERT INTO Funcionrios (Codigo, Nome, Sobrenome, Titulo)
VALUES (73, 'Andr', 'Pereira', 'Estagirio');

Comando UPDATE
UPDATE faz a atualizao de registros de uma tabela, de acordo com uma condio. Devemos indicar quais
campos sero atualizadados. Sua sintaxe :
UPDATE <tabela> SET <campo> = <valornovo> [WHERE <condio>];

Onde:
Tabela: nome da tabela cujos registros devem ser alterados:
Campo: nome do campo onde deve ser gravado o novo valor. Podem ser alterados vrios campos ao
mesmo tempo;
Valornovo: valor ou expresso cujo resultado ser gravado no campo indicado;
Condio (opcional): expresso lgica que indica quais registros devem ser afetados pelo comando
Update. Mas cuidado! Se no for especificada uma condio, Update vai alterar TODOS os registros da
tabela.
Veja alguns exemplos:
Para alterar o campo nome do registro cujo campo cdigo igual a 15 na tabela Funcionrios:
UPDATE Funcionrios SET Nome = 'Jos Lima' WHERE Codigo = 15;

Para calcular o preo de venda de todos os registros de uma tabela chamada Produtos:
UPDATE Produtos SET PrecoVenda = (PrecoCusto * 1.25);

Microsoft Visual Basic 6

73

Comando DELETE
Realiza a excluso de registros da tabela indicada. Veja a sintaxe:
DELETE FROM <tabela> [WHERE <condio>];

Onde:
Tabela: nome da tabela da qual os registros so excludos;
Condio (opcional): expresso lgica que indica quais registros devem ser excludos. Apesar de ser
opcional, extremamente importante especificar uma condio, pois em caso contrrio TODOS os
registros da tabela sero excludos.
Veja um exemplo:
DELETE FROM Funcionrios WHERE Titulo = 'Estagirio';

Esse exemplo exclui todos os registros da tabela Funcionrios cujo ttulo seja Estagirio.
Bem, agora que j vimos os comandos SQL que vamos precisar, comeemos a trabalhar. Inclua um novo
formulrio no projeto e formate-o como no exemplo a seguir:

Altere as propriedades dos objetos conforme a tabela:


Objeto
Formulrio

Nome
frmCadUsuarios

Caixa de texto

txtCodUsuario

Caixa de texto

txtNomeUsuario

Caixa de texto

txtEndereco

Caixa de texto

txtCidade

Caixa de texto

txtEstado

Caixa de texto

txtTelefone

Caixa de texto

txtCEP

Outras Propriedades = Valor


Caption = Cadastro de Usurios
BorderStyle = 1 Fixed Single
Icon = Misc\Misc28.ICO
KeyPreview = True
MDIChild = True
Text =
MaxLength = 5
Text =
MaxLength = 35
Text =
MaxLength = 60
Text =
MaxLength = 25
Text =
MaxLength = 2
Text =
MaxLength = 15
Text =
MaxLength = 9

Microsoft Visual Basic 6

Objeto
ImageList

ToolBar

74

Nome
ImageList1

ToolBar1

Outras Propriedades = Valor


Tamanho das imagens: 32 x 32 pixels
Imagens:
1 = Computer\Disk04.ICO
2 = Writing\Erase02.ICO
3 = Computer\Trash01.ICO
4 = Traffic\Trffc14.ICO
ImageList = ImageList1
Appearance = 1 cc3D
BorderStyle = 0 ccNone
Style = 1 tbrFlat
Boto 1:
ToolTipText = Grava o registro atual
Image = 1
Boto 2:
ToolTipText = Limpa os dados digitados
Image = 2
Boto 3:
ToolTipText = Exclui o registro atual
Image = 3
Enabled = False (desmarcar)
Boto 4:
ToolTipText = Retorna ao menu principal
Image = 4

O funcionamento bsico do formulrio ser o seguinte:


Aps a digitao do cdigo do usurio, ser feita uma pesquisa para verificar se o cdigo existe ou no
na tabela. Se existir, os dados do registro sero exibidos nos campos do form e podero ser alterados.
Caso contrrio, ser considerado como um cdigo novo, ou seja, uma operao de incluso;
O boto Excluir s dever estar habilitado quando o registro estiver em modo de alterao;
Quando o boto Gravar for clicado, dever ser feita uma crtica nos dados digitados antes da gravao,
para identificar possveis erros de digitao e impedir a gravao nesse caso;
Quando o boto Limpar for clicado, qualquer dado constante nos campos do formulrio ser apagado.
Vamos agora escrever a codificao. Siga os passos:
1. Inicialmente, escreveremos as procedures referentes aos eventos do formulrio. Abra a janela cdigo a
partir do formulrio frmCadUsuarios e programe os eventos Load e KeyPress conforme abaixo:
Private Sub Form_Load()
'Centraliza o formulrio na rea de trabalho do MDI:
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
'Se a tecla Enter foi pressionada, passa o foco para o prximo controle na
'seqncia de TabIndex:
If KeyAscii = vbKeyReturn Then
SendKeys "{Tab}"
KeyAscii = 0
End If
End Sub

Obs.: como um formulrio MDIChild no aceita a propriedade StartUpPosition, escrevemos no evento


Load a codificao necessria para centralizar o form dentro da rea de trabalho do MDI. As
propriedades ScaleWidth e ScaleHeight retornam, respectivamente, a largura e a altura da rea de
trabalho do formulrio.

Microsoft Visual Basic 6

75

2. Vamos iniciar a programao das operaes de manuteno de registros. Nossa primeira preocupao
deve ser como identificar se estamos fazendo uma incluso ou uma alterao. A maneira mais simples
criando uma varivel privada que informe se o registro existe ou no na tabela. Abra a janela Cdigo na
seo Declaration e declare a varivel:
Dim vInclusao As Boolean

3. Agora vamos pesquisar na tabela o cdigo digitado pelo operador. Faremos isso no evento LostFocus do
campo txtCodUsuario:
Private Sub txtCodUsuario_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
On Error GoTo errSelecao
'Verifica se foi digitado um cdigo vlido:
If Val(txtCodUsuario.Text) = 0 Then
MsgBox "No foi digitado um cdigo vlido, verifique.", _
vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
Exit Sub
End If
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
'Monta o comando SELECT para selecionar o registro na tabela:
.CommandText = "SELECT * FROM Usuarios WHERE CodUsuario = " & _
txtCodUsuario.Text & ";"
Set rsSelecao = .Execute
End With
With rsSelecao
If .EOF And .BOF Then
'Se o recordset est vazio, no retornou registro com esse cdigo:
LimparDados
'Identifica a operacao como Incluso:
vInclusao = True
Else
'Seno, atribui aos campos os dados do registro:
txtNomeUsuario.Text = !NomeUsuario
txtEndereco.Text = !Endereco
txtCidade.Text = !Cidade
txtEstado.Text = !Estado
txtCEP.Text = !CEP
txtTelefone.Text = Empty & !Telefone
'Identifica a operacao como Alterao:
vInclusao = False
'Habilita o boto Excluir:
Toolbar1.Buttons(3).Enabled = True
End If
End With
'Desabilita a digitao do campo cdigo:
txtCodUsuario.Enabled = False
Saida:
'Elimina o command e o recordset da memria:
Set rsSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
errSelecao:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro na recuperao do registro solicitado.", _
vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
.Number = 0
GoTo Saida
End If
End With
End Sub

Microsoft Visual Basic 6

76

Repare como foi montado o comando SELECT: informando clusula WHERE o cdigo a pesquisar
por concatenao. Mas continuemos a programao do formulrio:
4. LimparDados uma subrotina para apagar os campos do formulrio (menos o cdigo):
Private Sub LimparDados()
'Apaga o contedo dos campos do formulrio:
txtNomeUsuario.Text = Empty
txtEndereco.Text = Empty
txtCidade.Text = Empty
txtEstado.Text = Empty
txtCEP.Text = Empty
txtTelefone.Text = Empty
End Sub

5. J podemos fazer a codificao da barra de botes. Note as chamadas a subrotinas:


Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
'Verifica qual foi o boto clicado:
Select Case Button.Index
Case 1
'Boto Gravar:
GravarDados
Case 2
'Boto Limpar:
LimparTela
Case 3
'Boto Excluir:
ExcluirRegistro
Case 4
'Boto Retornar:
Unload Me
End Select
End Sub

6. GravarDados, como o prprio nome indica, a subrotina de gravao dos dados digitados. Nela vamos
identificar o tipo de operao que devemos executar (incluso ou alterao) e montar o comando SQL
correspondente:
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao
'Inicializa as variveis auxiliares:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
'Verifica os dados digitados:
If txtNomeUsuario.Text = Empty Then
MsgBox "O campo Nome no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtEndereco.Text = Empty Then
MsgBox "O campo Endereo no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtCidade.Text = Empty Then
MsgBox "O campo Cidade no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtEstado.Text = Empty Then
MsgBox "O campo Estado no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtCEP.Text = Empty Then
MsgBox "O campo CEP no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
'Se aconteceu um erro de digitao, sai da sub sem gravar:
If vErro Then Exit Sub

Microsoft Visual Basic 6

Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
'Verifica a operao e cria o comando SQL correspondente:
If vInclusao Then
'Incluso:
.CommandText = "INSERT INTO Usuarios " & _
"(CodUsuario, NomeUsuario, Endereco, Cidade, " & _
"Estado, CEP, Telefone) VALUES ('" & _
txtCodUsuario.Text & "','" & _
txtNomeUsuario.Text & "','" & _
txtEndereco.Text & "','" & _
txtCidade.Text & "','" & _
txtEstado.Text & "','" & _
txtCEP.Text & "','" & _
txtTelefone.Text & "');"
Else
'Alterao:
.CommandText = "UPDATE Usuarios SET " & _
"NomeUsuario = '" & txtNomeUsuario.Text & "'," & _
"Endereco = '" & txtEndereco.Text & "'," & _
"Cidade = '" & txtCidade.Text & "'," & _
"Estado = '" & txtEstado.Text & "'," & _
"CEP = '" & txtCEP.Text & "'," & _
"Telefone = '" & txtTelefone.Text & "' " & _
"WHERE CodUsuario = " & txtCodUsuario.Text & ";"
End If
.Execute
End With
MsgBox "Gravao concluda com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, _
"Gravao OK"
'Chama a sub que limpa os dados do formulrio:
LimparTela
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro durante a gravao dos dados na tabela.", _
vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
.Number = 0
GoTo Saida
End If
End With
End Sub

7. LimparTela tambm uma subrotina, que limpa totalmente o formulrio para uma nova digitao:
Private Sub LimparTela()
'Chama a sub LimparDados para limpar os campos do formulrio:
LimparDados
'Desabilita o boto Excluir:
Toolbar1.Buttons(3).Enabled = False
'Apaga o contedo do campo CodUsuario e lhe passa o foco:
txtCodUsuario.Text = Empty
txtCodUsuario.SetFocus
End Sub

8. Falta ainda a subrotina de excluso de registros. Essa um pouco mais simples:


Private Sub ExcluirRegistro()
Dim cnnComando As New ADODB.Command
Dim vOk As Integer
On Error GoTo errExclusao

77

Microsoft Visual Basic 6

78

'Solicita confirmao da excluso do registro:


vOk = MsgBox("Confirma a excluso desse registro?", _
vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, _
"Excluso")
If vOk = vbYes Then
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
'Cria o comando SQL:
.CommandText = "DELETE FROM Usuarios WHERE CodUsuario = " & _
txtCodUsuario.Text & ";"
.Execute
End With
MsgBox "Registro excludo com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, _
"Excluso OK"
'Chama a sub que apaga todos os campos do formulrio:
LimparTela
End If
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errExclusao:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro durante a excluso do registro.", _
vbExclamation + vbOKOnly + vbApplicationModal, "Erro"
.Number = 0
GoTo Saida
End If
End With
End Sub

9. Para terminar a codificao desse formulrio falta apenas codificar o evento LostFocus dos campos cujo
contedo queremos formatar antes de gravar:
Private Sub txtNomeUsuario_LostFocus()
'Converte a primeira letra de cada palavra digitada em maiscula,
'e as demais em minsculas:
txtNomeUsuario.Text = StrConv(txtNomeUsuario.Text, vbProperCase)
End Sub
Private Sub txtCidade_LostFocus()
txtCidade.Text = StrConv(txtCidade.Text, vbProperCase)
End Sub
Private Sub txtEndereco_LostFocus()
txtEndereco.Text = StrConv(txtEndereco.Text, vbProperCase)
End Sub
Private Sub txtEstado_LostFocus()
'Converte a sigla do Estado digitada em letras maisculas:
txtEstado.Text = UCase(txtEstado.Text)
End Sub
Private Sub txtCEP_LostFocus()
'Formata o CEP digitado:
txtCEP.Text = Format(txtCEP.Text, "00000-000")
End Sub

10. Finalmente, abra o formulrio frmBiblio na janela Cdigo e codifique o evento Click do menu
mnuCadUsuarios:
Private Sub mnuCadUsuarios_Click()
frmNovoArtista.Show
End Sub

Microsoft Visual Basic 6

79

11. Altere o evento Click da ToolBar para chamar esse mesmo formulrio quando for clicado o boto n 1:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
If Button.Index = 1 Then
frmCadLivros.Show
ElseIf Button.Index = 5 Then
mnuSair_Click
End If
End Sub

12. Teste o aplicativo. No caso de algum erro, verifique cuidadosamente a construo dos comandos SQL,
pois uma simples vrgula fora do lugar ou faltando faz com que um comando no funcione. Aproveite
para incluir alguns usurios em seu banco de dados;
13. Grave esse formulrio com o nome de frmCadUsuarios;
14. Baseado na programao vista nessa lio, crie os formulrios para manuteno dos cadastros de
Categorias e de Editoras.

Microsoft Visual Basic 6

80

Lio 10: Mais Controles


Alm de caixas de textos e labels, podemos usar para alimentar os campos das tabelas quaisquer outros
controles que permitam a entrada de dados. Em nosso caso, vendo a estrutura da tabela de Livros,
encontraremos alguns campos que se encaixam nessa situao. Vejamos:
Os campos CodEditora e CodCategoria esto relacionados, respectivamente, s tabelas Editoras e
Categorias, e portanto podemos montar caixas de combinao onde o operador possa fazer sua escolha;
Os campos AcompCD e AcompDisquete so do tipo Sim/No, e portanto podemos usar caixas de
verificao para marcar e desmarcar essas opes;
O campo Idioma, do tipo Byte, receber um valor entre 0 e 2 que indicar o idioma em que est escrito o
livro, sendo que 0 = Portugus, 1 = Ingls e 2 = Outro. Como no podem ser marcadas dois ou mais
idiomas ao mesmo tempo, podemos montar para esse campo um grupo de botes de opo.
Nessa lio estudaremos esses novos controles, enquanto elaboramos mais alguns formulrios do projeto
Bibliotecrio. Adicionalmente, veremos como abrir consultas criadas no Access em um projeto VB.

Caixas de Listagem
Uma caixa de listagem oferece ao usurio uma lista de opes entre as quais ele deve obrigatoriamente
efetuar sua escolha. Se o nmero de itens no couber no espao ocupado pela caixa no formulrio,
uma barra de rolagem vertical ser automaticamente exibida. Um exemplo de caixa de listagem encontrado
numa das telas do assistente para instalao de impressoras do Windows: o usurio deve escolher uma das
impressoras apresentadas na lista:

Caixas de listagem para escolha de impressora do Windows

Caixas de Combinao
As caixas de combinao, tambm chamadas simplesmente de combo, tm esse nome por serem uma
mistura de caixa de texto com caixa de listagem. O usurio tanto pode escolher um item da lista como
digitar um valor diretamente na caixa de texto. As principais diferenas entre uma ComboBox e uma ListBox
so duas, dependendo do tipo de caixa de combinao usado: a combo pode permitir ao usurio escolher uma
opo que no consta da caixa e ocupar menos espao no formulrio que uma caixa de listagem:

A propriedade que determina o tipo da caixa de combinao a Style. Existem trs tipos diferentes:
0 DropDown Combo: o tipo mais comum: permite tanto a escolha de um item da lista como a
digitao diretamente na caixa de texto, inclusive de um dado no constante da lista. A lista fica oculta e
exibida quando se clica no boto ao lado da caixa de texto. o estilo do nosso exemplo;
1 Simple Combo: nesse estilo a caixa de listagem permanentemente exibida. O usurio pode digitar
diretamente na caixa de texto, mas a vantagem da economia de espao perdida.

Microsoft Visual Basic 6

81

2 DropDown List: bastante parecida com uma caixa de listagem comum. O usurio no pode digitar
na caixa de texto, que serve apenas para exibir o item selecionado. Como no aceita digitao, no pode
ser escolhida uma opo que no conste da lista.
As demais propriedades e mtodos das caixas de listagem e de combinao so comuns entre elas. Vejamos
as principais:

Propriedade List
A propriedade List contm um array cujos elementos so os itens da caixa de listagem ou de combinao.
Ela pode fornecer um determinado item atravs de seu ndice, que inicia-se em 0. Sua sintaxe :
NomeDaCaixa.List(<ndice>)

Onde <ndice> o nmero do ndice do item desejado.

Propriedade ListCount
Essa propriedade, que tambm no est disponvel em tempo de projeto, usada para se obter o nmero de
itens da caixa de listagem ou de combinao.

Propriedade ListIndex
A propriedade ListIndex retorna o nmero do ndice do item atualmente selecionado da caixa de listagem ou
de combinao. Se no foi selecionado nenhum item, ela retorna o valor 1.

Propriedade Text
A propriedade Text tambm pode ser usada para se obter o item atualmente selecionado da caixa de listagem
ou de combinao, s que, como o prprio nome indica, ela retorna o texto do item selecionado, ao invs do
ndice.

Propriedade ItemData
Eis uma propriedade muito interessante: para entender sua utilidade, imagine a seguinte situao: no cadastro
de Livros temos um campo chamado CodEditora, que, como j dissemos, ser obtido a partir de uma caixa
de combinao no formulrio que vamos construir. Acontece que (como voc deve ter reparado) o campo
numrico e o item exibido pela combo um texto, que portanto no poder ser gravado nesse campo.
ItemData serve exatamente para resolver esse problema, pois ela armazena dados numricos associados aos
itens da combo. Assim, quando adicionarmos uma editora caixa, aproveitaremos para gravar o cdigo
dessa editora na propriedade ItemData, e quando uma editora for selecionada gravaremos no registro o
contedo de ItemData. A sintaxe dessa propriedade a seguinte:
<expresso> = NomeDaCaixa.Itemdata.<ndice>

Onde <expresso> uma varivel ou campo tipo Long, e <ndice> o nmero do ndice do item desejado.

Propriedade Sorted
Essa propriedade determina se os itens sero exibidos em ordem alfabtica ou no. Os valores possveis so
True (a lista ser exibida em ordem alfabtica) ou False (os itens sero exibidos na mesma ordem em que
foram includos na lista).

Mtodo AddItem
Para adicionarmos itens a uma caixa de listagem ou combinao, usamos o mtodo AddItem. Veja a sintaxe:
NomeDaCaixa.AddItem <item>[,<ndice>]

Onde:
Item o nome do item a ser adicionado lista. Se for um texto deve vir entre aspas;
ndice opcional: se for especificado, o item ser adicionado lista com o nmero de ndice indicado. O
valor 0 indica a primeira posio, 1 o segundo, e assim por diante. Se no for informado, o item ser
adicionado ao final da lista. muito til quando trabalhamos com a propriedade ItemData.
Veja alguns exemplos:

Microsoft Visual Basic 6

82

Para adicionar o item Melancia a uma caixa de listagem chamada lstFrutas:


lstFrutas.AddItem Melancia

Para adicionar o mesmo item na primeira posio da caixa de listagem:


lstFrutas.AddItem Melancia,0

Para adicionar o texto contido em uma caixa de texto caixa de listagem:


lstFrutas.AddItem txtFruta.Text

Mtodo RemoveItem
O mtodo RemoveItem exclui um item de uma caixa de listagem ou combinao. Veja sua sintaxe:
NomeDaCaixa.RemoveItem <ndice>

Onde <ndice> o ndice do item que deve ser excludo da lista. Por exemplo: para excluir o item com ndice
4 da caixa de listagem lstFrutas, o comando seria o seguinte:
lstFrutas.RemoveItem 4

Caixas de Verificao
Esse tipo de controle normalmente usado para habilitar e desabilitar opes no exclusivas. Ou seja:
quando voc inclui mais de uma caixa de verificao em um formulrio, voc pode marcar uma, duas,
trs, todas, ou nenhuma. Sua principal propriedade a Value, que indica se a caixa est ou no habilitada, e
pode assumir trs valores: 0 Unchecked (desabilitado), 1 Checked (habilitado), e 2 Grayed. Essa
ltima ocorre quando a caixa est marcada apenas para uma parte de uma seleo de texto, por exemplo.

Botes de Opo
J usamos esse controle no nosso primeiro aplicativo, lembra-se? Era ele que indicava nosso humor
matinal no programa Hello, que elaboramos na lio 1. Ele tambm serve para indicar opes, s que
dessa vez exclusivas, ou seja, somente um boto de opo pode estar habilitado de cada vez. A propriedade
Value tambm a mais importante para esse controle, e pode assumir os valores True e False. Os botes de
opo podem ser agrupados de modo a conseguirmos determinar vrias opes com eles ao mesmo tempo:
somente um boto pode estar habilitado em um determinado momento, mas se temos em um formulrio mais
de um grupo de botes, em cada um deles pode existir um boto ligado. Esse efeito conseguido com o uso
de molduras.

Molduras
Eis um controle curioso: basicamente, uma moldura (ou Frame) no serve para nada alm de criar
bordas nas quais outros controles so inseridos, agrupando-os. Mas est justamente a sua grande
utilidade: quando os controles so agrupados em frames eles passam a funcionar de maneira integrada. Por
exemplo: se voc criar uma moldura, inserir nela alguns labels, e depois disso mov-la para outra rea do
formulrio, os labels sero movidos junto com a moldura, pois esto subordinados a ela. Mas, cuidado! Para
que isso acontea, imprescindvel que os controles sejam desenhados dentro da moldura. Nada de dar
duplo click em um controle e depois mov-lo para dentro da frame. Ele no ser incorporado pela moldura, e
continuar sendo um controle independente. A incorporao tambm no funcionar se uma das bordas do
controle for desenhada para fora da moldura, mesmo que a maior parte esteja dentro dela.

A Propriedade Index
Como vimos no incio do curso, cada objeto em um formulrio deve possuir um nome, sendo que no podem
existir dois objetos com o mesmo nome. Mas podemos criar um control array (vetor de controles) que um
conjunto de controles do mesmo tipo com o mesmo nome, que so acessados atravs de um ndice atribudo
a cada um deles. Por exemplo: quando usamos botes de opo da mesma maneira que no aplicativo Hello,
temos que escrever uma procedure Click para cada um dos botes, pois eles so objetos independentes entre
si (lembra-se?). Se ao invs disso crissemos um vetor com esse grupo de botes, todos possuiriam o mesmo
nome, e a procedure Click seria comum a todos eles. Bastaria ento identificar em qual deles o usurio

Microsoft Visual Basic 6

83

clicou, atravs da propriedade Index. Foi o que fizemos com os botes da ToolBar nos formulrios do
projeto Bibliotecrio.
Para testar o uso do control array, inicie um novo projeto e insira no formulrio um label com o nome de
lblTeste. Logo em seguida, insira outro label e atribua a ele o mesmo nome, lblTeste. O VB exibir a
seguinte caixa de dilogo:

Traduzindo: Voc j possui um controle chamado lblTeste. Voc quer criar um vetor de controles?.
Responda Sim, e o VB renomear o primeiro label para lblTeste(0) e o segundo para lblTeste(1). O valor
entre parnteses o da propriedade Index de cada um dos controles: 0 e 1, respectivamente. A partir desse
momento, quando o objeto for referenciado voc dever indicar o ndice do label que est querendo usar. Por
exemplo: para mudar a propriedade Caption do primeiro label, poderamos escrever o comando como a
seguir:
lblTeste(0).Caption = Esse o primeiro objeto do vetor

Quando trabalhamos com vetores, os eventos do control array passam a receber um parmetro chamado
Index, do tipo Integer, que recebe o valor da propriedade Index do controle que gerou o evento. Por exemplo:
abra a janela Cdigo no evento Click de um dos labels. Vamos escrever um comando que mostre uma
mensagem no label que foi clicado. Para isso, vamos identific-lo atravs do parmetro Index:
Private Sub lblTeste_Click(Index As Integer)
If Index = 0 Then
lblTeste(0).Caption = "Voc clicou aqui"
lblTeste(1).Caption = Empty
Else
lblTeste(0).Caption = Empty
lblTeste(1).Caption = "Voc clicou aqui"
End If
End Sub

Uma outra maneira de usar o parmetro Index:


Private Sub lblTeste_Click(Index As Integer)
lblTeste(Index).Caption = "Um texto qualquer"
End Sub

Por fim, no confunda o parmetro Index, que nada mais que uma varivel recebida pela procedure, com a
propriedade Index, que contm o nmero do ndice do controle no vetor.
Observao: depois de criar um vetor, para fazer com que um de seus componentes volte a ser um controle
independente, deve-se renome-lo e depois apagar o valor da propriedade Index.
Depois da apresentao dos controles que sero usados no formulrio de cadastramento de Livros, podemos
comear a trabalhar. Adicione um novo formulrio ao projeto, formate-o como no modelo da prxima pgina
e altere as propriedades dos objetos conforme a tabela a seguir (note que existe um control array para o
idioma):
Objeto
Formulrio

Nome
frmCadLivros

Caixa de texto

txtCodLivro

Caixa de texto

txtTitulo

Outras Propriedades = Valor


Caption = Cadastro de Livros
BorderStyle = 1 Fixed Single
Icon = Misc\Books02.ICO
KeyPreview = True
MDIChild = True
Text =
MaxLength = 5
Text =
MaxLength = 50

Microsoft Visual Basic 6

84

Modelo do formulrio do Cadastro de Livros

Objeto
Caixa de texto

Nome
txtAutor

Caixa de Combinao
Caixa de Combinao
Caixa de texto

cboEditora
cboCategoria
txtObservacoes

Moldura
Caixa de Verificao
Caixa de Verificao
Moldura
Boto de Opo

Frame1
chkAcompCD
chkAcompDisquete
Frame2
optIdioma

Boto de Opo

optIdioma

Boto de Opo

optIdioma

Image

ImageList1
Imagens

ToolBar

ToolBar1

Boto 1
Boto 2
Boto 3
Boto 4

Outras Propriedades = Valor


Text =
MaxLength = 35
Style = 2 DropDown List
Style = 2 DropDown List
Text =
MultiLine = True
ScroolBars = 2 - Vertical
Caption = Acompanha:
Caption = CD
Caption = Disquete
Caption = Idioma:
Caption = Portugus
Index = 0
Value = True
Caption = Ingls
Index = 1
Caption = Outro
Index = 2
Tamanho das imagens: 32 x 32 pixels
1 = Computer\Disk04.ICO
2 = Writing\Erase02.ICO
3 = Computer\Trash01.ICO
4 = TRAFFIC\TRFFC14.ICO
ImageList = ImageList1
Appearance = 1 cc3D
BorderStyle = 0 ccNone
Style = 1 tbrFlat
ToolTipText = Grava o registro atual
Image = 1
ToolTipText = Limpa os dados digitados
Image = 2
ToolTipText = Exclui o registro atual
Image = 3
Enabled = False (desmarcar)
ToolTipText = Retorna ao menu principal
Image = 4

Microsoft Visual Basic 6

85

Grave o formulrio com o nome de frmCadLivros, e vamos ento iniciar a programao. A maior parte dela
segue a mesma lgica do cadastro de usurios, ento comearemos pelos controles que estamos estudando
agora:
1. Vamos precisar de algumas variveis privadas para armazenar os valores das caixas de combinao e de
verificao e dos botes de opo. Abra a janela Cdigo na seo Declarations e escreva os comandos:
Dim
Dim
Dim
Dim

vInclusao As Boolean
vCodEditora, vCodCategoria As Long
vAcompCD, vAcompDisquete As Boolean
vIdioma As Byte

2. Escreva a procedure Form_KeyPress para permitir a mudana dos campos pela tecla Enter;
3. No evento Form_Load vamos inicializar as variveis privadas:
Private Sub Form_Load()
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.Height - Me.Height) / 2
'Inicializa as variveis auxiliares:
vCodEditora = 0
vCodCategoria = 0
vAcompCD = False
vAcompDisquete = False
vIdioma = 0
End Sub

4. A programao das caixas de verificao muito simples: quando acontecer um click, verificamos se foi
marcada ou desmarcada, e alteramos o valor da varivel correspondente para True ou False, conforme o
caso. Abra ento a janela cdigo dando um duplo-click sobre chkAcompCD:
Private Sub chkAcompCD_Click()
'Verifica se chkAcompCD est ou no marcada, e atribui a vAcompCD o valor
'correspondente:
If chkAcompCD.Value = vbChecked Then
vAcompCD = True
Else
vAcompCD = False
End If
End Sub

5. Programe o evento Click da caixa de verificao chkAcompDisquete conforme a procedure acima;


6. A programao para os botes de opo ainda mais fcil: basta atribuir varivel o valor do parmetro
Index:
Private Sub optIdioma_Click(Index As Integer)
'Atribui varivel vIdioma o valor do parmetro index, pois esse contm o
'ndice do boto que foi clicado: 0 = Portugus, 1 = Ingls e 2 = Outros:
vIdioma = Index
End Sub

7. O prximo passo fazer a programao das caixas de combinao. Vamos aproveit-lo para aprender
como criar recordsets a partir de consultas do Access. Por enquanto, grave seu trabalho e saia do VB;

Acionando Consultas do Banco de Dados


Muitas vezes utilizamos dados obtidos atravs de outros objetos do banco de dados que no sejam as tabelas,
normalmente de consultas. No caso do Access, isso acontece muito quando precisamos de dados de tabelas
relacionadas, ou com muitos critrios de seleo, pois mais simples criar uma consulta que elaborar o
comando SQL correspondente. A execuo de uma consulta a partir da aplicao VB muito simples:
1. Abra o Access e o banco de dados Biblio;
2. Crie uma nova consulta conforme o modelo da prxima pgina;
3. Salve a consulta com o nome de EditorasEmOrdemAlfabetica;
4. Aproveite para criar tambm a consulta CategoriasEmOrdemAlfabetica, com os campos CodCategoria
e NomeCategoria;

Microsoft Visual Basic 6

86

A consulta EditorasEmOrdemAlfabetica

5. Saia do Access, abra o VB e o projeto Bibliotecario;


6. Vamos criar as procedures para carregar as combos no mdulo de programao como pblicas. Mas, se
elas no sero criadas no formulrio, como faremos para que reconheam as combos, que so objetos
locais? Simples: passaremos o nome da combo a ser carregada como parmetro para a procedure. Abra a
janela Cdigo no mdulo de programao Biblio;
7. Escreva a procedure ComboEditoras conforme segue:
Public Sub ComboEditoras(NomeCombo As ComboBox)
Dim cnnComando As New ADODB.Command
Dim rsTemp As New ADODB.Recordset
Dim i As Integer
On Error GoTo errComboEditoras
'Executa a consulta EditorasEmOrdemAlfabetica:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdStoredProc
.CommandText = "EditorasEmOrdemAlfabetica"
Set rsTemp = .Execute
End With
With rsTemp
'Verifica se existe alguma editora cadastrada:
If Not (.EOF And .BOF) Then
'Se existe, ento posiciona o apontador no primeiro registro do rs:
.MoveFirst
'Inicializa a varivel i que ser usada como ndice para a
'propriedade ItemData:
i = 0
While Not .EOF
'Adiciona um item combo com o nome da editora:
NomeCombo.AddItem !Descrio, i
'Grava na propriedade ItemData desse o cdigo da editora:
NomeCombo.ItemData(i) = !Cdigo
'Vai para o prximo registro do rs:
.MoveNext
'Incrementa i:
i = i + 1
Wend
End If
End With
Saida:
Set cnnComando = Nothing
Set rsTemp = Nothing

Microsoft Visual Basic 6

87

Exit Sub
errComboEditoras:
With Err
If .Number <> 0 Then
MsgBox "No foi possvel a leitura da tabela de Editoras:", _
, vbInformation + vbOKOnly + vbApplicationModal, _
"Erro ao carregar ComboBox"
.Number = 0
GoTo Saida
End If
End With
End Sub

Obs.: NomeCombo o parmetro que vai receber a caixa de combinao a ser carregada. Assim,
declaramos seu tipo como ComboBox. dessa maneira que passamos objetos como parmetros para
subrotinas: indicando qual o tipo desse objeto. Se voc no souber o tipo do objeto, declare o
parmetro como Variant, dessa maneira o tipo ser assumido dinamicamente na passagem do parmetro.
8. Usando CarregaEditoras como base, crie um outra subrotina chamada CarregaCategorias executando a
consulta CategoriasEmOrdemAlfabetica;
9. Abra o formulrio frmCadLivros e acrescente a seguinte programao ao final do evento Form_Load,
para fazer o carregamento das combos a partir das procedures que acabamos de criar:
'Chama a procedure ComboEditoras e passa a combo cboEditora como
'parmetro:
ComboEditoras cboEditora
'O mesmo para cboCategorias:
ComboCategorias cboCategoria
'Garante que nenhum item esteja selecionado nas combos:
cboEditora.ListIndex = -1
cboCategoria.ListIndex = -1

10. Devemos agora programar o evento Click das combos para atribuir o cdigo do item escolhido varivel
correspondente. Comecemos por cboEditoras (ateno: o evento padro de uma combo o Change, mas
a programao abaixo deve ser feita no evento Click, ento cuidado para faz-la corretamente):
Private Sub cboEditora_Click()
With cboEditora
'Verifica se foi selecionado um item da combo:
If .ListIndex <> -1 Then
'Se foi, atribui varivel vCodEditora o contedo da
'propriedade ItemData:
vCodEditora = .ItemData(.ListIndex)
Else
'Seno, zera a varivel:
vCodEditora = 0
End If
End With
End Sub

Obs.: como queremos armazenar na varivel o cdigo referente ao item selecionado, cujo ndice
indicado por ListIndex, usamos essa propriedade como parmetro para ItemData.
11. Baseado na procedure acima, escreva a programao para o evento Click da combo cboCategoria;
12. O prximo passo apresentar os dados do registro selecionado nos campos do formulrio em caso de
alterao. Como no cadastro de usurios, isso ser programado no evento LostFocus de txtCodLivro:
Private Sub txtCodLivro_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
Dim vCod As Long
Dim i As Integer
On Error GoTo errSelecao
'Converte o cdigo digitado para pesquisa:
vCod = Val(txtCodLivro.Text)
'Se no foi digitado um cdigo vlido, sai da sub:
If vCod = 0 Then Exit Sub
Screen.MousePointer = vbHourglass

Microsoft Visual Basic 6

88

'Tenta selecionar o registro na tabela de livros:


With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "SELECT * FROM Livros WHERE CodLivro = " & vCod & ";"
Set rsSelecao = .Execute
End With
With rsSelecao
If .EOF And .BOF Then
'Se o recordset est vazio, no encontrou registro com esse cdigo:
LimparDados
'Identifica a operacao como incluso:
vInclusao = True
Else
'Seno, atribui aos campos e variveis auxiliares os dados do
'registro:
txtTitulo.Text = !Titulo
txtAutor.Text = !Autor
vCodEditora = !CodEditora
vCodCategoria = !CodCategoria
vAcompCD = !AcompCD
vAcompDisquete = !AcompDisquete
vIdioma = !Idioma
'Como Observacoes no um campo obrigatrio, devemos impedir a
'atribuio do valor nulo (se houver) caixa de texto:
txtObservacoes = Empty & !Observacoes
'Exibe os dados das variveis nos controles correspondentes:
With cboEditora
'Elimina a seleo atual:
.ListIndex = -1
'Como ListCount retorna o nmero de itens da combo,
'ListCount - 1 igual ao ndice do ltimo item. Portanto, o
'loop abaixo ser executado para todos os itens da combo
'atravs de seu ndice:
For i = 0 To (.ListCount - 1)
If vCodEditora = .ItemData(i) Then
'Se ItemData for igual ao cdigo atual,
'seleciona o item e sai do loop:
.ListIndex = i
Exit For
End If
Next i
End With
With cboCategoria
.ListIndex = -1
For i = 0 To (.ListCount - 1)
If vCodCategoria = .ItemData(i) Then
.ListIndex = i
Exit For
End If
Next i
End With
'Se vAcompCD = True, marca chkAcompCD, seno desmarca:
chkAcompCD.Value = IIf(vAcompCD, vbChecked, vbUnchecked)
chkAcompDisquete.Value = IIf(vAcompDisquete, vbChecked, vbUnchecked)
'Marca o boto de opo correspondente ao idioma atual:
optIdioma(vIdioma).Value = True
'Habilita o boto Excluir:
Toolbar1.Buttons(3).Enabled = True
'Identifica a operao como Alterao:
vInclusao = False
End If
End With
'Desabilita a digitao do cdigo:
txtCodLivro.Enabled = False
Saida:
'Elimina o command e o recordset da memria:
Set rsSelecao = Nothing

Microsoft Visual Basic 6

Set cnnComando = Nothing


Screen.MousePointer = vbDefault
Exit Sub
errSelecao:
With Err
If .Number <> 0 Then
MsgBox "Erro na recuperao do registro solicitado:", _
vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
.Number = 0
GoTo Saida
End If
End With
End Sub

13. Na sub LimparDados eliminamos as selees e marcaes dos controles que estamos estudando:
Private Sub LimparDados()
'Apaga o contedo dos campos do formulrio:
txtTitulo.Text = Empty
txtAutor.Text = Empty
txtObservacoes.Text = Empty
'Elimina a seleo das combos:
cboEditora.ListIndex = -1
cboCategoria.ListIndex = -1
'Desmarca as caixas de verificao:
chkAcompCD.Value = vbUnchecked
chkAcompDisquete.Value = vbUnchecked
'Marca a opo Portugus em optIdioma:
optIdioma(0).Value = True
'Reinicializa as variveis auxiliares:
vCodEditora = 0
vCodCategoria = 0
vAcompCD = False
vAcompDisquete = False
vIdioma = 0
End Sub

14. Na sub GravarDados, passamos para os campos os dados das variveis auxiliares:
Private Sub GravarDados()
Dim cnnComando As New ADODB.Command
Dim vSQL As String
Dim vCod As Long
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao
'Converte o cdigo digitado para gravao:
vCod = Val(txtCodLivro.Text)
'Verifica os dados digitados:
vConfMsg = vbExclamation + vbOKOnly + vbApplicationModal
vErro = False
If vCod = 0 Then
MsgBox "O campo Cdigo no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtTitulo.Text = Empty Then
MsgBox "O campo Ttulo no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If txtAutor.Text = Empty Then
MsgBox "O campo Autor no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If vCodEditora = 0 Then
MsgBox "No foi selecionada uma Editora.", vConfMsg, "Erro"
vErro = True
End If
If vCodCategoria = 0 Then
MsgBox "No foi selecionada uma Categoria.", vConfMsg, "Erro"

89

Microsoft Visual Basic 6

90

vErro = True
End If
'Se aconteceu um erro de digitao, sai da sub sem gravar:
If vErro Then Exit Sub
Screen.MousePointer = vbHourglass
'Constri o comando SQL para gravao:
If vInclusao Then
'Se uma incluso:
vSQL = "INSERT INTO Livros (CodLivro, Titulo, Autor, CodEditora, " & _
"CodCategoria, AcompCD, AcompDisquete, Idioma, Observacoes) " & _
"VALUES (" & vCod & ",'" & _
txtTitulo.Text & "','" & _
txtAutor.Text & "'," & _
vCodEditora & "," & _
vCodCategoria & "," & _
vAcompCD & "," & _
vAcompDisquete & "," & _
vIdioma & ",'" & _
txtObservacoes.Text & "');"
Else
'Seno, alterao:
vSQL = "UPDATE Livros SET Titulo = '" & txtTitulo.Text & _
"', Autor = '" & txtAutor.Text & _
"', CodEditora = " & vCodEditora & _
", CodCategoria = " & vCodCategoria & _
", AcompCD = " & vAcompCD & _
", AcompDisquete = " & vAcompDisquete & _
", Idioma = " & vIdioma & _
", Observacoes = '" & txtObservacoes.Text & _
"' WHERE CodLivro = " & vCod & ";"
End If
'Executa o comando de gravao:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = vSQL
.Execute
End With
MsgBox "Gravao concluda com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, _
"Gravao OK"
'Chama a sub que limpa os dados do formulrio:
LimparTela
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox "Erro durante a gravao dos dados no registro." & vbCrLf & _
"A operao no foi completada." , _
vbExclamation + vbOKOnly + vbApplicationModal, _
"Operao cancelada"
.Number = 0
GoTo Saida
End If
End With
End Sub

15. O restante da programao para esse formulrio semelhante quela feita em frmCadUsuarios:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
GravarDados
Case 2
LimparTela

Microsoft Visual Basic 6

Case 3
ExcluirRegistro
Case 4
Unload Me
End Select
End Sub

Private Sub txtAutor_LostFocus()


'Converte a primeira letra de cada palavra digitada em maiscula,
'e as demais em minsculas:
txtAutor.Text = StrConv(txtAutor.Text, vbProperCase)
End Sub

Private Sub txtTitulo_LostFocus()


txtTitulo.Text = StrConv(txtTitulo.Text, vbProperCase)
End Sub

Private Sub ExcluirRegistro()


Dim cnnComando As New ADODB.Command
Dim vOk As Integer
Dim vCod As Long
On Error GoTo errExclusao
'Solicita confirmao da excluso do registro:
vOk = MsgBox("Confirma a excluso desse registro?", _
vbApplicationModal + vbDefaultButton2 + vbQuestion + vbYesNo, _
"Excluso")
If vOk = vbYes Then
Screen.MousePointer = vbHourglass
'Se confirmou, converte o cdigo digitado:
vCod = Val(txtCodLivro.Text)
'Executa a operao:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "DELETE FROM Livros WHERE CodLivro = " & vCod & ";"
.Execute
End With
MsgBox "Registro excludo com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, _
"Excluso OK"
LimparTela
End If
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errExclusao:
With Err
If .Number <> 0 Then
MsgBox "Erro durante a excluso do registro." & vbCrLf & _
"A operao no foi completada.", _
vbExclamation + vbOKOnly + vbApplicationModal, _
"Operao cancelada"
.Number = 0
GoTo Saida
End If
End With
End Sub

91

Microsoft Visual Basic 6

92

Private Sub LimparTela()


LimparDados
Toolbar1.Buttons(3).Enabled = False
txtCodLivro.Text = Empty
txtCodLivro.SetFocus
End Sub

1. Faa no formulrio principal a programao necessria para que o menu mnuCadLivros e o boto n 1 da
ToolBar abram o formulrio frmCadLivros;
16. Grave seu trabalho;
17. Teste o funcionamento do formulrio. Aproveite para adicionar alguns livros ao banco de dados.

Microsoft Visual Basic 6

93

Lio 11 Datas e Relacionamentos


Uma das preocupaes que todo programador deve ter : como manter a integridade das informaes do meu
banco de dados? Por isso to importante a verificao dos dados digitados antes da gravao de um
registro. Mas existem casos que essa verificao deve ser mais cuidadosa: na gravao de datas e quando
existe um relacionamento entre as tabelas envolvidas. Nessa lio aprenderemos como tratar os dados nessas
situaes.

Gravao de Datas
Como j dissemos quando da apresentao dos tipos de dados admitidos pelo VB, para ele um dado tipo
data nada mais que um dado numrico com um formato especial que representa uma data. Devido a essa
particularidade, para que possamos manipular datas corretamente no VB foram criadas algumas funes
especficas. Vejamos as principais:
CDate: ns j estudamos essa funo quando falamos das funes de converso. Ela converte uma string
em uma data, se possvel.
Date: essa funo retorna a data corrente do sistema, no formato especificado no Painel de Controle do
Windows.
IsDate: verifica se uma expresso pode ser convertida em uma data, e nesse caso retorna True, ou False
caso contrrio. A expresso pode ser um dado string, numrico, data ou variant. Sua sintaxe :
IsDate(<expresso>)

Observao: tambm existem funes de verificao para outros tipos de dados. As principais so:
IsNumeric, para verificar se um dado numrico,
IsEmpty, para verificar se uma string est vazia, e
IsNull, para verificar se uma expresso nula.

Verificando os Relacionamentos
Os SGBD's atuais so em sua grande maioria do tipo relacional, ou seja, baseados no conceito de
relacionamento entre tabelas para permitir a recuperao de informaes impedindo redundncia de dados.
Um relacionamento uma ligao entre a chave primria de uma tabela e uma chave estrangeira que
contenha o mesmo dado em outra tabela. A tabela que contm a chave primria chamada de origem do
relacionamento, e a que contm a chave estrangeira chamada de destino do relacionamento. O problema
que, para que um relaciomento funcione corretamente preciso no destino no existam dados sem
correspondncia na tabela de origem. Isso implica que:
Na incluso ou alterao de registros na origem, a chave primria no pode ser repetida;
Na incluso ou alterao de registros no destino, deve-se verificar se existe o registro correspondente
chave estrangeira na origem;
A alterao ou excluso de registros na origem no deve ser permitida no caso de existirem registros
relacionados no destino, a no ser que seja uma atualizao em cascata (onde os registros correspondentes
no destino tambm sero afetados pela operao executada na origem).
A esse conjunto de regras damos o nome de Integridade Referencial. Os SGBD's mais modernos
incluindo a o Access fazem a checagem de integridade referencial automaticamente, impedindo anomalias
nas informaes do banco. Mas isso no elimina a necessidade de checarmos os dados digitados. Por
exemplo: em nosso sistema, no emprstimo de um livro, o operador informa o cdigo do usurio que o est
retirando. Devemos verificar se esse cdigo existe na tabela de usurios, pois se enviarmos ao banco um
cdigo de usurio invlido, e os recursos de checagem de integridade referencial do banco estiverem
ativados, a gravao no ser realizada e o banco retornar um erro de execuo.
Para aplicar esses conceitos, vamos criar o formulrios de emprstimo de livros do sistema Bibliotecrio.
Note que nesse formulrio ser solicitada a digitao dos cdigos do livro e do usurio, e portanto vamos
precisar verific-los antes de gravar o registro:

Microsoft Visual Basic 6

94

1. Adicione um novo formulrio ao projeto e formate-o como no modelo:

A tabela abaixo contm as propriedades dos objetos:


Objeto
Formulrio

Caixa de texto
Label
Caixa de texto
Label
Caixa de texto
Caixa de texto
Boto de Comando
Boto de Comando
Boto de Comando

Nome
frmEmprestimos

Outras Propriedades = Valor


Caption = Emprstimos de Livros
BorderStyle = 1 Fixed Single
Icon = Misc\Book04.ICO
KeyPreview = True
MDIChild = True
txtCodLivro
Text =
MaxLength = 5
lblTitulo
Caption =
txtCodUsuario
Text =
MaxLength = 5
lblNomeUsuario
Caption =
txtDataEmprestimo Text =
MaxLength = 10
txtDataDevolucao Text =
MaxLength = 10
cmdOk
Caption = &Ok
Style = 1 Graphical
Picture = Misc\Checkmrk.ICO
cmdCancelar
Caption = &Cancelar
Style = 1 Graphical
Picture = Computer\W95mbx01.ICO
cmdRetornar
Caption = &Retornar
Style = 1 Graphical
Picture = Traffic\Trffc14.ICO

2. Grave o novo formulrio com o nome de frmEmprestimos;


3. Escreva as procedures Form_KeyPress e cmdRetornar_Click como j estudamos anteriormente;
4. No evento Load, vamos inicializar os campos txtDataEmprestimo e txtDataDevolucao. Note o uso da
funo Format:
Private Sub Form_Load()
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.Height - Me.Height) / 2
'Atribui caixa txtDataEmprestimo a data atual do sistema:
txtDataEmprestimo.Text = Format(Date, "Short Date")
'Atribui caixa txtDataDevolucao a data atual do sistema + 15 dias:
txtDataDevolucao.Text = Format((Date + 15), "Short Date")
End Sub

5. No evento LostFocus da caixa txtCodLivro, verificaremos se o cdigo digitado vlido, e exibiremos o


ttulo do livro em lblTitulo:
Private Sub txtCodLivro_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
Dim vCod As Long
On Error GoTo errSelecao

Microsoft Visual Basic 6

'Converte o cdigo digitado:


vCod = Val(txtCodLivro.Text)
'Se no foi digitado um cdigo vlido, sai da sub:
If vCod = 0 Then Exit Sub
Screen.MousePointer = vbHourglass
'Seleciona o livro solicitado:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "SELECT * FROM LIVROS WHERE CodLivro = " & vCod & ";"
Set rsSelecao = .Execute
End With
With rsSelecao
If .EOF And .BOF Then
'Se no encontrou o livro, deixa o ttulo do livro em branco:
lblTitulo.Caption = Empty
Else
'Se encontrou, exibe o ttulo do livro em lblTitulo:
lblTitulo.Caption = !Titulo
'Verifica se o livro j est emprestado:
If !Emprestado Then
'Se est, impede novo emprstimo:
MsgBox "Esse livro j est emprestado, verifique.", _
vbExclamation + vbOKOnly + vbSystemModal, "Erro"
'Volta o foco ao cdigo para redigitao:
txtCodLivro.SetFocus
End If
End If
End With
Saida:
Set rsSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
errSelecao:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro na recuperao do registro solicitado.", _
vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
.Number = 0
GoTo Saida
End If
End With
End Sub

6. A codificao para o campo txtCodUsuario um pouco mais simples:


Private Sub txtCodUsuario_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsSelecao As New ADODB.Recordset
Dim vCod As Long
On Error GoTo errUsuario
vCod = Val(txtCodUsuario.Text)
If vCod = 0 Then Exit Sub
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "SELECT NomeUsuario FROM Usuarios " & _
"WHERE CodUsuario = " & vCod & ";"
Set rsSelecao = .Execute
End With
With rsSelecao
If .EOF And .BOF Then
MsgBox "Cdigo do usurio invlido, verifique.", _
vbExclamation + vbOKOnly + vbSystemModal, "Erro"
lblNomeUsuario.Caption = Empty
txtCodUsuario.SetFocus
Else

95

Microsoft Visual Basic 6

96

'Se encontrou, exibe o nome do usurio em lblNomeUsuario:


lblNomeUsuario.Caption = !NomeUsuario
End If
End With
Saida:
Set rsSelecao = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
errUsuario:
With Err
If .Number <> 0 Then
MsgBox "Houve um erro na recuperao do usurio solicitado." & _
vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
.Number = 0
GoTo Saida
End If
End With
End Sub

7. No evento LostFocus de txtDataEmprestimo, antes de formatar a digitao, precisamos verificar se o


texto do campo ou no um data vlida. Para isso usaremos IsDate:
Private Sub txtDataEmprestimo_LostFocus()
Dim vDataDevolucao As Date
With txtDataEmprestimo
If .Text <> Empty Then
'Verifica se o dado digitado pode ser uma data:
If Not IsDate(.Text) Then
'Se o dado digitado no pode ser uma data, assume a do sistema:
.Text = Date
Else
'Seno, formata a data digitada:
.Text = Format(.Text, "Short Date")
End If
'Atribui caixa txtDataDevolucao a data digitada + 15 dias:
vDataDevolucao = CDate(.Text) + 15
txtDataDevolucao.Text = Format(vDataDevolucao, "Short Date")
End If
End With
End Sub

8. O mesmo vale para txtDataDevolucao:


Private Sub txtDataDevolucao_LostFocus()
'Formata a data digitada:
With txtDataDevolucao
If .Text <> Empty Then
If Not IsDate(.Text) Then
'Se o dado digitado no pode ser uma data, assume
'a data do sistema + 15 dias:
.Text = Date + 15
Else
'Seno, formata a data digitada:
.Text = Format(.Text, "Short Date")
End If
End If
End With
End Sub

9. O boto Ok grava os dados do emprstimo no cadastro de livros:


Private Sub cmdOk_Click()
Dim cnnComando As New ADODB.Command
Dim vCodLivro, vCodUsuario As Long
Dim vDataEmprestimo, vDataDevolucao As Date
Dim vConfMsg As Integer
Dim vErro As Boolean
On Error GoTo errGravacao

Microsoft Visual Basic 6

97

'Converte os dados digitados:


vCodLivro = Val(txtCodLivro.Text)
vCodUsuario = Val(txtCodUsuario.Text)
vDataEmprestimo = CDate(txtDataEmprestimo.Text)
vDataDevolucao = CDate(txtDataDevolucao.Text)
'Verifica os dados digitados:
vConfMsg = vbExclamation + vbOKOnly + vbSystemModal
vErro = False
If vCodLivro = 0 Then
MsgBox "O campo Cdigo do Livro no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If lblTitulo.Caption = Empty Then
'Se lblTitulo estiver em branco, o cdigo do livro informado no foi
'encontrado na tabela:
MsgBox "O campo Cdigo do Livro no contm um dado vlido.", _
vConfMsg, "Erro"
vErro = True
End If
If vCodUsuario = 0 Then
MsgBox "O campo Cdigo do Usurio no foi preenchido.", vConfMsg, "Erro"
vErro = True
End If
If vDataEmprestimo >= vDataDevolucao Then
MsgBox "A Data de Devolucao informada menor ou igual Data de " & _
Emprstimo, verifique.", vConfMsg, "Erro"
vErro = True
End If
'Se aconteceu um erro de digitao, sai da sub sem gravar:
If vErro Then Exit Sub
Screen.MousePointer = vbHourglass
'Executa a SP de devoluo de livros:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "UPDATE Livros SET CodUsuario = " & vCodUsuario & _
", Emprestado = True, DataEmprestimo = " & vDataEmprestimo & _
", DataDevolucao = " & vDataDevolucao & " WHERE CodLivro = " & _
vCodLivro & ";"
.Execute
End With
MsgBox "Esse livro foi emprestado a " & lblNomeUsuario & " com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, "Emprstimo OK"
'Chama a subrotina cmdCancelar_Click para limpar os campos do formulrio:
cmdCancelar_Click
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub
errGravacao:
With Err
If .Number <> 0 Then
MsgBox "Erro durante a gravao dos dados no registro." & _
vbCrLf & "A devoluo desse livro no foi completada.", _
vbExclamation + vbOKOnly + vbApplicationModal, _
"Emprstimo cancelado"
.Number = 0
GoTo Saida
End If
End With
End Sub

10. Finalmente, o boto Cancelar apaga os dados do formulrio sem grav-los:


Private Sub cmdCancelar_Click()
'Cancela a digitao atual e limpa todos os campos do formulrio:
txtCodLivro.Text = Empty
lblTitulo.Caption = Empty

Microsoft Visual Basic 6

98

txtCodUsuario.Text = Empty
lblNomeUsuario.Caption = Empty
txtDataEmprestimo.Text = Format(Date, "Short Date")
txtDataDevolucao.Text = Format((Date + 15), "Short Date")
txtCodLivro.SetFocus
End Sub

11. Abra o formulrio frmBiblio e faa a programao necessria para que o menu mnuEmprestimos e o
boto n 3 da ToolBar abram o formulrio frmEmprestimos;
12. Grave seu trabalho;
13. Teste a programao emprestando alguns livros.

Joins
No haveria razo para relacionar tabelas se no pudssemos recuperar as informaes mais facilmente. Em
SQL, usamos o comando SELECT e a clusula JOIN para exibir dados de tabelas relacionadas. A sintaxe de
SELECT com JOIN a seguinte:
SELECT <lista de campo> FROM <destino>
<INNER ou RIGHT ou LEFT> JOIN <origem>
ON <chave estrangeira> = <chave primria>;

A primeira linha contm um comando SELECT comum. A segunda linha indica o tipo de JOIN que deve ser
usado:
INNER: sero selecionadas para exibio somente as linhas que contenham dados de ambas as tabelas;
RIGHT: sero selecionadas para exibio todas as linhas da tabela que est a direita (right) do JOIN, ou
seja, da origem do relacionamento, mesmo que no existam dados correspondentes no destino;
LEFT: sero selecionadas para exibio todas as linhas da tabela que est a esquerda (left) do JOIN, ou
seja, do destino do relacionamento, mesmo que no existam dados correspondentes na origem;
Por exemplo: a tabela de livros no contm o nome da editora. Mas podemos exib-lo juntamente aos dados
do livro, com o seguinte comando:
SELECT Livros.*, Editoras.NomeEditora FROM Livros INNER JOIN Editoras ON
Livros.CodEditora = Editoras.CodEditora;

Note que, como estamos trabalhando com mais de uma tabela, precisamos identificar de que tabela vem o
campo desejado, atravs do ponto .. Isso fica bem evidente no campo CodEditora, que existe em ambas as
tabelas: para indicar o campo da tabela de Livros, usamos Livros.CodEditora. A indicao Livros.* indica
todos os campos da tabela Livros.
Outro exemplo: o comando abaixo exibe todos os usurios cadastrados, e o ttulo do livro quando o usurio
estiver com algum emprestado:
SELECT Usuarios.*, Livros.Titulo FROM Usuarios LEFT JOIN Livros ON
Usuarios.CodLivro = Livros.CodLivros;

interessante destacar que JOIN pode ser combinado com outras clusulas do comando SELECT, como
WHERE e ORDER BY, sem nenhum problema. Como exemplo, vamos alterar o comando acima para
ordenar o resultado pelo ttulo do livro:
SELECT Livros.*, Editoras.NomeEditora FROM Livros INNER JOIN Editoras ON
Livros.CodEditora = Editoras.CodEditora ORDER BY Livros.Titulo;

Mas vamos aplicar o que aprendemos: o prximo passo em nosso sistema a devoluo de livros. Para isso
vamos apagar as datas de devoluo e emprstimo do registro correspondente ao livro que est sendo
devolvido, e assim liber-lo para outro emprstimo. Vejamos como fazer isso:
1. Adicione ao projeto um novo formulrio, formate-o como o modelo da prxima pgina e defina as
propriedades dos objetos conforme a tabela;
2. Grave o novo formulrio com o nome de frmDevolucoes;
3. Escreva na procedure Form_Load os comandos para centralizar o formulrio;
4. Crie as procedures Form_KeyPress e cmdRetornar_Click do novo formulrio como estudamos nas lies
anteriores;

Microsoft Visual Basic 6

99

Objeto
Formulrio

Nome
frmDevolucoes

Caixa de texto

txtCodLivro

Label
Label
Label
Boto de Comando

lblTitulo
lblCodUsuario
lblNomeUsuario
cmdOk

Boto de Comando

cmdCancelar

Boto de Comando

cmdRetornar

Outras Propriedades = Valor


Caption = Devolues de Livros
BorderStyle = 1 Fixed Single
Icon = Misc\Books04.ICO
KeyPreview = True
MDIChild = True
Text =
MaxLength = 5
Caption =
Caption =
Caption =
Caption = &Ok
Style = 1 Graphical
Picture = Misc\Checkmrk.ICO
Caption = &Cancelar
Style = 1 Graphical
Picture = Computer\W95mbx01.ICO
Caption = &Retornar
Style = 1 Graphical
Picture = Traffic\Trffc14.ICO

5. A programao do campo txtCodLivro nesse formulrio um pouco mais complicada que no anterior,
pois aqui devemos exibir tambm os dados do usurio, j que obviamente seu cdigo no ser digitado.
Veja como ficou:
Private Sub txtCodLivro_LostFocus()
Dim cnnComando As New ADODB.Command
Dim rsLivro As New ADODB.Recordset
Dim vCod As Long
On Error GoTo errSelecao
vCod = Val(txtCodLivro.Text)
If vCod = 0 Then Exit Sub
Screen.MousePointer = vbHourglass
'Seleciona o livro solicitado:
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "SELECT Livros.*, Usuarios.NomeUsuario " & _
"FROM Livros LEFT JOIN Usuarios " & _
"ON Livros.CodUsuario = Usuarios.CodUsuario " & _
"WHERE Livros.CodLivro = " & vCod & ";"
Set rsLivro = .Execute
End With
With rsLivro
If .EOF And .BOF Then
'Se no encontrou o livro, deixa os labels em branco:
lblTitulo.Caption = Empty
lblCodUsuario.Caption = Empty
lblNomeUsuario.Caption = Empty
Else
'Se encontrou, exibe os dados do livro e do usurio:
lblTitulo.Caption = !Titulo

Microsoft Visual Basic 6

100

lblCodUsuario.Caption = Empty & !CodUsuario


lblNomeUsuario.Caption = Empty & !NomeUsuario
'Verifica se o livro est emprestado:
If Not !Emprestado Then
'Se no est, impede a devoluo:
MsgBox "Esse livro no est emprestado, verifique.", _
vbExclamation + vbOKOnly + vbSystemModal, "Erro"
'Volta o foco ao cdigo para redigitao:
txtCodLivro.SetFocus
End If
End If
End With
Saida:
Set rsLivro = Nothing
Set cnnComando = Nothing
Screen.MousePointer = vbDefault
Exit Sub
errSelecao:
With Err
If .Number <> 0 Then
MsgBox "Erro na recuperao do registro solicitado." & vbCrLf & _
vbExclamation + vbOKOnly + vbApplicationModal, "Aviso"
.Number = 0
GoTo Saida
End If
End With
End Sub

6. O boto Ok, nesse formulrio, apaga os dados gravados nos campos de emprstimo do cadastro de
livros:
Private Sub cmdOk_Click()
Dim cnnComando As New ADODB.Command
Dim vCod As Long
On Error GoTo errGravacao
vCod = Val(txtCodLivro.Text)
'Verifica o cdigo digitado:
If vCod = 0 Then
MsgBox "O campo Cdigo do Livro no foi preenchido.", _
vbExclamation + vbOKOnly + vbSystemModal, "Erro"
Exit Sub
End If
If lblTitulo.Caption = Empty Then
MsgBox "O campo Cdigo do Livro no contm um dado vlido.", _
vbExclamation + vbOKOnly + vbSystemModal, "Erro"
Exit Sub
End If
Screen.MousePointer = vbHourglass
With cnnComando
.ActiveConnection = cnnBiblio
.CommandType = adCmdText
.CommandText = "UPDATE Livros SET Emprestado = False, " & _
"CodUsuario = Null, " & _
"DataEmprestimo = Null, " & _
"DataDevolucao = Null " & _
"WHERE CodLivro = " & vCod & ";"
.Execute
End With
MsgBox "A devoluo do livro " & lblTitulo & " foi efetuada com sucesso.", _
vbApplicationModal + vbInformation + vbOKOnly, "Devoluo OK"
cmdCancelar_Click
Saida:
Screen.MousePointer = vbDefault
Set cnnComando = Nothing
Exit Sub

Microsoft Visual Basic 6

101

errGravacao:
With Err
If .Number <> 0 Then
MsgBox "Erro durante a gravao dos dados no registro." & vbCrLf & _
"A devoluo desse livro no foi completada.", _
vbExclamation + vbOKOnly + vbApplicationModal, _
"Devoluo cancelada"
.Number = 0
GoTo Saida
End If
End With
End Sub

7. S faltou a procedure cmdCancelar_Click:


Private Sub cmdCancelar_Click()
txtCodLivro.Text = Empty
lblTitulo.Caption = Empty
lblCodUsuario.Caption = Empty
lblNomeUsuario.Caption = Empty
txtCodLivro.SetFocus
End Sub

8. Grave o formulrio;
9. Abra o frmBiblio e escreva a programao necessria para o menu mnuDevolucoes e para o boto n 4
da ToolBar. Ambos devem abrir o formulrio frmDevolucoes;
10. Teste o aplicativo e veja se est tudo funcionando como esperado.

Microsoft Visual Basic 6

102

Lio 12: Controles de Dados


Nessa lio construiremos os formulrios de consultas do sistema Bibliotecrio. Para isso, aprenderemos a
usar os controles de dados (ou ADO Data Controls), o Microsoft DataGrid e os Microsoft DataList Controls.
Eles facilitam muito nossa vida quando precisamos fazer consultas base de dados do sistema.

O Controle ADODC
O controle ADODC (ou ADO Data Control) permite a manipulao de bases de dados via ADO de
maneira muito fcil e rpida, pois ele permite vincular controles como caixas de texto e labels
diretamente aos campos do banco de dados. A grande vantagem de seu uso a possibilidade de fazer a
manuteno dos registros da base com bem pouca programao. A maior desvantagem a pouca
flexibilidade que oferece para tratamento dos dados. ADODC um controle customizado: para utiliz-lo
adicione ao projeto o componente Microsoft ADO Data Control.
A maneira mais simples de configurar o ADODC pela janela de propriedades, acionada com o boto direito
do mouse:

Um pequena descrio das abas:


General e Authentication: contm parmetros de configurao da conexo com o banco de dados;
RecordSource: contm o tipo e a origem dos dados que sero vinculados ao ADODC;
Color e Font: servem para customizar a aparncia do controle.
As principais propriedades do ADODC so:

Propriedade ConnectionString (aba General)


Nessa propriedade criamos a string de conexo do ADODC com o banco de dados. Normalmente, a mesma
string usada na conexo principal. O boto Build, visvel na figura acima, aciona um assistente que constri a
string a partir de algumas indicaes, como por exemplo o nome do arquivo MDB.

Propriedades UserName e Password (aba Authentication)


Essas propriedades, como voc j deve ter percebido, contm respectivamente o nome do usurio e a senha
para conexo ao banco de dados. Podem ser informadas tambm pelo assistente Build da aba General.

Propriedade CommandType (aba RecordSource)


Informa o tipo do comando ADO que ser criado pelo controle. Os tipos so os mesmos admitidos pelo
objeto ADO Command.

Microsoft Visual Basic 6

103

Propriedade RecordSource (aba RecordSource)


Informa o texto do comando a ser executado pelo controle ADODC. Dependendo do tipo informado em
CommandType, pode ser o nome de uma tabela ou de uma consulta, ou ento um comando SQL.

Propriedades DataSource e DataField


Essas no so propriedades do controle ADODC, e sim dos controles que podem ser vinculados a ele.
DataSource informa o nome do controle de dados ao qual ser ligado, e DataField qual campo ser
acessado.

Mtodo Refresh
Existem casos em que necessrio alterar o RecordSource do controle de dados em tempo de execuo, via
programao. Acontece que a atualizao do recordset do ADODC no automtica numa situao dessas.
Para que o recordset seja atualizado e os dados sejam exibidos corretamente de acordo com o novo
RecordSource, aplicamos ao ADODC o mtodo Refresh.
Vamos criar um pequeno aplicativo para exemplificar o uso do controle ADODC:
1. Inicie um novo projeto;
2. Crie o formulrio conforme o modelo e a tabela de propriedades:

Objeto
Formulrio

Nome
frmTesteData

Boto de comando cmdFechar


ADODC
Adodc1
Label
lblCodigo
Label

lblNome

Outras Propriedades = Valor


Caption = Tabela de Editoras
BorderStyle = 1 Fixed Single
StartupPosition = 2 Center Screen
Caption = &Fechar
Caption = Editoras
Caption =
BorderStyle = 1 Fixed Single
BackColor = Windows BackGround
Caption =
BorderStyle = 1 Fixed Single
BackColor = Windows BackGround

3. Vamos usar a janela de propriedades para configurar a conexo do ADODC. Clique sobre ele com o
boto direito do mouse e escolha a opo ADODC Properties;
4. Clique no boto Build (ao lado do campo Connection String). O VB abre a janela do assistente de
conexo (veja a figura na prxima pgina);
5. Na aba Provedor, escolha a verso mais recente do Jet que estiver disponvel (na figura a verso a 4.0)
e clique no boto Avanar;
6. Na aba Conexo, informe no item 1 o nome do banco de dados Biblio.MDB, no nosso caso. No se
esquea de informar o caminho completo (use o boto com as reticncias, mais simples);
7. Ainda na aba Conexo, o item 2 pede o nome do usurio (o assistente sugere Admin) e a senha. Como
nosso banco no tem senha, deixe como est;

Microsoft Visual Basic 6

104

8. Clique no boto Testar Conexo. Se voc receber a mensagem Teste de conexo concludo com
xito, a conexo est pronta;
9. Clique em Ok: o assistente informa a string de conexo para a propriedade ConnectionString, j com
todos os parmetros necessrios;
10. Como nosso banco de dados no tem senha, no precisamos alterar nada em Authentication. Clique na
aba RecordSource;
11. Em CommandType, selecione a opo 2 adCmdTable: a linha Table or Stored Procedure Name
habilitada;
12. Em Table or Stored Procedure Name, selecione a tabela de Editoras (veja o exemplo):

13. Clique em OK a configurao do ADODC est pronta;


14. Selecione o label lblCodigo. Na janela de propriedades, escolha em DataSource o Adodc1 e em
DataField o campo CodEditora;
15. Faa o mesmo para o label lblNome, obviamente selecionando o campo NomeEditora;
16. Grave o formulrio com o nome de frmData e o projeto como TesteData.

Microsoft Visual Basic 6

105

Sabe qual a programao que precisaremos fazer para esse aplicativo? Nenhuma! A no ser a do boto
Fechar, obvio. Execute o aplicativo e veja como ele funciona: basta clicar nos botes do contole de dados e
os labels so atualizados de modo a exibir os campos do registro em que o apontador estiver posicionado:

Voc deve estar achando o ADO Data Control uma maravilha. Realmente, ele facilita muito as coisas, mas
no se entusiasme demais: como j disse, ele no muito flexvel quando o assunto a manuteno de uma
base de dados em um aplicativo realmente srio, razo pela qual no utilizado pelos programadores
profissionalmente. Pelo menos no para isso: logo veremos uma aplicao realmente prtica.

O Controle DataGrid
Esse controle ADO, que trabalha vinculado a um ADODC, lembra uma planilha em que linhas e
colunas definem clulas. Cada linha vinculada a um registro e cada coluna corresponde a um campo
do recordset do ADODC. Tambm um controle customizado, e portanto para poder utiliz-lo voc deve
adicionar o componente Microsoft DataGrid Control. Assim como o ADODC, mais fcil configur-lo pela
janela de propriedades, mas nesse caso as opes da janela variam de acordo com o conjunto de dados que
ser apresentado. Um recurso muito interessante do DataGrid a opo Retrieve Fields do menu de
contexto (aquele menu acionado pelo boto direito do mouse). Aps a vinculao do DataGrid ao ADODC,
Retrieve Fields configura automaticamente as colunas do grid de acordo com os campos do recordset.
Vamos ento elaborar uma consulta com o DataGrid. Antes, porm, criaremos uma consulta no Access, que
ser acessada pelo formulrio de consulta ao cadastro de usurios:
1. Entre no Access e abra o banco de dados Biblio;
2. Inicie a criao de uma nova consulta em modo estrutura;
3. Adicione a tabela Usuarios;
4. Mova todos os campos da tabela para o grid da consulta;
5. Altere a classificao do campo NomeUsuario para Crescente;
6. Mude os nomes das colunas indicadas (deixe as outras como esto):
Cdigo, para o campo CodUsuario;
Nome, para o campo NomeUsuario;
Endereo, para o campo Endereco;
UF, para o campo Estado.
7. Compare sua consulta com o exemplo da prxima pgina;
8. Grave a consulta com o nome de ConsultaUsuarios;
9. Execute a consulta e verifique se est funcionando corretamente (veja o exemplo);
10. Aproveite para criar consultas semelhantes para as tabelas Categorias e Editoras;
11. Saia do Access, abra novamente o VB e o projeto Bibliotecario;

Microsoft Visual Basic 6

106

ConsultaUsuarios em modo estrutura

ConsultaUsuarios sendo executada no Access

12. Adicione um novo formulrio e formate-o conforme o modelo:

Microsoft Visual Basic 6

107

13. Altere as propriedades dos objetos:


Objeto
Formulrio

Nome
frmConUsuarios

ADODC

datUsuarios

DataGrid
grdUsuarios
Boto de comando cmdRetornar

Outras Propriedades = Valor


Caption = Consulta Cadastro de Usurios
BorderStyle = 1 Fixed Single
Icon = Misc\Misc28.ICO
MDIChild = True
Caption = datUsuarios
Visible = False
ConnectionString = crie com o assistente
CommandType = 2 adCmdTable
Table or Stored Procedure Name = ConsultaUsuarios
DataSource = datUsuarios
Caption = &Retornar
Style = 1 Graphical
Picture = Traffic\Trffc14.ICO

14. Clique com o boto direito do mouse sobre o DataGrid. No menu de contexto, escolha Retrieve Fields.
O VB pede uma confirmao antes de fazer a configurao do grid: responda Ok, e seu DataGrid deve
estar parecido com o da figura:

15. Clique novamente com o boto direito sobre grdUsuarios e escolha a opo Properties (veja a figura na
prxima pgina);
16. A aba General contm opes de funcionamento e aparncia do DataGrid. Desmarque a opo
AllowUpdate, que permite a alterao de dados diretamente no grid, o que no recomendvel em uma
consulta. As opes AllowAddNew e AllowDelete tambm devem estar desmarcadas, e servem,
respectivamente, para permitir a incluso e a excluso de registros;
17. A aba Keyboard contm opes de navegao pelo teclado. No ser necessria nenhuma alterao;
18. A aba Columns permite a definio dos ttulos das colunas do grid, e a qual campo do conjunto de dados
a coluna deve ser vinculada. Retrieve Fields j faz a configurao dessas opes automaticamente, e
portanto somente se quiser alterar o ttulo de alguma coluna voc precisar mudar algo;

19. A aba Layout permite configurar opes de exibio para cada coluna. Na combo Column, escolha a
coluna 0 Cdigo;

Microsoft Visual Basic 6

108

20. Uma opo interessante Alignment, que define o alinhamento do texto dentro da clula. As opes
disponveis so:
0 dbgLeft: texto alinhado esquerda;
1 dbgRight: texto alinhado direita;
2 dbgCenter: texto centralizado no espao da clula;
3 dbgGeneral: usa o alinhamento definido como padro nas opes do VB;
Por default, todas as colunas so alinhadas esquerda. Altere o alinhamento dessa coluna para 2
dbgCenter;
21. Faa o mesmo para as colunas 4 UF, 5 CEP e 6 Telefone;
22. Outra opo muito usada Width, que determina a largura da coluna. Retrieve Fields altera a largura de
acordo com o valor retornado pela origem dos dados, mas com freqncia precisamos ajust-la
manualmente. Para isso, basta digitar em Width o novo valor desejado (em twips). Defina a largura das
colunas como indicado:
0 Cdigo: 600
1 Nome: 3500
2 Endereo: 6000
3 Cidade: 2500
4 UF: 350
5 CEP: 900
6 Telefone: 1500
23. No vamos alterar nada nas abas Color e Font;
24. A aba Split define como ser apresentado o foco nas linhas e colunas do grid. Uma opo interessante
MarqueeStyle, que altera a exibio do foco nas linhas. Altere para 4 dbgHighlightRowRaiseCell,
para que toda a linha seja destacada;
25. Finalmente, a aba Format define a formatao dos dados das colunas. Retrieve Fields tambm altera
essas definies conforme os dados de origem, mas comum a necessidade de ajustes. Para alterar a
formatao, devemos escolher a coluna na combo correspondente e depois indicar o formato desejado
para essa coluna. Em nosso caso no ser necessrio nenhuma alterao.
26. Clique em Ok a configurao do DataGrid est pronta;
27. Abra a janela Cdigo no evento Form_Load. Alm dos comandos de centralizao do form, vamos
alterar a propriedade ConnectionString do ADODC em tempo de execuo. Isso necessrio devido a
uma limitao do controle de dados: quando definimos a ConnectionString pelo assistente, indicamos o
caminho e o nome do banco de dados a ser conectado, e essa informao gravada na configurao do
ADODC. Se o nome do arquivo MDB for alterado, ou trocarmos a pasta onde est gravado, o controle
no ser capaz de encontr-lo, e ser gerado um erro de execuo. Isso especialmente preocupante em
um ambiente de rede, onde o caminho de um arquivo depende do mapeamento feito nas estaes. Para
evitar esse problema, indicamos ao ADODC que use para conectar-se ao banco a mesma string da
conexo pricipal:
Private Sub Form_Load()
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2
datUsuarios.ConnectionString = cnnBiblio.ConnectionString
End Sub

28. Escreva a codificao necessria ao evento cmdRetornar_Click;


29. Grave o novo formulrio com o nome frmConUsuarios;
30. Abra o formulrio frmBiblio e programe a procedure de menu mnuConUsuarios_Click;
31. Teste a consulta. Voc deve ter um resultado parecido com esse:

Microsoft Visual Basic 6

109

Bem, com o cadastro de usurios foi fcil. E para o cadastro de livros, em que existem cdigos relacionados
s outras tabelas do banco, qual o procedimento? Vejamos:
1. Entre novamente no Access e abra o banco de dados Biblio;
2. Inicie a criao de uma nova consulta em modo estrutura;
3. Adicione todas as tabelas do banco;
4. Relacione as tabelas:
Categorias e Livros pelo campo CodCategoria;
Editoras e Livros pelo campo CodEditora;
Usuarios e Livros pelo campo CodUsuario;
5. Clique com o boto direito do mouse sobre o relacionamento entre as tabelas Usuarios e Livros;
6. No menu de contexto, selecione a opo Propriedades da Associao;
7. Escolha a opo 2:

Microsoft Visual Basic 6

110

8. Adicione os campos CodLivro, Titulo, Autor, NomeEditora, NomeCategoria, NomeUsuario,


DataEmprestimo e DataDevolucao ao grid;
9. Altere a classificao do campo Ttulo para Crescente;
10. Altere os ttulo das colunas:
Cdigo, para o campo CodLivro;
Ttulo, para o campo Titulo;
Editora, para o campo NomeEditora;
Categoria, para o campo NomeCategoria;
Usurio, para o campo NomeUsuario;
Emprstimo, para o campo DataEmprestimo;
Devoluo, para o campo DataDevolucao.
11. Grave a consulta com o nome de ConsultaTodosLivros;
12. Sua consulta deve ter ficado parecida com a da figura:

13. Execute a consulta e verifique se est funcionando corretamente;


14. Saia do Access e abra novamente o VB e o projeto Bibliotecario;
15. Adicione um novo formulrio ao projeto;
16. Baseado na consulta de usurios, inclua os objetos no formulrio e configure o ADODC e o DataGrid
para executar a consulta ConsultaTodosLivros;
17. Escreva a procedure Form_Load conforme a do formulrio frmConUsuarios. No se esquea do boto de
sada do form;
18. Grave seu trabalho. Ao novo formulrio d o nome de frmConLivros;
19. No formulrio principal programe a opo de menu mnuConTodosLivros para acionar o frmConLivros;
20. Execute o aplicativo e teste a consulta. Compare com o exemplo da prxima pgina.
Em nosso projeto temos duas opes no menu Consultas para as quais podemos paorveitar esse mesmo
formulrio: Livros Emprestados e Livros em Atraso. Para fazer isso, primeiramente vamos criar mais duas
consultas no Access:
1. Abra o banco de dados Biblio;
2. Na aba Consultas, clique com o boto direito do mouse sobre a consulta ConsultaTodosLivros;
3. Cole com o nome de ConsultaLivrosEmprestados;
4. Abra a consulta ConsultaLivrosEmprestados em modo estrutura;
5. Adicione o campo Emprestado ao grid da consulta;
6. Desmarque a opo Mostrar;
7. Na linha Critrio do campo Emprestado, escreva Verdadeiro. Isso far com que
apenas os livros emprestados sejam selecionados pela consulta. Veja na figura ao
lado se fez tudo corretamente;
8. Grave a consulta e retorne aba Consultas;

Microsoft Visual Basic 6

111

A consulta de Livros Cadastrados sendo executada

9. Selecione a ConsultaLivrosEmprestados, copie e cole com o nome de ConsultaLivrosEmAtraso;


10. Na linha Critrio do campo DataDevolucao, escreva <=Agora(), para que sejam selecionados apenas
os registros com data de devoluo at hoje:

11. Verifique na figura se est tudo certo e grave a consulta:


12. Feche o Access e retorne ao projeto Biblioteario;
13. Para identificar qual consulta devemos abrir no formulrio frmConLivros, criaremos uma varivel
pblica no mdulo de programao Biblio. Acrescente o seguinte comando na seo Declarations do
mdulo:
Public vConLivros As String

14. Altere a procedure mnuConTodosLivros_Click:


Private Sub mnuConTodosLivros_Click()
'Atribui varivel vConLivros o nome da consulta correspondente opo
'de menu escolhida:
vConLivros = "ConsultaTodosLivros"
frmConLivros.Show
End Sub

15. Crie as procedures mnuConLivrosEmprestados e mnuConLivrosEmAtraso conforme segue:


Private Sub mnuConLivrosEmAtraso_Click()
vConLivros = "ConsultaLivrosEmAtraso"
'Altera o ttulo do formulrio de consulta de livros:
frmConLivros.Caption = "Consulta Livros Emprestados em Atraso"
frmConLivros.Show
End Sub

Microsoft Visual Basic 6

112

Private Sub mnuConLivrosEmprestados_Click()


vConLivros = "ConsultaLivrosEmprestados"
frmConLivros.Caption = "Consulta Livros Emprestados"
frmConLivros.Show
End Sub

16. Altere as seguintes linhas do evento Form_Load do formulrio frmConLivros para que fique assim:
Private Sub Form_Load()
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2
datLivros.ConnectionString = cnnBiblio.ConnectionString
'Altera o RecordSource do ADODC para usar como origem o contudo da
'varivel vConLivros:
datLivros.RecordSource = vConLivros
'Atualiza o recordset de datLivros de acordo com o novo RecordSource:
datLivros.Refresh
End Sub

17. Execute uma dessas consultas que acabamos de criar e veja se est funcionando corretamente. O
exemplo a seguir a consulta de livros em atraso:

18. Grave seu trabalho.

Os Controles DataList e DataCombo


Esses controles ADO so muito interessantes: DataList uma caixa de listagem vinculada a um
controle de dados. Seus itens sero preenchidos com os dados de um dos campos do recordset do
controle de dados. DataCombo uma caixa de combinao que usa o mesmo princpio. Ambos so controles
customizados, e para adicion-los caixa de ferramentas marque a opo Microsoft DataList Controls na
janela Components.
DataList e DataCombo tm as mesmas propriedades das caixas de listagem e combinao comuns e mais
algumas especficas para trabalhar com o controle de dados:

Propriedades RowSource e ListField


Essas propriedades indicam, respectivamente, o nome do ADODC que deve ser vinculado DataList ou
DataCombo e o nome do campo que ser usado como origem para os itens da caixa.

Microsoft Visual Basic 6

113

Propriedades DataSource e DataField


No caso especfico de DataList e DataCombo, essas propriedades servem para atualizar o registro do
recordset de um outro controle de dados, (que no o mesmo vinculado s propriedades RowSource e
ListField), de modo a sincronizar ambos os controles Data: assim, conforme um item selecionado na caixa,
os dois controles Data estaro apontando para o registro correspondente em seus respectivos recordsets.

Propriedade BoundColumn
Define qual campo do recordset o controle retornar quando um item for selecionado. Por exemplo: se um
recordset tem dois campos, digamos Cdigo e Nome, com certeza voc vai preferir que seja exibido na caixa
o campo Nome, mas pode ser que v utilizar nas operaes de banco de dados o campo Cdigo. Voc pode
ento indicar para a propriedade ListField o campo Nome, e para BoundColumn o campo Cdigo. Dessa
maneira, quando o usurio escolher um item na caixa, o campo retornado por BoundColumn para aquele
registro ser Cdigo, apesar do item estar exibindo o nome.

Propriedade BoundText
Contm o texto do item que est selecionado na caixa.
Mas vamos pr esse conceitos em prtica, elaborando as ltimas consultas ao cadastro de livros. Vamos
comear pela consulta de Livros por Autor. Veja o modelo do novo formulrio:

As propriedades dos objetos so as seguintes:


Objeto
Formulrio

Nome
frmConLivrosPorAutor

ADODC

datLivros

Outras Propriedades = Valor


Caption = Consulta Livros por Autor
BorderStyle = 1 Fixed Single
Icon = Writing\Books02.ICO
MDIChild = True
Caption = datLivros
Visible = False
ConnectionString = crie com o assistente
CommandType = 1 adCmdText
CommandText =
SELECT * FROM ConsultaTodosLivros;

Microsoft Visual Basic 6

Objeto
ADODC

Nome
datAutores

DataCombo

cboAutores

DataGrid
grdLivros
Boto de comando cmdRetornar

114

Outras Propriedades = Valor


Caption = datAutores
Visible = False
ConnectionString = crie com o assistente
CommandType = 1 adCmdText
CommandText =
SELECT DISTINCT Autor FROM Livros ORDER BY
Autor;
RowSource = datAutores
ListField = Autor
BoundColumn = Autor
Style = 2 dbcDropdownList
DataSource = datLivros
Caption = &Retornar
Style = 1 Graphical
Picture = Traffic\Trffc14.ICO

Duas observaes importantes:


Na propriedade CommandType do datLivros definimos 1 adCmdText para poder usar um comando
SQL que ser criado em tempo de execuo, de modo a selecionar apenas os livros do autor escolhido;
Na propriedade CommandText do datAutores usamos a clusula DISTINCT no comando SELECT, para
eliminar linhas repetidas no resultado do comando SQL. DISTINCT faz com que, quando forem
selecionados pelo comando SELECT dois ou mais registros exatamente iguais, apenas um ser
retornado, eliminando repetio. Fizemos isso para que no existam autores duplicados na combo.
O funcionamento dessa consulta ser assim: na DataCombo sero exibidas os nomes dos autores, e conforme
o operador for alternando entre eles, os livros do autor selecionado sero exibidos no grid. Ser necessrio,
portanto, filtrar os registros da tabela de livros de acordo com o autor escolhido na combo. Vamos comear:
1. Use Retrieve Fields para formatar o grid. Lembre-se de alterar o tamanho das colunas e o alinhamento
dos campos da mesma maneira que fizemos nas consultas anteriores;
2. Escreva a procedure para o evento Click do boto Retornar;
3. No evento Load do formulrio, escreva os comandos para atribuir a ConnectionString aos controles de
dados:
Private Sub Form_Load()
Me.Left = (frmBiblio.ScaleWidth - Me.Width) / 2
Me.Top = (frmBiblio.ScaleHeight - Me.Height) / 2
datAutores.ConnectionString = cnnBiblio.ConnectionString
datLivros.ConnectionString = cnnBiblio.ConnectionString
End Sub

4. O prximo passo fazer com que o grid seja atualizado com os livros do autor selecionado. Para isso
usaremos o eventos Click da combo:
Private Sub cboAutores_Click(Area As Integer)
datLivros.RecordSource = "SELECT * FROM ConsultaTodosLivros " & _
"WHERE Autor = '" & cboAutores.BoundText & "';"
datLivros.Refresh
End Sub

5. Grave esse formulrio com o nome de frmConLivrosPorAutor;


6. Abra o formulrio frmBiblio e escreva a procedure para o evento Click do menu mnuLivrosPorAutor;
7. Teste a consulta. Veja que, conforme voc escolhe um autor, o grid automaticamente atualizado com
seus respectivos livros. Caso no exista nenhum livro cadastrado para o autor, o grid no apresentar
nenhum registro. Compare com a figura a seguir:

Microsoft Visual Basic 6

115

8. Seguindo o mesmo procedimento, crie as consultas de livros por Editora e por Categoria. Grave-os
respectivamente com os nomes de frmConLivrosPorEditora e frmConLivrosPorCategoria;
9. Teste as consultas que voc criou e veja se esto funcionando corretamente;
10. Grave seu trabalho.

Microsoft Visual Basic 6

116

Lio 13: Relatrios


Quem j criou relatrios no Access sabe como uma ferramenta grfica facilita esse tipo de trabalho. E vai se
sentir em casa no VB: a partir da verso 6 do Visual Basic, a Microsoft introduziu duas novas ferramentas
que juntas permitem a criao de relatrios de maneira visual, muito semelhante ao construtor de relatrios
do Access. Nessa ltima lio, aprenderemos como usar essas ferramentas construindo um dos relatrios do
nosso sistema de controle de bibliotecas.

Usando o Data Environment


A primeira ferramenta que vamos estudar o Data Environment Designer, cuja funo estabelecer
conexes e comandos de acesso ADO a bancos de dados (Data Environment quer dizer ambiente de
dados) e que podem ser usados posteriormente por formulrios e relatrios do projeto. Vejamos passo a
passo como criar e configurar o Data Environment:
1. Se ainda no o fez, abra o VB e o projeto Bibliotecrio;
2. No menu Project, escolha a opo More ActiveX Designers;
3. Escolha agora a opo Data Environment. O VB adiciona um Data Environment ao projeto, de nome
DataEnvironment1. Voc pode criar quantos forem necessrios, cada um ligado a uma fonte de dados:

4. Vamos alterar o nome do Data Environment: na janela de propriedades, altere a propriedade Name para
DataBiblio;
5. Vinculado ao Data Environment existe sempre ao menos um objeto Connection veja na figura: o que
acabamos de adicionar chama-se Connection1. Vamos renome-lo: clique com o boto direito do mouse
sobre Connection1 e escolha a opo Rename;
6. Altere o nome para cnnLivrosCadastrados;
7. O prximo passo criar a conexo com o banco de dados: clique novamente com o boto direito do
mouse e escolha a opo Properties;
8. Crie a conexo da mesma forma que fizemos nas lies anteriores;
9. Clique mais uma vez com o boto direito do mouse e escolha a opo Refresh: se voc fez tudo certo, a
linha de status est indicando que o objeto Connection est conectado ao banco:

10. Devemos agora adicionar um objeto Command. Clique com o boto direito e escolha Add Command;

Microsoft Visual Basic 6

117

11. Altere o nome do comando para cmdLivrosCadastrados:

12. Clique com o boto direito sobre o comando e escolha a opo Properties:

13. Na aba General definimos a origem dos dados: em Database Object informamos qual o tipo do objeto
que ser acessado pelo comando: Table (tabela), View (consulta) ou Stored Procedure, e tambm seu
nome. A opo SQL Statement serve para usar um comando SQL;
14. Escolha Database Object, e o tipo View;
15. Em Object Name, escolha ConsultaTodosLivros;
16. Como no precisamos alterar nada nas outras abas, clique em Ok;
17. Clique no sinal + que aparece ao lado do nome do comando para visualizar as colunas da consulta:

Microsoft Visual Basic 6

118

18. Grave seu trabalho. Ao Data Environment d o nome de DataBiblio. Note que a extenso do arquivo
DSR (de Designers).
Bem, a primeira parte do servio est pronta. Vejamos agora como criar o relatrio propriamente dito:

Usando o Data Report


A ferramenta para design de relatrios do VB o Data Report. Sua operao muito simples, baseada no
recurso arrastar-e-soltar do Windows. Vejamos como us-lo:
1. No menu Project escolha a opo Add Data Report;
2. O objeto DataReport1 adicionado ao projeto, e a caixa de ferramentas passa a exibir os controles
suportados pelo relatrio:

3. Note que o formulrio est dividido em 5 partes (ou sees), chamadas de Report Sections:
Report Header: cabealho a ser impresso no incio do relatrio;
Page Header: cabealho a ser impresso no incio de cada pgina;
Detail: corpo do relatrio, ou linha de detalhe: rea onde sero inseridos os dados do relatrio;
Page Footer: rodap a ser impresso no final de cada pgina;
Report Footer: rodap a ser impresso no final do relatrio.
4. Cada seo tem propriedades e mtodos que permitem formatar o relatrio conforme necessrio, alm do
prprio objeto DataReport basta clicar na rea que queremos formatar para ver suas propriedades na
janela Properties. Clique no ttulo da janela do DataReport para ver suas propriedades;
5. Altere a propriedade Name para rptLivrosCadastrados;
6. A propriedade DataSource indica o Data Environment que deve ser usado como origem dos dados.
Escolha o DataBiblio (deve ser nico disponvel);
7. Em DataMember informamos
cmdLivrosCadastrados;

comando

ser

executado

pelo

relatrio:

escolha

8. Agora clique com o boto direito do mouse sobre o DataReport e escolha a opo Retrieve Structure:
note que o nome da seo Detail mudou para cmdLivrosCadastrados_Detail;
9. Feche as sees Report Header e Report Footer, pois no vamos us-las. Para fazer isso arraste a barra
que contm o nome da seo para cima (diminuindo a rgua) at fech-la.
10. J podemos incluir campos em nosso relatrio. Abra as janelas do Data Environment e do Data Report
lado a lado, de forma a poder visualizar ambas ao mesmo tempo (mais ou menos como na figura a
seguir):

Microsoft Visual Basic 6

119

11. Arraste o campo Cdigo da janela do Data Environment para dentro da seo Detail: note que, alm do
campo, o ttulo da coluna tambm adicionado ao relatrio:

12. Aumente a altura da seo Page Header para uns 3 centrmetros (para isso arraste a barra para baixo);
13. Arraste o label que contm o ttulo do campo (na figura o da esquerda) para a seo Page Header:
14. Repita o processo para os campos Ttulo, Autor, Editora e Categoria;
15. Acerte a largura dos campos. Para isso clique sobre o campo e altere a
propriedade Width ou ento arraste a borda do campo at a largura
desejada;
16. Altere a largura do ttulo de cada coluna para a mesma do campo
correspondente;
17. Reposicione os campos e os ttulos. Se necessrio aumente a largura do
relatrio: para isso arraste a borda direita do relatrio at a largura desejada,
mas ateno rgua para no ultrapassar as medidas do papel (usaremos o
tamanho Carta em modo Paisagem):
Tamanho Carta: 21,5 x 28 cm;
Tamanho A4: 21 x 29,7 cm;
Tamanho Ofcio: 21,5 x 35,5 cm.
Obs.: voc pode melhorar o posicionamento dos campos clicando com o boto direito sobre o relatrio e
desmarcando a opo Snap to Grid;
18. Clique sobre o campo Codigo e altere a propriedade Aligment para 2 rptJustifyCenter, para
centralizar o dado no campo;
19. Centralize tambm os ttulos dos campos da mesma maneira;

Microsoft Visual Basic 6

120

20. Altere a fonte (propriedade Font) dos ttulos das colunas para Arial, itlico, tamanho 10;
21. Altere a fonte dos campos para Arial tamanho 10;
22. Seu relatrio deve estar parecido com o do exemplo:

23. Procure na caixa de ferramentas o cone rptLabel e insira um na seo Page Header ele vai conter
o ttulo do nosso relatrio;
24. Altere a propriedade caption do label para Relao de Livros Cadastrados;
25. Faa-o ocupar toda a largura do relatrio;
26. Altere a fonte do label para Times New Roman, negrito, tamanho 16;
27. Confira seu relatrio com o exemplo abaixo:

28. Procure agora o cone do controle rptLine;


29. Desenhe uma linha na seo Page Header, abaixo dos ttulos das colunas;
30. Desenhe outra linha, de mesmo comprimento, na seo Page Footer (aumente um pouco essa seo, se
achar necessrio);
31. Se desejar, voc pode mudar o estilo da linha alterando a propriedade BorderStyle. Veja como ficou:
32. Existem alguns controles especiais, que so inseridos atravs do boto direito do mouse, como por
exemplo a data do sistema. Vamos inser-la: clique com o boto direito e escolha Insert Control;

Microsoft Visual Basic 6

121

33. Escolha agora a opo Current Date (Short Format), que insere a data no formato curto do Windows;
34. Posicione o campo da data esquerda, acima do ttulo do campo cdigo e alinhada com ele;
35. Outro controle interessante o nmero da pgina. Acione novamente o menu Insert Control e escolha
agora a opo Current Page Number;
36. Alinhe o nmero do pgina direita do relatrio, na mesma altura da data;
37. Diminua seu tamanho para um espao de aproximadamente 3 caracteres;
38. Altere o alinhamento para centralizado;
39. Insira mais um label do lado esquerdo do nmero da pgina;
40. Altere a propriedade caption desse label para Pgina: (sem as aspas);
41. Altere o alinhamento do label para 1 rptJustifyRight;
42. Diminua a altura da seo Detail para a mesma dos campos nela contidos;
43. Se quiser incluir mais labels e formataes, esteja a vontade...
44. O layout do relatrio est pronto. Veja como ficou o meu:

45. Grave o relatrio com o nome de rptLivrosCadastrados note que a extenso do arquivo a mesma do
Data Environment, ou seja, DSR;
46. Precisamos agora fazer nosso relatrio funcionar. Abra o formulrio frmBiblio;
47. Escreva a programao da opo de menu Relatrios Livros para informar o orientao do papel e
acionar o relatrio:
Private Sub mnuRelLivros_Click()
With rptLivrosCadastrados
'A propriedade Orientation informa a orientao do papel para impresso
'do relatrio, e o valor rptOrientLandscape define modo Paisagem:
.Orientation = rptOrientLandscape

Microsoft Visual Basic 6

122

'Para exibir o resultado do Data Report usamos o mtodo Show:


.Show
End With
End Sub

Obs.: para impresso em modo Retrato normalmente no necessrio alterar a propriedade Orientation,
mas se precisar use a constante rptOrientPortrait.
48. Para evitar problemas de conexo, precisamos alterar a ConnectionString do DataEnvironment. Abra o
formulrio frmSplash;
49. Na procedure Timer1_Timer, localize o comando:
cnnBiblio.Open

50. Escreva abaixo dela a linha a seguir:


DataBiblio.cnnLivrosCadastrados.ConnectionString = cnnBiblio.ConnectionString

51. Grave seu trabalho;


52. Execute o programa e o relatrio de Livros. Se estiver tudo Ok, o resultado ser parecido com esse:

Pronto! Agora s falta voc criar os outros relatrios do sistema (Usurios, Categorias e Editoras) e ele estar
terminado. Com isso chegamos ao final do nosso curso. Espero sinceramente que tenha gostado, e que
aproveite bem tudo que aprendeu. Parabns e boa sorte!!!
Lus Carlos Ballaminut

Você também pode gostar