Você está na página 1de 150

1)O que programao ? ..................................................................................

2
2)Apresentando o Visual Basic......................................................................... 3
3)Usando Forms, objetos e controles.............................................................. 5
4)Propridades...................................................................................................... 6
5)O que so Forms(Formulrios)........................................................................7
5)Mtodos.......................................................................................................... ..7
6)Eventos............................................................................................................. 7
7)Controles........................................................................................................ . 8
Conhecendo melhor o formulrio.................................................................. ..11
Boto de Comando..........................................................................................14
Label...............................................................................................................17
TextBox...........................................................................................................18
Option Button..................................................................................................22
Frame..............................................................................................................22
CheckBox........................................................................................................24
ListBox.............................................................................................................25
ComboBox.................................................................................................... ..30
MaskedBox......................................................................................................32
8)Contruindo um Sistema.................................................................................35
19)Menus............................................................................................................37
10)Menus Dinmicos.........................................................................................39
11)O Cdigo........................................................................................................40
12)Variveis........................................................................................................41
13)Modifcadores de Acesso.............................................................................48
14)Constantes....................................................................................................49
15)Operadores...................................................................................................50
16)Comandos Condicionais e Loops..............................................................52
17)Contadores...................................................................................................58
18)SubProcedimentos......................................................................................60
19)Funes........................................................................................................62
20)Matrizes........................................................................................................63
21)Lgica de programao..............................................................................67
22)As Bibliotecas..............................................................................................68
23)Comandos, Funes e Objetos Nativos....................................................69
24)Funes Internas.........................................................................................74
Funes Numricas........................................................................................74
Funes de String.......................................................................................... 75
Funes de Data e Hora.................................................................................78
Funes de Converso...................................................................................81
Funes para Gerenciamento de Matrizes.....................................................83
Funes Lgicas.............................................................................................84
Funes de Disco.............................................................................................85
Funes de Escolha..........................................................................................88
Formatao de Dados.......................................................................................91
25)Banco de Dados
Criando um Banco de Dados............................................................................99
O que so tabelas?...........................................................................................100
Criando uma Tabela......................................................................................101
Criando ndices..............................................................................................106
Definindo a Chave Primria..........................................................................107
Acessando o Banco de Dados atravs do Visual Basic.................................108
26)Objetos de dados
Data Control...................................................................................................118
Data Grid........................................................................................................120
27)Impresso
Printer.............................................................................................................122
Crystal Reports...............................................................................................129
Noes de Linguagem SQL............................................................................145

O que Programao ?
Se voc nunca teve contato direto com programao na vida, talvez esteja se
perguntando, o que afinal, programao. Embora talvez, voc nunca tenha programado,
tudo que usamos, foi de alguma forma programado. Isso no acontece s no mundo da
informtica, mas acontece tambm no mundo real. Por exemplo:
- Nas indstrias, j faz muito tempo que as mquinas vem sendo programadas para fazer
determinadas tarefas.
- Na sua casa, Voc com certeza j programou o rdio-relgio para despertar de manh, j
deve ter programado o vdeo-cassete e agora o DVD.
- Um automvel, por exemplo, pode ser programado para limitar a velocidade mxima
atravs de um chip e para injetar mais gasolina depois que ele atingir uma velocidade X.
Como voc pode ver, quase tudo a nossa volta foi de uma certea forma programado e
com a informtica assim tambm. OS famosos softwares que todo mundo usa (Windows,
Word, Excel, etc..) s existem por que foram programados.
Como programamos um software?
Atravs de instrues em conjunto, que formaro o cdigo fonte
dele.
Exempo de um cdigo :
Public Sub Main()
Msgbox Hello, World
End
End sub
Claro, que neste exemplo estou usando comandos do Visual Basic, que talvez alguns de
vocs no conheam. No se preocupe em entender esse cdigo agora. Vamos agora usar
comandos fictcios para ilustrar o que fizemos neste exempo:
Ao iniciar()
Mostrarmensagem Hello,World
Fim
FinalDoEvento
No necessrio ser nenhum gnio para entender o que msgbox e end do exemplo
anterior faziam. Pois se olharmos o ltimo exemplo , notamos que no lugar de msgbox
colocamos mostrarmensagem e no lugar do end usamos fim. O Interpretador ir ler a
primeira instruo(msgbox) e ir exibir uma mensagem dizendo:Hello,World e, logo aps
encerrar o programa com o End.
O interpretador sempre segue uma ordem lgica para ler as intrues, ento no podemos
colocar tudo de forma desordenada no cdigo do programa, devemos colocar uma a uma,

na ordem que precisamos que ele leia primeiro. Mais tarde veremos comandos condicionais
e de lao para manipular essa execuo.
Um bom programador tem que ser curioso. Deve gostar de saber como as coisas
funcionam debaixo da cap, no deve se preocupar em travar a mquina com loops
infinitos(se voc no sabe o que loop, veremos mais tarde) ou de qualquer outra forma.
Programao uma arte. Envolve criatividade, anlise , dedicao e muita pacincia.

Apresentando o ambiente do Visual Basic 6


Ao abrirmos o Visual Basic, ele abrir uma janela nos perguntando o tipo de projeto a qual
desejamos criar.

No momento nos limitaremos somente a usar o padro Standard Exe, que o que
usualmente usamos na maioria dos casos. Ele abrir um projeto vazio, com os controles
nativos do Visual Basic esquerda, um formulrio e suas respectivas propriedades a direita.

Vejamos na figura:

Figura 1
Form(Formulrio)
Esta caixa de ferramentas onde temos
os controles disponveis, Para us-los ,
basta clicarmos e arrastarmos eles at o
Form(Formulrio)

Esta caixa de propriedades, onde definimos


as propriedades do objeto selecionado

Usando Forms, Objetos e Controles


Objetos Comearemos pelos Objetos j que os demais(Forms e Controles) Tambm se
enquadram como objetos. Devemos nos acostumar com os objetos, pois estaremos sempre
cercado deles. Qualquer Boto, Form, Relatrio, Controles, entre outros se enquadram
como objetos.
Na figura abaixo temos exemplos de objetos :

Figura 1
Todos os objetos tem propriedades, eventos e mtodos a eles associados. Veremos mais
tarde o que so mtodos, eventos e propriedades dos objetos. No entanto o que necessrio
saber agora o que so objetos. Vemos que objeto tudo aquilo que contem mtodos,
eventos e propriedades.
O que so Forms (Formulrios)?
Na verdade, quase todas as janelas que vemos nos aplicativos so Forms(Formulrios).
Ele serve de base para colocarmos nossos controles.

Na figura 1 (Exemplo anterior), vemos que existe um formulrio, no nosso caso(Form1),


com controles dentro dele(Caixa de texto, Lista e Boto).
Os forms(Formulrios), como qualquer objeto, possuem mtodos, eventos e propriedades
a qual veremos mais tarde.
O que so Propriedades?
Propriedades, como o prprio nome sugere, so os atributos que podemos definir para
cada objeto, seja um formulrio , controle, etc...
Quando selecionamos um objeto, no Visual Basic, aparecer no canto direito da tela uma
janela onde poderemos definir as propriedades para esse objeto. Podemos definir a cor, o
Nesta caixa aparece no canto direito o nome
nome e muitas outras propriedades.
dado pelo usurio ao Objeto selecionado, e no
canto direito o tipo de Objeto. No exemplo
mostramos o objeto de nome Form1 tipo
Form (formulrio). Podemos tambm
selecionar outro objeto que existe em nosso
formulrio nesta caixa, clicando na seta para
baixo, e selecionando outro objeto que ali
esteja disponvel para seleo.
Nesta coluna aparece o nome das
Propriedades. Cada Objeto possui uma
quantidade diversa de propriedade para vrios
aspectos diferentse. Como por exemplo, a
Propriedade BorderStyler que especifica o
tipo de borda que o Objeto ter. A Propriedade
Caption que da um ttulo ao Objeto,
Propriedade BackColor onde se escolhe a
cor de fundo que o objeto ter. Lembrando que
essas propriedades atuam somente no Objeto
selecionado. Se queremos mudar uma
determinada propriedade de um Boto de
Comando por exemplo, precisamos selecionlo na forma, e depois levar o mouse at a
propriedade que se quer mudar.

Esta coluna onde modificamos a


propriedade escolhida, seja atravs de uma
lista de opes (ComboBox), ou digitada
diretamente.

Algumas propriedades de alguns objetos podem ser definidas em tempo de execuo,


outras porm so somente leitura, ou seja, podemos verificar os valores de tais
propriedades, mas no podemos modic-los. Para atribuir um valor de propriedade a um
objeto em tempo de execuo usamos o nome do objeto , seguido de ponto, o nome da
propriedade, o sinal de igual e o valor que voc quer atribuir.
Exemplo :
ObjetoTal.Cor=Azul

Claro, que o ObjetoTal e a propriedade Cor desse objeto so fictcios. Um Exemplo


real seria :
Text1.Text=Exemplo
No se preocupe em entender o que quer dizer a propriedade Text, mas sim em
entender apenas como se faz para definir as propriedades em tempo de execuo.
importante ressaltar que cada objeto tem propriedades diferentes. Claro que todos tem
propriedades em comum, mas um tipo de objeto sempre ter propriedades diferentes de
outro tipo.
Mtodos
Mtodos so aes que agem sobre os objetos, por exempo, se temos um objeto carro,
teramos a propriedade Cor sendo como Azul. Poderamos ter um mtodo chamado
Acelerar e outro Freiar. Poderamos tambm ter um mtodo abastecer.
Em exemplo prtico seria termos um formulrio chamado Form1. Existe um mtodo
chamado Show que age sobre formulrio e outros objetos. Ele serve para exibir um
formulrio. Como faramos para exibir o nosso formulrio(Form1)?
Form1.Show
Ser exibido o formulrio. Este o procedimento para se aplicar os mtodos. Assim como
as propriedades, cada objeto tem vrios mtodos diferentes. Podemos tambm passar
parmetros para esses mtodos. Veremos isso mais tarde

Eventos
Vamos tomar um exemplo prtico. Voltaremos ao nosso exemplo do automvel. Assim
como podemos atribuir sua propriedade cor para Azul, executar um mtodo Acelerar,
podemos ter um evento
Ao Bater.
Um evento gerado quando acontece algo com o objeto, por exemplo, se tivermos um
Caixa De Texto e clicarmos em cima dela o Objeto Textbox(Caixa de Texto) vai gerar um
evento chamado Click(). Dentro deste evento colocaramos um bloco de cdigo com as
instrues que queremos que o programa faa cada vez eu o usurio clicar na Caixa de
Texto. Assim como este, exitem muitos outros eventos e cada objeto tm seus eventos em
comum, assim como tem eventos prprios de cada objeto.
Veremos mais tarde detalhadamente vrios tipos de eventos.

Nesta caixa podemos selecionar qualquer


objeto existente no formulrio

Neste outra caixa selecionamos os eventos


correspondentes ao objeto selecionado

Os Controles
Ao abrirmos o ambiente do Visual Basic, podemos ver esquerda a Caixa de Ferramentas.

Para inserirmos os controles no formulrio,


selecionamos eles dentro da Caixa de
Ferramentas e os arrastamos para dentro do
formulrio, onde devemos dimension-lo.

Esses controles que voc est vendo na figura so os controles nativos do Visual Basic.
Podemos adicionar mais controles a esta Caixa de Ferramentas. Veja como :

Acesse o menu
Project e
selecione
Components

Ir aparecer uma lista com todos os controles disponveis. Para que eles apaream na nossa
Caixa de Ferramentas devemos seleciona-los nessa lista. Um controle, na verdade,
representado por um Arquivo com extenso OCX. Podemos ver nessa janela que o Visual
Basic mostra o local onde determinado componente, ou seja, o arquivo OCX, se encontra.
Se o controle que voc procura no se encontra nessa lista, basta voc saber onde o arquivo
OCX dele se encontra, podendo assim adicion-lo a lista.

Com este boto podemos


procurar por um
determinado controle que
no esteja na lista

Sempre que selecionamos


um controle, aqui
aparecer o nome do
arquivo correspondente.

10

Conhecendo melhor o Form(Formulrio)


Veremos agora as principais propriedades, mtodos e eventos do Form. Comearemos com
as principais propriedades. So elas:
Name Define o nome do formulrio. Um nome de objeto deve comear obrigatoriamente
com uma letra, mas tambm pode conter nmeros. Espaos em branco e caracteres
como(#$&+-^) no so permitidos.
Caption a ttulo do formulrio que aparece no seu topo. Podemos colocar qualquer
valor nessa propriedade.
Appearence Define se o mode de exibio ser 3D ou Normal.
BakColor- Muda a cor de fundo do formulrio.
Como voc pode ver, voc pode optar entre 2 sistemas de cores.

O Palette e o System , sendo que o System mostra o sistema de cores do Windows, no caso
de voc querer fazer uma aplicao bem padro Windows, enquanto o Palette ir lhe
mostrar vrias outras cores e voc pode personalizar suas prprias cores tambm.

BorderStyle: Muda o tipo de borda do formulrio. None: sem borda, sem barra de titulo,
sem menu de controle, sem boto maximizar e sem boto minimizar, e no pode
redimensionar a janela.

11

Fixed Single: Borda fixa. Aceita o Menu de Controle, Maximizar, Minimizar, barra de
ttulo, mas no pode ser redimensionado.
(Default) Sizable: Borda comum. Possui o Menu de Controle, Maximizar, Minimizar,
barra de ttulo e pode ser redimensionada.
Fixed Dialog: Muito usada para janelas que vo manter um dialogo com o usurio. Ela
pode ter Menu de controle e a barra de ttulo, mas no ter os botes de maximizar e
Minimizar. No pode ser redimensionada.
Fixed ToolWindow: No possui o menu de controle, o boto Maximizar e o boto
minimizar. Tambm no pode ser redimensionada. Aparecer somente a barra de ttulo e o
boto Fechar prprio do Windows 95. Este tipo de formulrio no aparece na barra de
tarefas do Windows.
Sizable ToolWindow: No possui o menu de controle, o boto Maximizar e o boto
minimizar. Pode ser redimensionada. Aparecer somente a barra de ttulo e o boto Fechar
prprio do Windows 95. Este tipo de formulrio no aparece na barra de tarefas do
Windows.
ControlBox: Retira ou coloca o menu de controle e os botes maximizar, minimizar e
fechar da janela.
Enabled: Se esta opo estiver com False, ou seja, estando o Enabled desabilitado, isto
indicar que nenhum objeto desta janela, e nem a prpria
janela, poder responder a eventos gerados pelo usurio, como clicar do mouse,
pressionamento de teclas, etc.
Font: Escolhe a fonte de letra padro que ser usada para todos objetos inseridos neste
formulrio.
Icon: Nesta propriedade escolhemos um arquivo de cone para associar a esse formulrio.
Esse cone o que vai aparecer quando a janela for minimizada e no lado esquerda da barra
de ttulo ( Menu de Controle ).
KeyPreview: determina se os eventos do teclado no formulrio sero executados antes dos
eventos correspondentes aos Objetos inseridos no formulrio.
MaxButton: Habilita ou no o boto de maximizao.
MDIChild: Determina se a janela ser uma janela filha. Ou seja, ter uma outra janela
mestre que agrupara o Form que se esta criando.

12

MinButton: Habilita ou no o boto de minimizar.


MouseIcon: Sempre que o mouse for movido em cima do formulrio, o cone associado a
esta propriedade aparecer (desde que a propriedade MousePointer esteja customizada).
MousePointer: Nesta propriedade especificamos o tipo de ponteiro que o mouse ter
quando se mover sobre o formulrio. Veja os tipos existentes:

0
1

(Default) Ponteiro padro.


Ponteiro em forma de seta

Ponteiro de seleo exata

Seleo de escrita

4
5

cone
Seleo de Mover Objetos

Redimensionamento na diagonal

Redimensionamento na vertical

Redimensionamento na diagonal

9
10

Redimensionamento na horizontal
Seleo alternada

11

Sinal de ocupado.

12

No disponvel ( Ocupado )

13

Trabalhando em segundo plano ( Somente 32-bit Visual Basic.)

14

Seleo de Ajuda. (Somente 32-bit Visual Basic.)

15
99

Todos os Tamanhos. (Somente 32-bit Visual Basic.)


Aparece o cone escolhido na propriedade MouseIcon

13

Picture: Inseri uma figura em nosso formulrio como papel de parede.


ShowInTaskbar: Habilita ou no a possibilidade da janela aparecer na barra de tarefas do
Windows.
Visible: Determina se quando executarmos o programa essa janela ir ficar visivel ou
invisvel.
WindowState: Determina se, quando executarmos o programa, a janela ir aparecer na
tela do computador Normal, Maximizada ou Minimizada.
Bem, agora que voc j conhece as principais propriedades do Form, vamos Brincar um
pouco.
Abra o Visual Basic e crie um projeto padro. Voc ver que por padro o Visual Basic j
coloca um Form no projeto. Ento modificaremos este Form. Altera as seguintes
propriedades:
Name = FrmCadastro
Caption=Cadastro De Clientes
BorderStyle = 1 Fixed Single
Altere a cor de fundo do formulrio. Associe um cone ao formulrio e coloque uma
imagem de fundo.
Feito isso, rode o programa teclando <F5>. Feito isso, veja o que acontece. Depois altere
as propriedades, at mesmo as que no conhece. Procure conhecer todas, mude-as , execute
o programa e veja o que acontece.

CommandButton ( Boto de Comando)


O Boto de Comando utilizado pelo usurio para executar determinadas aes.
Quem determina essas aes o programador atravs de instrues associadas aos eventos
do CommandButton. Existe um padro para se utilizar os botes de comando. Por exemplo.
Em um Form(Formulrio), com vrios botes procure sempre deix-los do mesmo
tamanho, mesmo que o texto deles seja de tamanhos diferentes.

Errado

Certo

Vamos as propriedades do CommandButton ou Boto de Comando:

14

Cancel: Se esta opo for ajustada como verdadeira, o boto ser associado a tecla ESC, e
sempre que pressionarmos esta tecla ser como se tivssemos apertado o boto.
Caption: O ttulo que ser exibido dentro do boto.
Default: Estando o boto com essa propriedade como True indica que este boto ser o
Padro da janela, e sempre que apertarmos a tecla Enter ser como se tivssemos apertado o
boto.
Enabled: Determina se o boto ser habilitado para pressionamento por parte do usurio ou
no.
Font: Escolhe a fonte de letra que o Caption ter.
Name: O nome que daremos para o Objeto boto de comando.
Visible: Determina se o boto ser visvel para o usurio quando o programa estiver em
execuo.
Style: Escolhe se o boto ter elemento grfico em seu interior. Se escolher Style do tipo
"Graphical" o CommandButton aceitar figuras, e elas devem ser inseridas na propriedade
Picture do objeto CommandButton.
TabStop: Quando temos um formulrio com diversos controles, podemos nos mover
atravs desses controles usando o teclado, atravs da tecla TAB ou atravs de outras teclas,
como veremos mais tarde. Quando a propriedade TabStop est desabilitada, ou seja com o
valor False ento, ao nos movermos atravs dos controles o Boto ser ignorado e o foco
movido ao controle seguinte.
TabIndex: o Movimento de troca de foco, que vimos na propriedade TabStop tem uma
ordem, e essa ordem seguida pela propriedade TabIndex do boto, a qual devemos
atribuir um numero, esse nmero ser usado como a ordem que o foco percorrido pelos
controles, ou seja, se tivermos um controle com a propriedade TabIndex definido como 1, e
outro com a propriedade TabIndex definido como 2, o que tem o nmero 1, receber o foco
primeiro do que tem o nmero 2 na propriedade TabIndex.
ToolTipText A no muito usada, mas no menos importante propriedade ToolTipText,
quando no est vazia exibe uma pequena ajuda sobre o controle, quando o usurio passa o
mouse em cima do respectivo controle. O texto que aparecer ser o definido na
propriedade ToolTipText.
Vamos agora um exemplo prtico envolvendo Botes de Comando:
- Crie um Form e com as seguintes propriedades:
Caption = Exemplo do CommandButton
Name = FrmExemplo
- Insira neste Form 3 botes de Comando com as seguintes propriedades:
Boto 1:
Name = CmdOk
Caption = OK
Boto 2:
Name = CmdCancelar
Caption = Cancelar
Boto 3:
15

Name = CmdSair
Caption = Sair
Feito isso, d um duplo click no objeto CmdOk. Voc ver que ao clicar nesse boto abrir
uma janela de cdigo, correpondente ao evento Click() do boto. Esse evento acionado
toda vez que o usurio clicar no boto.

Dentro deste evento vamos inserir a seguinte linha:


Msgbox Voc Clicou OK
Faa o mesmo processo com os demais botes. Apenas troque o texto que exiet dentro
das aspas pelo texto de sua preferncia. Ao fazer esse processo com o boto CmdSair,
insira uma linha a mais:
Unload me
Execute o projeto e veja o que acontece. Voc viu que criar a interface e fazer com que as
coisas funcionem no nada difcil. Basta conhecer bem as propriedades, eventos e
mtodos dos objetos.

16

Vamos agora conhecer os principais eventos do objeto CommandButton. Devo lembrar que
muitos desses eventos e at mesmo propriedades, dependo do caso at mtodos, no so
exclusivo do CommandButton , ou seja, outros objetos tambm tem as mesmas
particularidades.

Eventos do CommandButton
A maioria dos eventos do CommandButton no so usados, por isso, vamos nos reter
apenas nos mais importantes. So eles:
Click() Esse o mais importante de todos os eventos do CommandButton. Acontece
sempre que o boto clicado.
GotFocus() Um evento que acontece sempre que o CommandButton recebe o foco.
LostFocus() Esse evento chamado sempre que o CommandButton perde o foco.
MouseMove() chamado toda vez que o usurio mover o mouse por cima do
CommandButton. Na prtica isso no muito usado, sendo que na maioria das vezes, um
evento desses seria til apenas quando quisssemos que o evento informasse a funo do
boto ao usurio, mas isso pode ser feito facilmente usando a propriedade ToolTipText do
boto.

Mtodos
O CommandButton tem 7 mtodos, mas na prtica, dificilmente usamos todos. Na
verdade, usamos quase sempre apenas um deles:
SetFocus - Este mtodo que no s usado por CommandButtons, mas na verdade,
usado por quase todos os controles, tem a funo de passar o foco para o objeto que
quisermos. Exemplo:
CmdOk.SetFocus
Ir passar o foco para o objeto CmdOk.

O Label
No h muito segredo para se trabalhar com Labels. O Label na verdade, no passa de
uma legenda que inserimos no Form. Sua finalidade inserir um texto no formulrio. Isto
nos ser til quando precisarmos fazer um cadastro ou coisa parecida. Vamos as suas
principais propriedades:
Name O nome que ser usado pelo Label.
Caption Essa a propriedade principal do Label. A legenda que o Label ter.
Alignment: Determina o alinhamento que o texto ter dentro do label.

17

AutoSize: Com esta propriedade habilitada indicamos ao Controle para automaticamente


dimensionar seu tamanho ao tamanho do texto do label.
Note na figura que, quando o AutoSize foi passado para True, as marcas de seleo do label
foi ajustado para o tamanho do texto label1.
BackColor: Escolhe a cor de fundo que envolver o label.
BackStyle: Escolhe entre o fundo Transparente ou Opaco para o label.
BorderStyle: Escolhe entre colocar uma moldura envolvendo o label ou no.
Enabled: Habilita ou desabilita o objeto. Quando esta em False fica com a cor de seu
contedo acinzentada.
Font: Escolhe a fonte de letra que ter o texto digitado na propriedade Caption.
ForeColor: Escolhe a cor da fonte de letra
Name: Nomeia o Objeto label. Como j foi dito importante que todos os objetos seja
nomeado. A inicial do label lbl.
Visible: Indica se o objeto ser visvel ou no para o usurio.
WordWrap: Quando o AutoSize esta em true, no possvel expandir o texto digitado na
propriedade Caption em outras linhas. Mas se passarmos essa propriedade WordWrap para
True isto poder ser feito, bastando para isto dimensionarmos o label.

O TextBox
O TextBox , com certeza, um dos controles mais importantes que voc vai usar.
Formulrios de cadastro, entradas de dados e at mesmo consultas necessitam que voc
entre com os dados. Claro que temos outros controles disponveis para isso, mas na maioria
dois casos, usamos o TextBox. Vamos as suas principais propriedades:
18

BackColor: Escolhe a cor de fundo da Caixa de Texto. Geralmente branco.


BorderSytle: Tipo da borda: Fixa e simples, ou sem borda.
Enabled: Estando False o objeto no estar habilitado para interagir com o usurio.
Font: Escolhe a fonte de letra que ser mostrada dentro da caixa de texto.
ForeColor: Escolhe a cor da fonte de letra.
Locked: Estando em false trava qualquer digitao na caixa de texto
MaxLength: Quantidade mxima de caracteres dentro da caixa de texto.
MultiLine: Habilita a possibilidade de se digitar mais de uma linha na caixa de texto.
Name: Nomeia o objeto TextBox. Geralmente com a inicial txt. Exemplo: Se formos usar
essa caixa de texto para que o usurio digite o nome do paciente, poderamos abreviar
assim: txtNomePaciente.
PasswordChar: Se durante a digitao de qualquer dado na caixa de texto, quisermos que
o Visual Basic mostre outro caractere no lugar do caractere digitado, s especificarmos
aqui qual queremos que seja mostrado. Muito usado para digitao de senhas.
ScrollBars: Estando a propriedade MultiLine habilitada, interessante colocarmos um
ScrollBars na caixa de texto, pois ele acrescentar uma barra de rolagem que poder ser:
rolagem que poder ser:
1 - Horizontal
2 - Vertical
3 - Both:
Horizontal e
Vertical juntos.
Text: A propriedade Text a mais importante deste Objeto. Todo o texto digitado pelo
usurio dentro da caixa de texto incorporado nesta propriedade.

Eventos do TextBox
Irei citar aqui alguns dos principais eventos relacionados a caixa de texto.
Lembramos que todos os Eventos ocorre quando o usurio faz alguma ao. Por exemplo:
se ele aperta um boto aciona o Evento Click, se ele digita algo numa caixa de texto, aciona
o evento Change e KeyPress, se ele movimento o mouse sobre um objeto, aciona o evento
MouseMove.
Vamos explicar esses eventos aqui, mas antes importante entendermos que cada
movimento ou ao do usurio dispara um evento no programa. Mas esses eventos somente
tero alguma reao se programarmos isto na janela de codificao.
Change: Ocorre sempre que o usurio altera o valor contido na caixa de texto.
Click: Ocorre quando o usurio pressiona o boto esquerdo do mouse sobre a caixa de
texto.
DlbClick: Se o usurio apertar duas vezes o boto esquerdo do mouse sobre a caixa de
texto
KeyDown: Ocorre quando o usurio aperta uma tecla no teclado.
KeyUp: Ocorre quando o usurio solta a tecla apertada.
KeyPress: Ocorre quando uma tecla pressionada e solta. Como argumento possui uma
varivel cujo contedo a tecla pressionada (cdigo correspondente na tabela ASCII).

19

Cod.
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

Backsp
ace
Tab

Cod.
32
33
34
35
36
37
38
39
40

Espao
!
"
#
$
%
&
'
(

Cod.
64
65
66
67
68
69
70
71
72

@
A
B
C
D
E
F
G
H

Cod.
96
97
98
99
100
101
102
103
104

41
)
73
I
105
42
*
74
J
106

43
+
75
K
107

44
,
76
L
108
Enter
45
77
M
109

46
.
78
N
110

47
/
79
O
111

48
0
80
P
112

49
1
81
Q
113

50
2
82
R
114

51
3
83
S
115

52
4
84
T
116

53
5
85
U
117

54
6
86
V
118

55
7
87
W
119

56
8
88
X
120

57
9
89
Y
121

58
:
90
Z
122
Esc
59
;
91
[
123

60
<
92
\
124

61
=
93
]
125

62
>
94
^
126

63
?
95
_
127
Estes caracteres no so aceitos pelo Microsoft Windows.

`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
{
|
}
~

MouseMove: Ocorre quando movemos o ponteiro do mouse sobre a caixa de texto.


MouseDown: Ocorre quando o usurio aperta o boto do mouse (seja da direita ou da
esquerda) sobre a caixa de texto.
MouseUp: Ocorre quando o usurio solta o boto do mouse (seja da direita ou da esquerda)
sobre a caixa de texto.,

20

Bem, agora que voc j conhece as propriedades do TextBox, assim como os seus
eventos, vamos colocar em prtica tudo isso. Que tal um exemplo envolvendo Labels,
TextBoxs e CommandButtons ?
Lembra-se daquele formulrio que fizemos como exemplo do CommandButton ?
Vamos melhor-lo:
Quanto aos botes, voc pode deixar todos. Apenas os arraste para o canto direito do
formulrio. Coloque 3 Labels. Voc ver que ao colocar a Label dentro do formulrio ela
tem a propriedade Caption
Definida como o nome do Label. Voc deve troc-la. Coloque uma com o Caption =
Cdigo, outra =Nome outra = Endereo. O formulrio deve ficar assim :

Agora coloque 3 TextBoxs na seguinte ordem, de cima pra baixo:


TxtCodigo
Text=
TxtNome
Text=
TxtEndereco
Text=

Defina para que a TxtCodigo aceita no mximo 5 caracteres e txtnome no mximo 20.
Defina para que ao pressionarmos a tecla <TAB> o foco passe primeiro pelas caixas de
21

texto, de cima para baixo, e depois pelos botes, novamente, de cima para baixo. Veremos
mais tarde como fazer as TextBoxs aceitarem somente nmeros, ou fazer o inverso(fazem
com que elas no aceitem nmeros) atravs do evento keypress ou keydown.

OptionButton
O OptionButton ou boto de opo serve para escolhermos entre vrias opes dentro do
formulrio. Podemos ter vrios dentro do formulrio, mas apenas um poder ser marcado,
pois quando marcamos um, o outro automaticamente desmarcado. Para usarmos vrios
grupos de opes dentro do mesmo formulrio, teramos que usar um Frame, Objeto que

veremos mais tarde.


Na figura acima voc pode ver dos grupos de OptionButtons operando independentemente,
fazendo uso dos Frames. Se eles estivessem soltos no formulrio, s poderamos marcar
uma opo, ou seja, ou marcaramos o Estado Civil ou marcaramos o Sexo.
Vejamos agora as principais propriedades do Frame:
Alignment: Determina se o texto ficar do lado direito ou esquerdo do boto de opo.
Caption: O texto que ser anexado ao Objeto.
Enabled: Habilita ou no o objeto. Estando desabilitado o usurio no poder selecionar a
opo, e a cor do texto ser acinzentado.
Name: O nomeia o Objeto. A inicial abreviada que se usa opt.
Value: True para quando a opo esta selecionada e False para quando a opo no esta
selecionada.

Eventos do OptionButton
Os eventos do OptionButton so praticamente os mesmo usados pelas TextBox, sendo
que no h nenhum em especial.

O Frame
22

claro que, depois do exemplo anterior no poderamos deixar de conhecer o Frame.


Esse controle, como voc viu anteriormente serve para organizarmos melhor os controles
dentro do formulrio. Todos os controles existentes dentro do Frame podem ser
desabilitados ou habilitados definindo a propriedade Enabled de Frame como True ou
False. Alm desses recursos de aninhar controles, o Frame tambm traz uma interface mais
limpa para o usurio. Vamos conhecer algumas de suas propriedades:
Caption: Coloca um texto no topo da moldura. No obrigatrio.

Caption com texto digitado.

Caption sem nenhum texto.

Enabled: Determina se todos todos os objetos colocados no interior da moldura estar ou


no disponvel para o usurio.
Name: Nome dado ao objeto. A inicial abreviada fra. Cuidado para no colocar frm
a abreviatura do Objeto Form.
Um exemplo de Frame com a propriedade Enabled definida como False:

Como voc pode ver o Frame da esquerda est com a propriedade Enabled definida como
False. Estando assim no conseguiremos acessar nem mesmo os controles que esto dentro
do Frame.
Esse recurso muito til quando queremos restringir ao usurio o acesso a certas opes.

23

O frame, assim como o OptionButton, tambm no possui nenhum evento em especial,


sendo a maioria idnticos aos do OptionButton.

CheckBox
A CheckBox ou Caixa de checagem utilizado para marcar opes. No funciona igual
ao OptioButton, pois com a CheckBox podemos marcar vrias opes, uma, ou nenhuma
opo, sendo que com o OptionButton, podemos selecionar apenas uma.
Alignment: Especifica se o texto ficara do lado esquerdo da caixa.

Caption: O texto anexado ao Objeto CheckBox.


Enabled: Habilita ou no esse Objeto. Estando desabilitado no aceitar que o usurio faa
evento com a caixa de checagem.
Font: Escolhe uma fonte de letra para o texto digitado no Caption
Name: Nomeia o Objeto. A inicial abreviada para este tipo de controle chk.
Value: Determina o estado o objeto: 0 - Unchecked, 1 - Checked e 2 - Grayed.
Value esta com
valor
0,
de
desmarcado, ou no
foi escolhido.

Value est com valor


1, de selecionado ou
checado.

Eventos
O CheckBox tem praticamente os mesmo eventos do OptionButton.
Bem, agora que j conhecemos vrios controles, assim como suas respectivas propriedades,
mtodos e eventos, vamos criar um Form utilizando vrios desses objetos. Faremos o
seguinte:
Primeiro Crie um Form com as fontes, cores e cones de sua preferncia. Ser um
cadastro de clientes. Nesse cadastro ser necessrio:
Nome, endereo, bairro e cidade. Para isso sero necessrias 4 TextBoxs e 4 Labels, Certo ?
Nomeia-as e defina as suas propriedades de acordo com o que voc acha necessrio(No
esquea que voc vai se referir aos controles dentro do cdigo atravs dos seus respectivos
nomes, por isso siga a regra de nomenclatura adequada ou utilize um nome que voc tem
certeza de que no ir esquecer).

24

Segundo Insira 2 Frames: Um que ter um grupo de opes com OptionButtons e se


referir ao sexo do cliente, que obviamente ter 2 opes(Masculino ou Feminino). O outro
Frame se referir ao estado civil do cliente. Teremos as seguintes opes:
1- Solteiro
2- Casado
3- Divorciado
4- Vivo
Todas essas opes sero representadas pelos OptionButtons que voc vai inserir dentro
do respectivo Frame. Siga as regras de nomenclatura padro para atribuir os nomes aos
Frames e Optionbuttons.
Terceiro Insira 3 botes no formulrio, um boto de Ok, um boto de Cancelar e um
boto de Sair. Defina as suas propriedades (nomes, fontes, legendas, cones, etc...).
Quarto Insira um CheckBox, que vai ser utilizado para saber se o cliente reside em
Cachoeira do Sul. A legenda desse CheckBox poderia ser Reside em Cachoeira do Sul ou
qualquer outra de sua preferncia desde que pergunte se o cliente mora ou no em
Cachoeira do Sul.
Quinto Deixe todos os controles de modo que o foco passe primeiro pelas TextBoxs, de
cima para baixo, depois pelas opes, da esquerda para direita, e depois pelos botes, de
cima para baixo.
No evento Click() do Boto OK coloque o seguinte cdigo:
MsgBox OK
Prossiga com os demais da mesma forma, trocando apenas o OK pelo nome do boto.
Sexto - Bem, agora que j criamos a interface vamos fazer com que as coisas funcionem.
Se voc observar no Form, poderemos ver que existe uma Caixa de Texto, onde
perguntado ao usurio a cidade do cliente. No entanto, existe um CheckBox ou caixa de
checagem que pergunta ao usurio se o cliente reside em Cachoeira do Sul. Ora, se
soubermos que o cliente reside em Cachoeira do Sul no seria necessrio informar a
cidade.Para isso, ser necessrio associar a um evento do CheckBox, uma instruo que
limpasse a caixa de texto, para caso j tivssemos digitado alguma valor como Cidade, e
desabilitasse a mesma para que no colocssemos nenhum valor, sendo que o cliente reside
em Cachoeira do Sul. Mos a obra.

O ListBox
O ListBox ou caixa de listagem uma caixa a qual podemos adicionar itens, remov-los
ou selecion-los.

25

Caixa de Lista
Vazia
com
vrios nomes
inseridos na
propriedade
List

Caixa de Lista
Vazia,
sem
nenhum
texto
digitado em seu
interior.

O ListBox cria um ndice com o nmero do item selecionado. Este ndice sempre inicia
pelo zero, ou seja, se selecionarmos o primeiro item, o nmero dele ser zero. Se
selecionarmos o segundo, ele retornar um. Este ndice visvel atravs de uma
propriedade em tempo de execuo que veremos mais tarde.

O ListBox til para selecionamos nomes ou outro tipos de dados, remov-los ou


adicion-los de acordo com a nossa necessidade.
Vamos conhecer agora as suas propriedades:
Columns: Determina a quantidade de colunas que a caixa de lista ter. Quando esta com 0
(zero) significa que ter somente uma coluna e a barra de rolagem ser vertical. Se o valor
desta propriedade for 1 ser formado tambm somente uma coluna mas a barra de rolagem
ser horizontal. Valor 2 significa que os itens inseridos no ListBox sero ajustados em 2
colunas, e assim por diante.

Columns ajustado para 0. Os Columns ajustado para 1. Os Columns igual a 2. Os nomes


nomes ficam em 1 coluna de nomes ficam e 1 coluna de ficam dispostos em duas
forma vertical.
forma horizontal.
colunas de forma horizontal.

Enabled: Habilita ou no o ListBox para o usurio selecionar algum item no objeto.


IntegralHeight: Determina a possibilidade dos itens dentro da caixa de lista ser exibido de
forma parcial.
IntegralHeight
com TRUE
IntegralHeight
com FALSE

List: o Local onde digitamos os itens que estaro dentro do ListBox.

26

Os nomes digitados nesta


propriedade em tempo de
projeto so automaticamente
inseridos dentro do ListBox,
mas existe outro processo de
se incluir dados no objeto em
tempo de execuo.

MultiSelect: Quando esta propriedade esta habilitada significa que a caixa de lista aceitar
mltiplas selees, ou seja, poder ser selecionado mais de um tem. As opes so 0 None para seleo somente de 1 tem. 1 - Simple para seleo de vrios itens usando apenas
o clicar do mouse ou barra de espao. 2 - Extended o padro do Windows para multiplas
selees. Para selecionar mais de 1 item usa-se a combinao de tecla CTRL + Click do
mouse ou barra de espao.
Name: Nome que o Objeto ListBox ter. A abreviao padro lst.
Sorted: Classifica os itens existentes dentro do ListBox em ordem alfabtica ou numrica
ascendente. Esta propriedade em tempo de execuo tem a finalidade de informar o estado
que se encontra o Sorted.

Style: CheckBox

Style: Standard

Style: O Estilo
Standard o padro, a partir do Visual Basic 5 acrescentou-se o Estilo CheckBox, onde os
itens existentes no ListBox so acompanhados de um quadradinho do lado esquerdo para se
fazer a seleo dos itens. Para multiplas selees esse tipo de ListBox mais intuitivo para
o usurio.
Vamos agora conhecer as propriedades em tempo de execuo. Essas propriedades so de
extrema importncia para manipularmos os dados existentes no ListBox, pois nos permitem
saber o texto do itemselecionado, nmero do ndice do itemselecionado, nmero de itens
existente no ListBox,etc...
So elas:
ListCount: Retorna a quantidade de itens existente dentro de um ListBox.
ListIndex: Retorna o nmero correspondente ao ndice do item selecionado.
NewIndex: Retorna o nmero correspondente ao ndice do ultimo item inserido no
ListBox.
SelCount: Quando a propriedade MultiSelect esta ativada, possibilitando a seleo de
vrios itens dentro da caixa de lista, o SelCount retorna a quantidade de itens que foi
selecionado.
Selected: Retorna True ou False sinalizando se algum item foi selecionado. necessrio
informar o ndice correspondente. Exemplo: Selected(2): Se o item que possui o ndice 2
for selecionado retornar True, se qualquer outro for selecionado retornar False.
Text: Retorna o texto do item selecionado. No necessita de ndice.

27

List: Retorna o texto do item especificado no ndice. Exemplo: List(2) ir mostrar o texto
existendo na lista referente ao ndice 2.

Eventos do ListBox
De novo aqui s temos o evento DblClick(), que gerado toda vez que dermos um duplo
clique sobre um item do ListBox.
Procure usar sempre o DblClick(), e no o evento Click(). Pois para o usurio mais
intuitivo dar dois cliques numa caixa de listagem para abrir um certo item do que apenas
um.

Mtodos do ListBox
AddItem Usamos este mtodo sempre que queremos adicionar um item ao ListBox. A
sintaxe usada a seguinte:
ListBoxTal.AddItem Texto a ser adicionado
RemoveItem Este outro mtodo usado para removermos um item do ListBox. A sintaxe
seguinte:
ListBoxTal.RemoveItem <nmero do ndice a ser removido>
Voc pode notar que necessrio informar o ndice do item que se deseja remover.
Geralmente para remover um certo item que encontra-se selecionado pelo usurio usamos:
ListBoxTal.RemoveItem ListBoxTal.ListIndex
Usamos ListBoxTal.ListIndex. Usando a propriedade listindex da nossa ListBox
conseguimos automaticamente o nmero do ndice selecionado, necessrio para podermos
remover o item que precisamos.
Clear O mais simples de todos os mtodos do ListBox. Serve para limparmos
completamente a nossa caixa de listagem. Sua sintaxe tambm muito simples:
ListBoxTal.Clear

Agora que j conhecemos as principais propriedades, mtodos e eventos dos ListBox,


vamos fazer algo que funcione usando-os.
Crie um formulrio, com uma caixa de listagem, uma caixa de texto e 3 botes. Altere as
propriedades dessa caixa para que esteja vazia sempre que abrirmos o formulrio. Agora
selecione todas as propriedades necessrias para os botes(legenda,nome,etc...) e codifique
os seus eventos, de forma que um boto servir para adicionar item, outro para excluir item
e outro para limpar a caixa de listagem. Ao clicarmos no boto de AdicionarItem este boto
pegaria o texto existente na Caixa de Texto e o adicionaria na Caixa de Listagem. Quando
28

isso fosse feito, a caixa de texto deveria ser limpa para que um novo texto pudesse ser
digitado nessa caixa de texto. A interface do formulrio poderia ficar assim:

Claro que voc pode incrementar com algumas legendas para facilitar para o usurio.
Por se tratar de um exemplo, vamos padronizar os nomes dos controles existentes no
formulrio:
O boto de AdicionarItem ir se chamar CmdAdd
O boto de RemoverItem ir se chamar CmdRemove
O boto de Limpar ir se chamar CmdLimpa
A Caixa de Texto ir se chamar TxtItem
A Caixa de listagem simplesmente Lista
Bem, vamos ao que interessa. Comearemos primeiramente codificando o boto de
AdicionarItem. Para isso, demos um duplo clique no boto de AdicionarItem. Abrir ento
a janela de cdigo referente ao evento Click() do respectivo boto. O que precisamos fazer
ento?
Fazer com que cada vez que clicarmos neste boto ele limpe a caixa de texto.
Primeiro devemos adicionar o texto existente na caixa de texto, para depois limp-lo.
Faramos assim:

Esta linha adiciona para a


caixa de listagem(Lista) o
texto existente na caixa de
texto, no nosso exemplo
TxtItem, atravs da sua
propriedade Text, que
retorna o texto em tempo
de execuo
Esta outra linha simplesmente atribui que a
propriedade Text da caixa de texto(TxtItem) seja
igual a , o que quer dizer que a seu texto ser nulo
ou em branco, ficando livre assim para que possamos
digitar outro texto.

29

Vamos agora ao boto de RemoverItem, a qual usaremos o mesmo evento click() para
usar as instrues que faro que o item selecionado seja excludo caixa de listagem ao
clicarmos na mesma. Para isso usaremos o mtodo RemoveItem do ListBox. Como voc
sabe, quando usamos o mtodo RemoveItem necessrio que informemos o nmero do
ndice para isso usaramos a propriedades ListIndex do ListBox, a qual retorna em tempo
de execuo o ndice do item selecionado. Ficaria assim:

Bem, j codificamos o boto de AdicionarItem, o de RemoverItem, resta apenas o de


Limpar a caixa de listagem. O mais fcil de todos. Basta colocar no evento Click() do
respectivo boto a linha que usa o mtodo Clear do ListBox:

Voc vai notar que ao tentarmos remover um item sem ter selecionado nada na lista o
sistema vai gerar um erro, pois o valor da propriedade ListIndex, que deveria se referir ao
ndice do item selecionado estar como -1, isso por qu no h nenhum item selecionado.
Logo mais veremos comandos condicionais, a qual poderemos manipul-los para que no
deixem esses tipos de erros acontecerem.

O objeto ComboBox
O ComboBox ou caixa de combinao uma combinao de um TextBox(caixa de
texto) com um ListBox(caixa de listagem). Podemos digitar caracteres dentro dela, alm de
podermos teclar na seta que existe sua direita e selecionarmos dados previamente
inseridos em sua lista.

Objeto ComboBox com sua caixa de


Lista recolhida. Ela somente acessada
ao darmos um click com o mouse na
seta para baixo do lado direito. Da
forma em que esta podemos digitar na
caixa de texto apresentada.

30

ComboBox com a caixa de lista


expandida. Pode-se escolher um nome
qualquer na lista que ele ser
automaticamente levado at a caixa de
texto.

O ComboBox de ampla utilizao, pois poupa o tempo do usurio em precisar digitar


dados, assim como pode evitar que o usurio digite dados incorretos tambm, alm de
ocupar pouco espao no formulrio. Imagine um formulrio enorme com vrios controles e
tivssemos que colocar uma lista de nomes para o usurio escolher, uma lista de cidades e
uma lista de bairros, ao invs de colocarmos trs ListBox que ocupariam um espao maior
poderamos colocar trs ComboBox . Vamos conhecer agora as suas propriedades:
O ComboBox usa as mesmas propriedades que aprendemos para o ListBox. A diferena
esta somente em duas que veremos agora.
Style: Aqui escolhemos o tipo de Caixa de Combinao iremos colocar no formulrio:

0 - Dropdown Combo: a opo padro do Objeto. Aqui pode-se digitar qualquer nome na
rea de digitao, clicar a seta para baixo e escolher qualquer um dos itens que ele ser
automaticamente inserido na rea de texto.
1 - Simple Combo: Caixa de Combinao simples. Aparece em destaque a rea de edio
de texto, onde podemos digitar algum item; ou selecionar qualquer um que esteja na caixa
de lista, que ser inserido na rea de texto. O boto em forma de seta para baixo no existe
neste tipo de ComboBox. Se aumentarmos o tamanho da Caixa de Combinao na vertical,
aparecer a lista e esta ficar fixa. Caso deixamos ela somente do tamanho da rea de texto,
ento a lista no aparecer, e se quisermos saber quais nomes existe teremos que apertar no
teclado a seta para baixo ou para cima, para que os itens existentes dentro da Lista
apaream.

31

2 - Dropdown List: Neste tipo de Caixa de Combinao o usurio pode somente escolher
um item relacionado na lista, no podendo digitar nada. A rea de texto no aceitar
digitao.
Text: Nesta propriedade digita-se um texto que ficar, como padro, fixo na rea de texto
na caixa de combinao. Geralmente deixa-se em branco. Podemos usar essa propriedade
tambm, em tempo de execuo, para saber qual texto o usurio digitou ou selecionou.

Mtodos do ComboBox
Os mtodos usados pelo ComboBox so os mesmo usados pelo ListBox(AddItem,
RemoveItem e Clear).

MaskedBox
O MaskedBox aparenta ser uma caixa de texto. A diferena que ele tem vrios recursos
adicionais. Ele tem recursos que possibilitam a colocao de uma mscara onde ele s vai
aceitar caracteres digitados de acordo com a mscara. Por exemplo, se quisermos que ele
aceite apenas nmeros, basta colocar a mscara correspondente que todos os caracteres que
no so nmeros sero ignorados automaticamente. Vamos agora conhecer as propriedades:
Este objeto semelhante a uma caixa de texto, entretanto ele possui alguns recursos
adicionais, como a possibilidade de colocar uma mscara para o texto que ir ser digitado e
validar a digitao automaticamente.
Veja as principais propriedades:
AllowPrompt : Determina se o caractere informado como prompt vlido durante a
digitao.
AutoTab : Determina se quando o usurio terminar de preencher a mascara do
objeto o foco automaticamente passado para o objeto seguinte, sem necessidade do
usurio apertar TAB ou o mouse.
ClipMode : Determina se, diante de um evento de copiar ou recortar dados do
objeto Maskedit para a rea de transferncia, devem ser enviados os dados digitados com os
caracteres que compem a mscara ou no.

32

* ClipText : Retorna o texto digitado no objeto sem os caracteres que compem a


mscara.
Format : Determina o formato que os dados sero exibidos.
Use a propriedade Format para exibir dados em um formato consistente, ou seja, os
dados sero exibidos neste formato, mesmo que o usurio digite os dados diferentemente do
formato. Por exemplo, se voc definir a propriedade Format para dd/mmm/yyyy, todas as
datas digitadas sero exibidas no formato 18/Set/1995. Se o usurio digitar a data como
18/09/95 (ou qualquer outro formato de data vlido), o Visual Basic converter a exibio
para o formato estabelecido, que dia / ms-por-extenso-abreviado / ano-com-4-digitos.
A propriedade Format afeta apenas a maneira como um valor exibido e no como
ele armazenado. Da mesma forma, um formato de exibio no aplicado at que o
usurio termine a digitao e o controle perca o foco.
Nada exibido no campo para sugerir ou controlar o formato no qual os dados so
inseridos.
Se voc precisar controlar a maneira como os dados so digitados, use uma mscara de
entrada alm de ou ao invs de um formato de exibio de dados. Se voc quiser que os
dados sejam exibidos exatamente como foram inseridos, no defina a propriedade Format.
* FormattedText : Retorna o texto digitado, incluindo os caracteres que compem a
mscara.
Mask : Mscara que moldar o controle.
O Visual Basic fornece duas propriedades que produzem resultados parecidos: a
propriedade Format e o Mask.
Use a propriedade Mask para exibir caracteres de exibio literais no campo com
espaos em branco a serem preenchidos. Por exemplo, se todos os nmeros de telefones
que inserir em um campo tiverem o mesmo formato, voc poder criar uma mscara de
entrada:
(###) ###-#### (___) ___ -____ (062) 621-3862
Uma mscara de entrada garante que os dados se ajustem ao formato definido e
voc poder especificar os tipos de valores que podero ser inseridos em cada espao em
33

branco. Por exemplo, a mscara de entrada anterior solicita que todas as entradas
contenham exatamente os dgitos necessrios para completar um cdigo de rea e nmero
de telefone, e que somente dgitos possam ser inseridos em cada espao em branco.
Voc pode definir uma mscara de entrada usando os seguintes caracteres.
0
9
#
L
?
A
a
&
C
, . : ; - /
<
>
\

Dgito (de 0 a 9, entrada requerida, sinais de mais (+) e menos


(-) no permitidos).
Dgito ou espao (entrada no requerida, sinais de (+) e menos
(-) no permitidos).
Dgito ou espao (entrada no requerida, os espaos so exibidos
como vazios enquanto os dados so editados, mas so removidos
quando perde o foco, sinais de mais e menos permitidos).
Letra (de A a Z, entrada requerida).
Letra (de A a Z, entrada opcional).
Letra ou dgito (entrada requerida).
Letra ou dgito (entrada opcional).
Qualquer caractere ou espao (entrada requerida).
Qualquer caractere ou um espao (entrada opcional).
Marcador de posio decimal e separadores de milhares, de data
e de hora. (O caractere realmente usado depende das
configuraes do Painel de Controle do Windows).
Faz com que todos os caracteres sejam convertidos para
minsculos.
Faz com que todos os caracteres sejam convertidos para
maisculos.
Faz com que o caractere seguinte seja exibido literalmente (por
exemplo, \A exibido simplesmente como A).

Quando voc define uma mscara de entrada e a propriedade Format para o mesmo objeto,
a propriedade Format tem precedncia quando os dados so exibidos. Isso significa que
mesmo voc tendo salvo uma mscara de entrada, ela ignorada quando os dados so
formatados. O dado original como foi digitado no alterado; a propriedade Format s
afeta a maneira como os dados so exibidos.
MaxLength : Determina a quantidade mxima de caracteres que o MaskEdBox
pode ter.
Name: Nomeia o objeto. Geralmente inicia o nome com msk
PromptChar : Escolhe o caractere padro que ser exibido simbolizando o estado
vazio. Por default possui o caractere _, e aconselho a substituir pelo caractere de espao.
Esta propriedade no aceita vazio.
PromptInclude : Determina se o caractere inserido na propriedade PromptChar ser
includo na propriedade Text.
* Text : Contm o texto digitado pelo usurio no objeto.
Evento ValidationError : Este evento ocorre sempre que o usurio digita alguma
entrada que no corresponde a mscara estabelecida.

34

Construindo um sistema
Um sistema em VB constitudo por vrios componentes e dividido em vrias partes.
Ns j conhecemos os formulrios(Forms), mas num sistema podem conter vrios outros
componentes:
- MDI Forms
- Mdulos(Mdule)
- Mdulos classe(Class Module)
- Relatrios (Data Report)
- User Controls
Estes so os principais componentes. Existem muitos outros que fogem ao objetivo do
nosso curso. Alguns, como o Mdulo Classe
E o User Control tambm no sero abordados neste curso, apenas voc ter uma noo do
que e para que serve.
MdiForms
O MdiForm na verdade um Form que suporta vrios outras
Forms dentro dele. Ele tem a funo de ser o formulrio principal numa aplicao. Numa
aplicao mdia ou grande, sempre vamos ter que adicion-lo no projeto.
Mdulos
Os mdulos so usados a todo momento no Visual Basic. Qualquer
projeto seja ele mdio ou grande tem vrios deles. Dentro desses mdulos, existir um
cdigo que poder se dividir em subprocedimentos e funes de usurio. Veremos logo a
seguir o que so subprocedimentos e funes.
Mdulos Classe
Mdulos classes so na verdade, blocos de cdigo que
agem como objetos. Nosso curso no vai abordar a construo de objetos, no entanto
aprenderemos a us-los.
Relatrios
So relatrios gerados por uma ferramenta. Existem para facilitar o
nosso trabalho de gerar relatrios. Tem vrias funes teis a quais veremos mais tarde. H
outros geradores de relatrio alm do Data Report. Trataremos disso na seo Impresso.
User Controls
So controles construdos pelo prprio programador de
acordo com alguma necessidade especfica a qual os controles normais no poderiam
suprir.
DataEnvironment Este componente muito til para tratarmos com banco de dados.
Facilita muito o acesso aos dados e nos possibilita manipular o Banco de Dados com
poucas linhas de cdigo.

35

Para adicionar um componente, acesse o menu Project e selecione qual componente voc
deseja adicionar.

Antes de nos aprofundarmos em alguns componentes, principalmente nos mdulos, vamos


aprender a manipular as propriedades do projeto. Quando voc inicia um projeto, ele por
padro sempre coloca um objeto Form dentro do projeto. De nada for alterado nas
propriedades do projeto, o interpretador sempre inicia por esse Form, o abrindo. Existem
alguns eventos do Form que talvez voc ainda no conhea e so de extrema importncia
quando comeamos a trabalhar com o cdigo. So eles:
Initialize Este evento ocorre quando o Form chamado, seja pelo Visual Basic, ou por
um mdulo onde definimos uma instruo para cham-lo.
Load Ocorre sempre que o Form carregado na memria. Podermos dizer que o
ponto de entrada em qualquer formulrio. Quando o formulrio chamado, antes mesmo de
podermos visualizar ele na tela, o evento Load j est ocorrendo.
Activate Este evento ocorre logo aps o evento Load. Quando este evento ocorre j
podemos ver o Formulrio.
Unload Ocorre quando o formulrio descarregado da memria. o oposto do evento
Unload .
Terminate Este evento ocorre aps o evento Unload . Quando ele ocorre o formulrio j
no est mais na memria, e muito menos podemos visualiz-lo.
Bem, fcil deduzir que se criarmos um projeto, no alterarmos nada, e colocarmos esse
projeto pra rodar, o interpretador primeiro percorreria o evento Initialize do formulrio,
depois o evento Load e depois o evento Activate. Ao fecharmos ele percorreria o evento
Unload e depois o evento Terminate.

36

No entanto, um projeto pode iniciar tambm por um mdulo. Existe um evento chamado
Main que o Visual basic sempre procura nos mdulos do seu projeto, caso voc defina para
que ele procure. Podemos optar entre 2 pontos de entrada em sua aplicao:
- Um formulrio que voc mesmo define qual
OU
- Um mdulo que tem um procedimento chamado Main.
Vamos conhecer as propriedades de projeto onde podemos definir isso. Acesse o menu
Project e selecione Properties. No caso de voc ter um projeto com o nome de
Exemplo aparecer Exemplo Properties. Aparecer a seguinte janela:

Aqui definimos o tipo de


projeto. O padro
Standard EXE.
Aqui definimos o ponto de
entrada no nosso projeto.
Ou seja se vai comear por
um formulrio ou Sub
Main, que seria o mtodo
Main de um de nossos
mdulos.

Nome do projeto
Nome do arquivo de ajuda,
caso exista.
Descrio do projeto.
Tambm opcional.
Um projeto mdio ou grande sempre comea em um mdulo, atravs do
subprocedimento Main .

Menus
At agora vimos como inserir botes e muitos outros controles em um formulrio. Mas e
se quisssemos inserir menus.
O Visual Basic oferece um editor de menus muito simples. Acessando o menu Tools,
Menu Editor ou teclando <F2> voc abrir o Menu Editor.

37

A propriedade Caption
mostra a legenda que ser
exibida no menu.
A propriedade Name o
nome do menu, para que
possamos nos referenciar a ele
no cdigo.
A propriedade ShortCut
permite escolhermos um
atalho pelo teclado para o
menu em uma lista.
Nos permite criar uma matriz
com os menus se os mesmos
tiverem o mesmo nome.

A propriedade
Enabled do menu
determina se o menu
estar ativado ou
no.

A propriedade Visible
do menu determina se
o item estar visvel ou
no.
A propriedade Checked nos
possibilita colocar um ao lado do
item de menu. Isto til em menus
onde existem dois estados: Ligado e
Desligado.

A propriedade WindowList
cria automaticamente um
menu gerenciador de janelas
em aplicaes com vrias
janelas, onde exibido as
janelas recentemente abertas.
Muito til para criarmos um
menu Janela

Agora que j conhecemos as propriedades, vamos aprender a criar os menus.


Primeiramente, voc define o Caption e o Name do item de menu. Devo lembrar que o
Name obrigatrio.
Note que podemos criar submenus dentro dos menus. Usando

, sendo que

avana um nvel e
recua um nvel.
Menus que so antecipados com .... representam submenus. Quanto mais .... tiver na
frente do submenu, mais avanado o seu nvel.

38

O boto Delete deleta o


item de menu
selecionado
Avana em um nvel o
item selecionado,
transformando-o assim
em um submenu.
Recua em um nvel o
item selecionado.
Move o item
selecionado uma posio
abaixo
Move o item
selecionado uma posio
acima
O boto Next passa para
o item de menu seguinte.
Exemplo de submenus.
Todos so antecipados
Por ....

O boto Insert insere um


menu na posio
selecionada.

Menus dinmicos
Menus dinmicos so aqueles menus que aparecem quando clicamos com o boto direito
do mouse em cima de algum item.
O comando que chama esses menus o PopUpMenu e sua sintaxe a seguinte:
PopUpMenu <Nome do menu a chamar>
Claro que ainda temos que saber quando usar esse comando. Podemos us-lo ento no
evento MouseUp do objeto que vai ter o menu. Como sabemos, o evento MouseUp
acontece toda vez que clicamos o boto do mouse em cima do objeto. Vamos conhecer
melhor o evento MouseUp :
MouseUp (Button as Integer, Shift As Integer, X as Single, Y as Single)

39

Como voc pode ver, o evento MouseUp nos passa parmetros dizendo que boto foi
pressionado, que tecla estava pressionada no momento em que pressionamos o boto do
mouse, a linha e a coluna onde foi pressionado o boto.
Button : retorna um nmero inteiro que informa qual dos botes foram apertados:
1
Boto esquerdo pressionado. vbLeftButton
2
Boto direito pressionado. vbRightButton
4
Boto do centro pressionado. vbMiddleButton
Shift : retorna um nmero inteiro que informa qual tecla estava pressionada no
momento em que algum boto do mouse tambm foi pressionado.
1
SHIFT pressionado. vbShiftMask
2
CTRL pressionado. vbCtrlMask
4
ALT pressionado
vbAltMask
X : Coordenada para linha
Y : Coordenada para Coluna
Exemplo:
Private Sub List1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As
Single)
If Button = 2 then
PopUpMenu MenuLista
End if
End Sub
No cdigo acima usamos o evento MouseUp do objeto List1 e depois verificamos se o
boto do mouse que foi pressionado o direito. Caso seja, usamos o comando
PopUpMenu para chamar o menu com o nome de MenuLista.

O cdigo
J falamos vrias vezes sobre cdigo aqui, no entanto nosso cdigo se resumiu a atribuir
propriedades em tempo de execuo a alguns objetos. No iramos muito longe apenas com
isso. Precisaramos de comandos, funes e muitos outros.
Antes de vermos cada um desses itens detalhadamente, seria necessrio dividir o cdigo
em:
- SubProcedimentos
- Funes de Usurio
- Propriedades
- Eventos
Nosso curso tratar apenas subprocedimentos e funes de usurio. Propriedades e
eventos, na maioria dos casos no so muito usados. Antes de vermos esses itens

40

detalhadamente, assim como o mtodo de declar-los no cdigo, vamos conhecer a nossa


amiga Janela de Cdigo. nela que estaremos trabalhando a maior parte do tempo.

Sempre que
clicarmos em um
objeto ou clicarmos
em exibir cdigo
ela se abrir.

Boto de
Exibir
Cdigo

Esta janela o Project


Explorer e nos mostra
todos os componentes
do projeto e podemos
selecionar qual
quisermos.

Note que o Visual


Basic separa
automaticamente
com uma linha os
eventos ou
subprocedimentos

Vamos tratar primeiramente sobre os subprocedimentos. Um subprocedimento so blocos


de cdigo com tarefas especficas. Tem uma srie de instrues dentro dele que devem
fazer alguma coisa. Dentro de um subprocedimento podemos ter comandos e funes. Alm
disso, um subprocedimento tambm pode receber parmetros que especificam os valores
que sero tratados pelo respectivo subprocedimento. Os subprocedimentos existem para
facilitar a organizao de nosso projeto. Imagine um projeto enorme com milhares de linhas
de cdigo. Seria difcil organizar tudo isso. No mesmo? Ento foram criados os
subprocedimentos para que cada tarefa em nosso projeto pudesse ser dividida, organizando
assim o cdigo. Veremos exemplo mais tarde e vamos aprender a declar-los tambm.
Quanto as Funes de Usurio , sero vistas logo mais, sendo que vamos precisar
conhecer primeiro o que faz uma funo para que depois aprendemos a constru-la.
Devemos agora primeiramente ter uma noo boa sobre variveis, comandos e funes
de depois mergulharemos em subprocedimentos e funes de usurio.

Variveis
Voc j deve conhec-las da matemtica, onde geralmente tnhamos a varivel X ou
varivel Y.
41

Em programao, ela tem a mesma funo com vrios recursos adicionais.


Na matemtica, s tnhamos a varivel numrica. Na programao temos vrios tipos de
variveis. Vamos conhec-las:
Nome
Integer
Long
Byte
Single

Descrio
Numrico Inteiro
Numrico Inteiro
Numrico Inteiro
Numrico real

Double

Numrico real

Currency

Numrico Valores monetrios


Texto

String

Date
Boolean
Object
Variant

Data e Hora

Abrangncia
-32.768 a 32.767
-2.147.483.648 a 2.147.483.648
0 a 255
-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
2.147.483.648 de caracteres nos sistemas
32 bits
65.536 de caracteres nos sistemas 16 bits
entre 01/01/100 a 31/12/9999
True (verdadeiro) False (falso)
Contm um objeto
Pode ser numrico, string, objeto ou valor
nulo.

Quando atribumos um determinado valor a uma varivel esse valor fica armazenado na
memria e quando nos referenciamos a essa varivel novamente esse valor lido na
memria.
Portanto, devemos pensar bem antes de escolher qual varivel usaremos para
o nosso valor.
Voc viu que existem cinco tipos de variveis apenas para tratar com nmeros. A Integer
abrange um certo valor, a Long outro, a Single outro, a Double outro e a Currency a mais
adequada para tratarmos com valores monetrios .
Devemos usar exatamente o tipo de varivel que precisamos. No caso de voc precisar
colocar o nmero 100 numa varivel, o tipo Integer se enquadra perfeitamente. J se
usarmos Long para um valor desse porte, estaramos desperdiando memria.
O tipo Variant, por exemplo, permite-nos, de antemo, atribu-lo com um valor a qual no
sabemos qual . No entanto, devemos usar o tipo Variant com muito cuidado, pois tem um
consumo de memria bem superior aos outros tipos de variveis.
O Visual Basic nos permite atribuir um valor a uma varivel sem precisarmos declarar o
seu tipo. No entanto essa prtica apesar de facilitar o trabalho, no recomendada. Voc
deve estar se perguntando por qu:
Bem, em primeiro lugar, imagine voc um sistema com milhares de linhas de cdigo. E
nessas linhas voc tivesse a seguinte linha:
Nome = Maria Da Silva

42

Digamos que voc se distraia e digite:


Nomex = Maria Da Silva
O que ir acontecer que o compilador no vai dar nenhum aviso de erro, por qu assim
como existe a varivel Nome pode existir tambm a varivel Nomex. Tudo bem, o
programa ir compilar sem problema o seu cdigo. Mas e, quando voc precisasse desse
valor dentro da varivel Nome?
Resposta: Ela no estaria l!
E seu cdigo?
Se quebraria.
Daria erro em um certo ponto. Talvez voc demoraria para notar o erro, mas cedo ou
tarde, em determinada parte, iria ver que o valor no estava sendo gravado ou qualquer
outro tipo de erro.
Esse tipo de problema comum se voc no optar que o Visual Basic exija
obrigatoriamente a Declarao de Variveis. Para isso, acessamos o Tools, Options e
selecionamos Require Variable Declaration, como mostra a figura.

Marcamos esta caixa


para forar a
declarao de
variveis.

Podemos tambm usar a instruo Option Explicit na seo General-Declarations do


mdulo em que dever ser forada a declarao de variveis.

43

Com este procedimento, se uma varivel no for declarada o Visual Basic vai gerar um
erro dizendo que a varivel no foi declarada.
Voc deve estar se perguntando onde, e, como se declara uma varivel. H vrias
palavras chave para se declarar uma varivel. Trataremos primeiro do comando Dim. Sua
sintaxe a seguinte:
Dim VarivelTal as <TipodaVarivel>
Exemplo:
Dim Nome as string
Declaramos a varivel Nome como sendo do tipo String
Dim Numero as Integer
Declaramos a varivel Nmero como sendo do tipo Integer
Dim Valor as Currency
Valor = 58,34
Declaramos a varivel Valor como sendo do tipo Currency, que o tipo que usamos
para valores monetrios, e, logo aps atribumos a ela o valor de 58,34
Vamos tratar agora os diferentes tipos de variveis que se dividem em numricas, string,
lgicas, datas , objects e variants.

Variveis numricas
Uma varivel numrica pode ser do tipo Integer, Long, Single ou Double como j vimos
anteriormente. Voc escolhe a varivel de acordo com as suas necessidades. Procure sempre
utilizar o tipo de varivel de acordo com o que voc precisa. Por exemplo, se voc ir
armazenar um nmero entre zero e 100 em uma varivel numrica do tipo Long, voc
estaria utilizando mais recursos do que seu valor necessita. Pois numa caso destes, a
varivel Single seria totalmente cabvel. muito importante que o programador leve em

44

considerao casos como este. Pois em um programa grande o gerenciamento de recursos


de extrema importncia.
Procure usar as variveis numricas apenas quando estas forem objetos de clculos, ou
seja, use-as apenas quando for realizar operaes matemticas com os seus valores. Por
exemplo, voc no precisa utilizar um tipo numrico para uma varivel numrica que vai
conter um Cpf ou um nmero de identidade.

Variveis Lgicas(Boolean)
Permitem somente dois valores: True or False. Ou seja, verdadeiro ou falso.
Este tipo de varivel parece no nos prometer nada, mas so de extrema importncia
dentro de um programa. Quando declaramos uma varivel do tipo Boolean, ele definida
automaticamente como False(Falso) e s passa a ser True(Verdadeiro) quando assim for
definida. Exemplo:
Dim Nome as String
Dim NomeIgual as Boolean
Nome = Maria da Silva
NomeIgual = (Nome = Maria)
A varivel lgica NomeIgual retornaria False
Declaramos duas variveis, uma do tipo String, e outra do tipo lgica(Boolean). A varivel
lgica NomeIgual tem a funo de analisar a comparao entre a varivel nome e uma
string qualquer. Se essa comparao for verdadeira, ele retornar true, e vice-versa. No
nosso exemplo acima, temos a varivel Nome com o contedo Maria da Silva. A
comparamos com a string Maria e o resultado que a varivel NomeIgual dar False,
por qu a comparao no verdadeira. Vejamos agora como a varivel NomeIgual
poderia retornar True:
Dim Nome as String
Dim NomeIgual as Boolean
Nome = Maria da Silva
NomeIgual = (Nome = Maria da Silva)
NomeIgual retornaria True
Convm observar que se trocssemos uma letra que fosse, de maiscula para minscula a
varivel lgica NomeIgual j retornaria False.
Dim Nome as String
Dim NomeIgual as Boolean
Nome = Maria da Silva
NomeIgual = (Nome = Maria da silva)
NomeIgual retornaria False

Observe o s minsculo

45

Varivel String
Ao tratarmos sobre as variveis lgicas falamos sobre String. Uma string na verdade
pode ser o contedo de uma varivel do tipo String ou qualquer contedo delimitado por
aspas. Uma string aceita caracteres alfanumricos, smbolos, etc. Podemos fazer
concatenao com essas strings, assim como extrair uma parte de seu contedo e at fazer
comparaes.
Concatenao seria juntarmos duas strings em uma s. Podemos usar para isso o
operador + ou o &. Exemplo:
Visual + Basic resultaria Visual Basic
13 + 12 resultaria 1312
Visual & Basic resultaria Visual Basic
13 & 12 resultaria 1312
Bem, olhando assim parece que o operador + e operador & so iguais, mas na
verdade no. A diferena est que o operador + fora a soma e operador & fora a
concatenao. Vejamos:
12 + 13 resultaria 25
Note que ao tentarmos concatenar com o operador + uma string e um dado numrico ele
somou e transformou o resultado em um valor numrico.
12 & 13 resultaria 1213
Agora ficou bem claro que o operador + ao encontrar 2 tipos diferentes, ou seja, um
valor numrico e uma string, ele os somar e ir transform-los em um valor numrico,
enquanto que o operador &, ao encontrar 2 tipos diferentes ir forar a concatenao,
pegando o valor numrico e concatenando com a string, transformando assim o resultado
em uma string.
Resumindo, podemos usar tanto o operador + quanto o operador & para concatenar
strings, apesar de que geralmente mais usado o &.

Varivel Date
A varivel Date nos possibilita o armazenamento de datas, porm, tambm podemos
armazenar horas. Quando atribumos uma data a uma varivel devemos usar o operador #.
Exemplo:
Data = #01/01/2001#
Se tentarmos atribuir uma varivel data assim:
Data = 01/01/2001

46

Ou assim:
Data = 01/01/2001
Se a varivel foi j foi declarada como Date, o programa retornar um erro dizendo que o
que estamos tentando passar no uma data. Se a varivel ainda no foi declarada, no
primeiro exemplo, ele pensar que estamos tentando dividir 01 por 01 por 2001 e colocar
o resultado na varivel. No segundo ele armazenar uma string na varivel tornando assim
uma varivel do tipo String.
A varivel Date nos possibilita fazer alguns clculos:
a = #15/07/96#
b = #30/07/96#
b - a = 15 (Uma data menos outra retorna o intervalo em dias)
a + 3 = #18/07/96# ( uma data mais um valor numrico soma a quantidade de dias na data)
a - 3 = #12/07/96# ( uma data menos um valor numrico subtrai a quantidade de dias na
data.

Varivel Variant
A varivel do tipo Variant como o prprio nome sugere uma varivel que se transforma
em qualquer tipo, dependendo do contedo que lhe atribudo. Por exemplo, se tivermos
uma varivel A e atribumos A=Jos, A ser do tipo String, j se atribuirmos A = 1, A
ser do tipo Integer.
A uso desse tipo de varivel s aconselhado quando no temos a menor idia do
contedo que ser atribudo a ela, pois uma varivel do tipo VARIANT utiliza mais
recursos do que os outros tipos.

Varivel Object e instanciao


A varivel Object representa um objeto. Podemos atribuir objetos s variveis, caso
precisarmos. Essa prtica chamada de instanciao.
Como o Visual Basic trabalha com objetos, bom se acostumar a instanciar objetos a
todo o momento. O que acontece, na verdade, no momento em que instanciamos o objeto
que a varivel que contm a varivel passar a se comportar como o objeto. Podemos
definir um tipo de varivel como sendo TextBox, ComboBox, Form ou qualquer outro
objeto. O Tipo Object aceita qualquer um desses objetos. Seria como a varivel Variant dos
objetos.Podemos instanciar qualquer objeto existente em nosso projeto. Para instanciar um
objeto, temos de usar a palavra chave SET antes da varivel. Exemplo:
Dim Objeto as Object
Set Objeto = Text1
Objeto.text=ol

47

Crie um projeto novo no VB. Insira um TextBox no formulrio. Agora coloque o cdigo
acima no evento LOAD do Form e rode o projeto. Voc ver que aparecer a caixa de texto
com o texto ol em seu interior. Bem, vejamos como isso aconteceu.
Primeiro, criamos uma varivel chamada Objeto, como sendo do tipo OBJECT.
Dim Objeto as Object
Depois instanciamos. Imagine o ato de instanciar como estar apontando para objeto.
Como tornar a varivel um espelho do objeto.
Set Objeto = Text1
Depois de instanciarmos a varivel Objeto, fazendo que ela aponte para Text1(nossa
TextBox), podemos modificar as suas propriedades atravs da varivel:
Objeto.text=ol
Simples, no mesmo. Note que, ao declarar a varivel, poderamos usar diretamente o
tipo TEXTBOX. Pois como j falamos anteriormente, o Tipo Object seria como o Tipo
VARIANT, s que para objetos. Este exemplo usou um TextBox, mas poderamos usar com
qualquer outro objeto existente no projeto.
Veremos instanciao com maiores detalhes mais adiante.

Declarao de Variveis
O Visual Basic nos permite declarar variveis em qualquer parte do cdigo, no entanto,
existem algumas observaes a serem feitas:
- Para que uma varivel seja vista por todo o mdulo, formulrio, ou qualquer outro objeto
que a contm, a mesma deve ser declarada na seo General, Declarations do mdulo.

Se a declararmos dentro de um procedimento qualquer, ela ser vlida apenas dentro


desse procedimento.
- Para que a varivel seja vista pelo projeto inteiro, devemos declar-la como Public, no
mdulo principal. Veremos agora o que significa Public , assim como os demais
modificadores de acesso.

Modificadores de acesso
48

Os modificadores de acesso mudam a forma como o programa enxerga as variveis. Se


declararmos uma varivel usando no lugar de DIM a palavra chave PUBLIC na seo
General-Declarations do mdulo principal, esta varivel poder ser usada em qualquer parte
do projeto.
Public Nome as String
Esta varivel poder ser usada dentro de qualquer formulrio sem problemas. J se
declararmos uma varivel pblica dentro de um formnulrio, tambm poderamos us-la em
qualquer parte do projeto, no entanto devemos antecip-la com o nome do formulrio e um
ponto. Exemplo:
FormularioTal.Nome
Alm do modificador de acesso PUBLIC, temos o PRIVATE, que funciona exatamente o
oposto do PUBLIC. O usamos para evitar que as variveis internas de um mdulo entre em
conflitos com variveis de mesmo nome de outros mdulos. Sua sintaxe a mesma usada
no comando PUBLIC.

Constantes
Uma constante uma varivel que ter um valor somente leitura, ou seja, poderemos
apenas ler o seu valor, mas no poderemos modific-la. til quando temos um
determinado valor que referenciado vrias vezes dentro do projeto, e queremos uma
varivel para representar esse valor, de forma que no precisemos mais digitar toda vez esse
valor.
Para declararem constantes, usamos a instruo CONST. Exemplo:
Const Numero as Integer = 3
O tipo da constante no obrigatrio, de forma que a linha acima poderia ficar assim:
Const Numero = 3
No lugar do nmero 3 poderamos usar qualquer expresso, seja ela uma string, ou uma
operao matemtica, ou qualquer outra expresso vlida envolvendo outras constantes.
As constantes so declaradas como Private por padro, no entanto podemos usar os
modificadores de acesso Public antecipando a declarao. Exemplo:
Public Const Data = #20/09/1979#
Se colocarmos essa linha na seo General-Declarations de um mdulo, esta constante
poder ser acessada por qualquer parte do projeto. Se a colocarmos na seo GeneralDeclarations de um formulrio tambm, mas da mesma maneira que acessamos as
variveis, ou seja, antecipando com o nome do formulrio:

49

FormularioTal.Data

Operadores
Agora que j aprendemos a trabalhar com variveis, vamos conhecer os operadores, que
sero essncias para a manipulao dos valores de nossas variveis. Com eles, poderemos
realizar operaes matemticas, lgicas, etc. Os operadores se dividem em:
- Matemticos
- Relacionais
- Lgicos
- String
Matemticos Os operadores matemticos j so conhecido de todos. Com eles
poderemos somar, dividir, subtrair,etc. So eles:
Operador
+
*
/
\
^
Mod

Descrio
Soma
Subtrao
Multiplicao
Diviso
Diviso. Resultado ser um nmero
inteiro
Exponenciao
Resto da Diviso

Exemplo
Var = 18+5
Var = 18-5
Var = 18*5
Var = 18/5
Var = 18\5
Var = 18^5
Var = 18 Mod
5

Assim como na matemtica, esses operadores sempre respeitam uma ordem para realizar os
clculos:
1. Exponenciao
2. Multiplicao e Diviso
3. Adio e Subtrao
Se tivermos o seguinte clculo a ser feito:
7+3*2-4^2/2
Resultaria 5.
O programa primeiro calcularia as operaes de exponenciao, depois de multiplicao
e diviso, e depois sim, ir realizar as operaes de soma e subtrao.
Caso quisssemos que ele primeiro somasse, bastaria colocarmos a soma entre
parnteses:

50

(7+3)*2-4^2/2
Resultaria 12.
Operadores Relacionais Realizam comparaes entre valores ou variveis e retornam o
resultado da comparao, sendo True se a comparao for verdadeira, e False, se a
comparao for falsa. So eles:
Operador
Descrio
Exemplo
>
Menor
3<5
<
Maior
5>3
<=
Menor ou
3 <= 5
Igual
>=
Maior ou
5 >= 3
Igual
=
Igual
5=5
<>
Diferente
3 <> 5
Operadores Lgicos Realizam operaes lgicas usando operadores que representam a
palavra NO, E, OU, EQUIVALENTE, IMPLICAO E PRECISO. Veremos os
mais importantes. So eles:
And O mais usado de todos os operadores. Representa a palavra E em uma expresso.
Por exemplo:
A = 5 and b = 7
Significa a igual a 5 e b = 7
OR- Representa a palavra OU numa operao lgica.
A = 5 or B = 7
Significa a igual a 5 ou B = 7
NOT Representa a expresso NO numa expresso lgica. Por exemplo:
A = 5 AND NOT (A = B)
A igual a 5 e A no igual a B
Para facilitar o entendimento, imagine o operador NOT antes da expresso como se fosse a
palavra NO.

Operadores de String
51

Como j vimos anteriormente, so representados pelo + e pelo &, sendo que o +


fora o clculo, no caso de termos uma das expresses sendo numrica, enquanto o &
fora a concatenao, no caso de termos uma das partes sendo string e outra numrica. Para
maiores detalhes, consulte a seo anterior.

Comandos condicionais e Loops


chegada hora de conhecermos alguns comandos, e vamos comear por alguns que j
esto nos fazendo falta. Comearemos primeiro com os comandos condicionais.
Os comandos condicionais, como o prprio nome diz so comandos que nos permitem
executar blocos de cdigo, apenas quando certas condies forem verdadeiras, ou falsas,
dependendo do caso. Por exemplo, se tivermos um TextBox numa tela de cadastro.
Digamos que esse TextBox servir para o usurio entrar com o nome do cliente, e
porventura o usurio esqueceu de digitar o nome do cliente no TextBox. Imagina-se que
nesse cadastro tem um boto para que possamos gravar os dados. No momento que o
usurio clicar no boto de Gravar, o nome seria gravado em branco. Para isso deveramos,
colocar, no evento Click do boto de gravar um cdigo que exiba uma mensagem dizendo
que o usurio esqueceu de digitar o nome do cliente, e aps isso, mover o foco para o
TextBox correspondente.
Mas o que acontecer se fizermos isso? Toda vez que clicarmos no boto de gravar,
mesmo que o usurio tenha preenchido a TextBox, a mensagem seria exibida. Para resolver
esse problema, teramos que usar os comandos condicionais. Vamos conhec-los:

IF, Then, Elseif, Else, Endif


Testa uma condio e executa determinado cdigo se esta condio for verdadeira. Sua
sintaxe a seguinte:
If <Condio> then
< Cdigo a ser executado se a condio for verdadeira>
Else
<Cdigo a ser executado caso a condio de IF no for verdadeira>
Endif
O Endif encerra o bloco condicional IF.
Onde If representa a palavra SE
Then = ENTO
Else = SENO
52

Endif =Fim Do Comando SE

Vejamos um exemplo:
Dim Numero as integer
Numero = 3
If Numero > 2 then
Msgbox Nmero maior que 2
Else
Msgbox Nmero menor que 2
End if
No caso da condio especificada no comando If, ou seja que 0o nmero seja maior que
2, ento o bloco de cdigo entre If e Else ser executado. No caso da condio ser falsa,
ser executado o bloco de cdigo entre Else e Endif.
Alm do If, Then, Else e Endif, temos tambm o ElseIf. Vejamos a sua sintaxe:
If <Condio> then
< Cdigo a ser executado se a condio for verdadeira>
Elseif <Condio> then
<Cdigo a ser executado, caso a condio especificada no bloco If seja falsa e, a condio
do comando ElseIf seja verdadeira>
Else
<Cdigo a ser executado caso nenhuma das condies forem verdadeiras>
Endif
Como voc pode ver, o comando ElseIf, nos permite inserirmos mais opes condicionais
no comando IF. Quando a condio do comando If for falsa, o programa procura pelo
comando ElseIf, se ele existir. Sendo a condio do bloco ElseIf verdadeira, ele executa o
bloco do ElseIf. Podemos colocar quantos comandos ElseIf quisermos em um Bloco IF.
No caso de nenhuma das condies forem verdadeiras, ser executado o Bloco Else, se ele
existir. importante lembrar, que, por todo o bloco IF, o bloco de cdigo que ser lido
ser o primeiro que a condio for verdadeira, sendo as demais ignoradas, e o programa
passando a executar a partir de Endif.
Dim Numero as Integer
53

Numero = 4
If Numero = 1 then
Msgbox Numero igual a 1
Elseif Numero > 5 then
Msgbox Numero maior que 5
Else
Msgbox Numero no igual a 1 e no maior que 5
End if
No cdigo acima, o comando If testa a varivel Numero, que tem seu valor como 4. A
condio do comando If caso a varivel Numero seja igual a 1. Como ela no , o
programa passa automaticamente para a prxima condio, ou seja, a do comando ElseIf,
que testa a varivel, pra ver se ela maior do que 5. Como o valor da varivel 4, no caso,
no maior que 5, o programa passa novamente para a prxima condio. No nosso
exemplo, no temos mais nenhuma condio. Como nenhuma das condies foi verdadeira,
ele executar o bloco Else, que sempre executado quando nenhumas das condies forem
verdadeiras.
Note que podemos ter quantos ElseIf quisermos em um bloco If, mas apenas um Else,
pois s ele ser executado quando nenhuma das condies forem verdadeiras.
Lembram-se daquele nosso problema do cadastro com o nome do cliente em branco?
O nosso maior problema seria verificar se o TextBox estava vazio, e informar ao usurio
somente quando tivermos certeza que o TextBox est vazio. Vejamos como fazer isso:
Digamos que voc tenha um TextBox chamado TxtCli e Um boto de comando chamado
CmdGravar.
Vamos usar o evento Click do boto. Ficaria assim:

Primeiro, verificamos se o TextBox est vazio, atravs da propriedade Text:


If TxtCli.Text = then
onde representa uma string vazia. Poderamos usar a constante Empty do VB tambm:
If TxtCli.Text = Empty then

54

Se a condio for verdadeira, ou seja, se TxtCli estiver vazia, o bloco de cdigo existente
entre If e Else, no caso do nosso exemplo, ser executado.
MsgBox "Nome do cliente no foi informado"
TxtCli.SetFocus
Exibir uma mensagem ao usurio dizendo que o cdigo do cliente no foi informado,
depois mover o foco para o TextBox.
Em caso da condio de IF no ser verdadeira, executar o bloco ELSE.
Msgbox Cadastro Ok
Informando ao usurio que o cadastro est ok. Por este exemplo podemos notar o quanto os
comandos condicionais facilitam nossa vida. Em continuidade aos comandos condicionais,
veremos mais um.

Select Case
O Select Case funciona de forma semelhante ao IF, mas uma alternativa mais usada no
caso de termos um nmero de opes maiores.
Opo = 3
Select Case Opcao
Case 1
<Bloco de cdigo a ser executado, no caso da varivel opo ser igual a 1>
Case 2
<Bloco de cdigo a ser executado, no caso da varivel opo ser igual a 1>
Case 3
<Bloco de cdigo a ser executado, no caso da varivel opo ser igual a 1>
Case Else
<Bloco de cdigo a ser executado, no caso da varivel opo no se enquadrar em nenhum
dos casos>
End Select
Primeiro, escolhemos que condio iremos testar:

55

Select case Opo


No nosso caso, foi a varivel Opo. Depois, testamos os casos:
Case 1
Note que no necessrio usarmos o nome da varivel no caso. Isso por qu quando
iniciamos o SELECT CASE, j definimos que a expresso que iramos testar seria a
varivel Opo. Ento a linha Case 1 testa se a varivel Opo igual a 1.
Se a varivel Opo no for igual a 1, ela passar para o prximo caso:
Case 2
No sendo a varivel Opo igual a 2, ela passar para o prximo caso, e assim
sucessivamente at chegarmos no CASE ELSE, se ele existir. O CASE ELSE funciona
como o ELSE, do comando IF. Ele ser executado quando nenhum dos casos for
verdadeiro.
O comando END SELECT encerra o SELECT CASE.

Comandos de Lao(Loops)
Os comandos de lao ou loopings so extremamente usados na programao. Fazem que
determinado bloco de cdigo se repita at que uma condio seja ou se torne verdadeira.
Podem ser usados de vrias maneiras. Veremos as formas mais usadas.

Do While, Loop
Este comando executa os comandos existentes entre Do While e Loop enquanto as
condies estabelecidas no comando Do While forem verdadeiras. Sua sintaxe a seguinte.
Do While <Condio>
<Comandos a serem executados no Looping
Loop
Quando o programa encontra o LOOP, ele retorna a linha de DO WHILE, que
reavaliado. No caso da condio no ser mais verdadeira, o programa passa
automaticamente a linha aps o comando LOOP.
Dim Contador as Integer
Contador = 0
Do While Contador < 11
Print Contador
Contador=contador + 1
Loop
56

No cdigo acima, temos uma varivel Contador, que igual a 0, o comando Do While
pede que o Loop se execute at que a varivel contador seja menor que 11. A cada Loop
que se passa a varivel Contador aumenta seu valor em 1. Quanto ela chegar a 11, O
comando Do While avaliar a condio e no caso dela no ser mais menor que 11, o
programa passar automaticamente a prxima linha aps o comando Loop.

Do, Loop While


Neste caso, o comando Do no testa nenhuma condio. Quem vai testar as condies
neste caso o comando Loop. O que quer dizer que aps o comando DO e antes do
comando LOOP, o cdigo ser executado pelo menos uma vez, sendo que somente o
comando LOOP far um teste de condio.
Do
<bloco de cdigo a ser executado>
Loop <Condio>

Do Until, Loop
O Do Until funciona da maneira inversa ao comando Do While. Enquanto o comando
Do While repete o lao(looping) , enquanto determinada condio for verdadeira, o
comando Do Until, repete o looping at que essa condio se torne verdadeira, ou seja, ele
repete a condio enquanto ela no for verdadeira.
Dim Contador as Integer
Contador = 1
Do Until Contador > 11
Print Contador
Contador = Contador + 1
Loop
No exemplo acima, o lao se repetir at que a varivel Contador satisfaa a condio
especificada em Do Until. Ou seja, quando a varivel Contador for maior que 11, ou seja,
quando a varivel
Contador for 12, o ciclo se encerrar.

Do, Loop Until


Quanto a avaliao das condies, o comando Loop Until funciona da mesma maneira
que o Do Until. A diferena est que a condio s testada no comando Loop. Ou seja, o
cdigo existente entre DO e Loop Until obrigatoriamente executado pelo menos uma
vez.
57

Dim Contador as Integer


Contador = 1
Do
Print Contador
Contador = Contador + 1
Loop Until Contador > 11

Contadores
Agora que j vimos os comandos condicionais, passaremos aos contadores. Os
contadores tem inmeras aplicaes em programao. Vamos ao principal comando usado
como contador:

For, Next
O comando For realiza uma contagem entre um intervalo de nmeros especificados.
For <Varivel> = <nmeroinicial> to <numerofinal>
<Bloco de cdigo>
Next
Necessitamos de uma varivel numrica para usarmos o comando For, Next
Dim Contador as Integer
Contador=0
For Contador = 1 to 10
Print Contador
Next
Podemos pedir ao comando FOR que conte de forma diferente atravs do comando STEP.
O comando STEP modifica a forma com que o contador incrementado. Por padro, ele
ser incrementado de 1 em 1. Com o comando STEP podemos configurar do modo que
quisermos.
Dim Contador as Integer
Contador=0
For Contador = 1 to 12 Step 3
Print Contador
Next
No cdigo acima, o contador ir contar at 12, de 3 em 3.

EXIT DO e EXIT FOR


58

Os comandos EXIT DO e EXIT FOR, foram a sada de um loop ou de um contador,


respectivamente.
O comando EXIT DO nos permite forarmos a sada de um loop criado atravs do
comando DO.
Dim Numero as Integer
Numero=0
Do While Numero<10
Print Numero
Numero = Numero +1
If Contador = 5 then
Exit Do
End if
Loop
O cdigo acima sem o comando Exit Do iria contar at 9. Entretanto, temos um desvio
condicional que nos diz que se o nmero for igual a 5, o comando EXIT DO ser
executado, e no entanto, o loop ser quebrado.
O comando EXIT FOR fora a sada de um contador. Vejamos um exemplo com a
mesma funo do cdigo anterior, porm usando um contador:
Dim Contador as Integer
Contador = 1
For Contador = 1 to 9
Print Contador
If Contador = 5 then
Exit For
End if
Next
Bem, j conhecemos o suficiente sobre contadores para podermos colocar tudo isso em
prtica. Ento vamos fazer o seguinte:
- Crie um ListBox com 10 nomes diferentes
- Insira um Boto que servir para procurar determinado nome na lista e dizer se ele
existe ou no
- Sinalize atravs do programa se a pesquisa obteve sucesso ou no.
Ateno:
O exerccio deve ser feito utilizando um contador.

Soluo:
Dim Contador As Integer
59

Dim NaoEncontrado As Boolean


For Contador = 0 To Lista.ListCount - 1
If Lista.List(Contador) = "NomeTal" Then
MsgBox "Encontrado"
NaoEncontrado = False
Exit For
End If
NaoEncontrado = True
Next
If NaoEncontrado = True Then
MsgBox "No Encontrado"
End If

SubProcedimentos
Tambm podem ser chamados de subrotinas, procedimentos ou simplesmente rotinas.
Tem uma funo especfica dentro do projeto. Ou seja, em um projeto podemos ter uma
rotina de cadastro, uma de consulta, impresso, etc.
Um projeto mdio ou grande que no fosse dividido em rotinas seria um verdadeiro
inferno para o programador, e para o usurio tambm. Em vista dos problemas que
acarretaria devido demora na manuteno.
Alm de organizar melhor o projeto, as subprocedimentos podem oferecer o
reaproveitamento de cdigo, muito importante nos dias atuais quando se est sempre
correndo contra o relgio. Os subprocedimentos aceitam parmetros, o que significa que
podemos tratar diferentes valores usando apenas um subprocedimento. Vejamos um
exemplo prtico do que eu estou dizendo.
No nosso exerccio anterior, utilizamos um contador que verificava se determinado nome
existia na lista. Digamos que quisssemos mudar esse nome. Poderamos criar um
subprocedimento passando para ele toda vez que o chamarmos o nome que queremos
procurar. Estaramos passando um parmetro para ele. Podemos colocar vrios parmetros
em um procedimento. Sejam eles variveis, valores ou objetos.
Na verdade, j estamos trabalhando com subprocedimentos desde o incio. Ao codificar
um evento Click de um boto de comando, voc j est trabalhando em um
subprocedimento. A diferena que este j um subprocedimento padro do boto.
Para criarmos um subprocedimento usamos a seguinte sintaxe:
Private Sub <NomeDoProcedimento>(Parmetros)
<Blocos de cdigo do procedimento>
End Sub

60

A palavra Private pode ser substituda por Public, caso precisarmos que o nosso
subprocedimento possa ser acessado por um mdulo externo.
Quanto aos parmetros podem ser passados da mesma forma que declaramos variveis,
com a diferena que no precisamos usar o comando DIM. Esses parmetros funcionam
como variveis dentro do procedimento.
Poderamos criar um subprocedimento para resolver aquele nosso problema anterior:
Public Sub ProcuraNaLista(Nome as String)
Dim Contador As Integer
Dim NaoEncontrado As Boolean
For Contador = 0 To Lista.ListCount - 1
If Lista.List(Contador) = Nome Then
MsgBox "Encontrado"
NaoEncontrado = False
Exit For
End If
NaoEncontrado = True
Next
If NaoEncontrado = True Then
MsgBox "No Encontrado"
End If
End Sub
Note que o nico trabalho que tivemos na alterao do cdigo foi trocar o nome que
procuraramos pela varivel Nome, que ao chamarmos o subprocedimento, ter o nome a
qual informamos no parmetro.
Para chamarmos um subprocedimento, bastar cham-lo pelo nome, com os seus
respectivos parmetros:
ProcurarNaLista(Maria da Silva)
No caso de no existirem parmetros, use apenas o nome do procedimento.
Subprocedimentos criados com o comando Public dentro de um mdulo podem ser
acessados por todo o projeto. Se forem criados com a palavra Private podem ser acessados
somente dentro do mdulo que os criou. Quando me refiro a mdulo que os criou, posso
estar me referindo tanto a um mdulo de cdigo, quanto ao mdulo classe, um formulrio
ou qualquer outro objeto a qual podemos codificar.
Para sairmos de um subprocedimento sem executar os comandos restantes, usamos o
comando Exit Sub:
Public Sub ProcuraNaLista(Nome as String)
Dim Contador As Integer
Dim NaoEncontrado As Boolean
Exit Sub
For Contador = 0 To Lista.ListCount - 1
61

If Lista.List(Contador) = Nome Then


MsgBox "Encontrado"
NaoEncontrado = False
Exit For
End If
NaoEncontrado = True
Next
If NaoEncontrado = True Then
MsgBox "No Encontrado"
End If
End Sub
No cdigo acima, o contador nem chega a ser inciado e o comando Exit Sub j termina a
execuo do subprocedimento, fazendo que todos os comandos do subprocedimento que
estiverem aps o Exit Sub sejam ignorados.

Funes
Sua finalidade retornar um valor, mas tambm podem executar operaes. Temos
vrias funes nativas do Visual Basic, a qual veremos logo mais, mas tambm podemos
construir nossas prprias funes. As funes so declaradas da mesma maneira que os
subprocedimentos, com a diferena que usaremos a palavra FUNCTION no lugar da
palavra SUB.
Private Function <NomeDaFuno>(Parmetros)
<Blocos de cdigo da Funo>
End Function
Assim como os subprocedimentos, podemos usar a palavra Public no lugar de Private
da mesma forma que usamos com os subprocedimentos.
Para facilitar o entendimento das funes, digamos que voc precise de uma funo que
retorne a soma de dois nmeros. Um exemplo muito simples, mas que permite entender
como funcionam as funes de usurio. O cdigo seria o seguinte:
Private Function Soma(Num1 as Integer, Num2 as Integer)
Soma = Num1 + Num2

62

End Function
Primeiro, declaramos a funo com duas variveis(parmetros) que representaro so
nmeros(Num1 e Num2):
Private Function Soma(Num1 as Integer, Num2 as Integer)
Depois, atribumos que Soma ser igual a soma de Num1 e Num2.
Soma = Num1 + Num2
Ao Criarmos uma funo, voc pode automaticamente atribuir qualquer valor a ela, desde
que seja dentro da funo. O Tipo de valor que a Function Soma ter vai depender do
valor que a ela for atribudo. Entretanto, podemos definir esse tipo na declarao da funo:
Private Function Soma(Num1 as Integer, Num2 as Integer) as Integer
Isso far com que a Function Soma aceite apenas valores numricos. Caso seja a ela
atribudo uma string, o Visual Basic gerar um erro em tempo de execuo.
O comando End Function encerra um bloco de funo. O uso das funes em Visual
Basic extremamente til e o limite para o uso de funes a imaginao de cada um. Em
breve, veremos aplicaes prticas e funes mais sofisticadas.

Matrizes
Uma matriz nos possibilita o armazenamento de vrios valores em uma nica varivel.
Isso porque ele possui nveis dentro dela. Para declararmos uma matriz usamos a seguinte
sintaxe:
Dim <NomeMatriz>(<Nmero do maior nvel que existir na matriz>) as <tipo da
varivel
Por exemplo, se quisermos ter uma varivel chamada Nome armazenarmos 3 nomes
diferentes, faramos o seguinte:
Dim Nome(2) as String
Nome(0) = Maria Da Silva
Nome(1) = Jos dos Santos
Nome(2) = Roberto Carlos
importante lembrar que o nmero que vai entre parnteses quando declaramos a matriz
no o nmero de nveis que existir na matriz, pois a matriz por padro sempre inicia com
o nmero zero. Por padro, o nmero de nveis que existir na matriz ser o nmero que
colocarmos entre parnteses menos 1. Entretanto, podemos mudar isso definindo um nvel
inicial e um nvel final dentro da matriz. Para isso fazemos o seguinte:

63

Dim Matriz(1 to 10) as Integer


Como voc pode ver, ao invs de usarmos somente um nmero que ser o nvel mximo
dentro da matriz, especificamos que os nveis existentes sero entre 1 e 10. Ou seja, o
primeiro nvel ser 1 e o ltimo 10. Podemos especificar qualquer nmero inicial e a matriz
sempre existir a partir daquele nmero. Por exemplo, se voc definir para que a matriz
inicie por 2, se tentar usar a matriz como se o nvel 1 existisse, o Visual Basic ir gerar um
erro em tempo de execuo.
No nosso exemplo anterior usamos Dim Nome(2) as String
para declararmos uma matriz de 3 nveis, que ter Nome(0) como primeiro nvel e
Nome(2) como o ltimo nvel.
Existe outra forma de fazer com que o primeiro nvel de uma matriz no seja zero, que
usando o comando Option Base. Com ele podemos definir um valor para ser um valor
inicial de todas as matrizes que forem criadas. O comando Option Base deve ser
adicionado seo General-Declarations:

Se quisermos que todas as matrizes no mdulo que o Option Base for declarado, usaremos
Option Base 1. Se quisermos que iniciem com 2, Option Base 2, e assim sucessivamente.
Todos os nveis dentro da matriz devero ter valores de acordo com o tipo que foi
declarado, a menos que voc declare uma matriz como sendo do tipo Variant.
No lugar do nmero que define o nvel da matriz podemos usar tambm variveis. Essa
prtica muito utilizada para iterar por todos os nveis da matriz, preenchendo-a com
valores. Veja um exemplo:
Dim Matriz(10) as Integer
Dim Contador as Integer
For Contador = 0 to 10
Matriz(Contador) = Contador
Print Matriz(Contador)
Next
No cdigo acima, usamos um contador para iterar pelos nveis da matriz. medida que a
varivel Contador incrementada, atribudo um valor diferente ao prximo nvel. O
comando Print imprime o valor de Matriz(Contador) no formulrio.

64

Matrizes dinmicas
Eu disse aqui que existiam nveis dentro da matriz. Chamei de nveis para facilitar o
entendimento. A partir de agora chamaremos de elementos.
s vezes ns precisamos de uma matriz, mas no sabemos o nmero exato de elemesntos
que ela ter at determinado momento. O Visual Basic nos permite declarar a matriz
omitindo o nmero de elementos que ela ter:
Dim Matriz() as Integer
No entanto, na linha acima declaramos a matriz, mas no criamos nenhum elemesnto
dentro dela. Para criarmos os elementos teramos de usar o comando Redim:
Redim Matriz(10)
O comando Redim funciona de forma semelhante ao comando Dim, porm ele no declara
a varivel, somente especifica o nmero de elementos que ela ter.
Podemos mudar o nmero de elementos quantas vezes quisermos atravs do comando
Redim, entretanto, todos os valores dos elementos existentes sero perdidos:
Dim Matriz() as String
Redim Matriz(2)
Matriz(0) = Carlos
Matriz(1) = Helena
Matriz(2) = Jos
Redim Matriz(3)
Print Matriz(0)
Print Matriz(1)
Print Matriz(2)
O cdigo seguinte primeiro declara a matriz atravs do comando Dim:
Dim Matriz() as String
Depois especifica que a matriz dever ter 2 elementos, atravs do comando Redim:
Redim Matriz(2)
Depois, definimos valores para esses elementos:
Matriz(0) = Carlos
Matriz(1) = Helena
Matriz(2) = Jos
Depois, redimensionamos a matriz novamente, para que tenha um elemento a mais:

65

Redim Matriz(3)
E mandamos inprimir:
Print Matriz(0)
Print Matriz(1)
Print Matriz(2)
Crie um projeto e coloque esse cdigo no evento Activate do formulrio e rode o
projeto. Voc ver que nada foi impresso. Voc deve estar se perguntando por qu o
programa no imprimiu nada sendo que definimos valores para esses elementos:
Matriz(0) = Carlos
Matriz(1) = Helena
Matriz(2) = Jos
A resposta :
O comando Redim redimensiona a matriz, mas apaga todos os valores existentes nos
elementos:
Redim Matriz(3)
No nosso caso, ns definimos os valores e depois redimensionamos a matriz para que tenha
mais um elemento. Foi a que os valores existentes nos elementos se perderam. Porm,
existe um meio de redimensionar a matriz preservando os valores dos elementos anteriores,
e esse meio usando a clusula Preserve junto com o comando Redim:
Redim Preserve Matriz(3)
Troque a linha Redim Matriz(3) no projeto pela linha acima. Rode o projeto. Voc ver
que dessa vez os valores foram preservados, graas clusula Preserve.

Matrizes Muldimensionais
Matriz multidimensional na verdade uma matriz dentro de outra.
Usaremos no exemplo a seguir o comando Option Base para forar as matrizes a iniciarem
com 1, facilitando assim o entendimento.
Option Base 1
Dim Caixa(3,2) as String
Caixa(0,0)=Segunda-Feira

66

Caixa(1,0)=Tera-Feira
Caixa(2,0)=Quarta Feira
Caixa(0,1)=R$ 100,00
Caixa(1,1)=R$ 50,00
Caixa(2,1)=R$ 200,00
primeira vista, isso complica um pouco a cabea, no entanto, pode ser bem mais simples
se, ao criarmos a matriz imaginarmos uma tabela:

Linha 1
Linha 2
Linha 3

Coluna 1
Segunda-Feira
Tera-Feira
Quarta-Feira

(1,1)
(2,1)
(3,1)

Coluna 2
R$ 100,00
R$ 50,00
R$ 200,00

(1,2)
(2,2)
(3,2)

Essa a representao grfica da matriz Caixa. Como voc pode ver, adicionamos 3
elementos e esses elementos, que so representados pelas linhas, e esses elementos foram
divididos em 2, representados pelas colunas. Entretanto, podemos ter muito mais
subdivises do que isso. Por exemplo:
Option Base 1
Dim Matriz(3,2,5) as String
No exemplo acima, temos 3 elementos, que se subdividem em 2, e cada um desses 2, se
subdivide em 5 elementos.

Lgica de programao
Eu diria que lgica de programao a essncia da programao. Um programador
poderia conhecer inmeros comandos, funes e objetos, mas se no tivesse lgica de
programao nada adiantaria. J usamos uma certa lgica de programao em vrios
exemplos anteriores, no entanto, agora vamos nos aprofundar mais nela.
A lgica de programao maneira que usamos os comandos, funes, variveis,
operadores e os demais recursos da linguagem visando resolver os problemas. Pois os
comandos e funes no fazem nada sozinho. voc que vai criar toda estrutura. Cada
programador desenvolve seu prprio estilo. Alguns fazem uma determinada tarefa de uma
maneira mais fcil, outros fazem de uma maneira mais complicada. Isso depende da lgica
de cada um.
So muitos os caminhos para realizar a mesma tarefa. Um professor uma vez me disse
que, o programador deve sempre, escolher o caminho mais difcil. Eu diria o
seguinte.Escolha o caminho que oferea:
- Menor nmero de linhas de cdigo

67

- Melhor desempenho na execuo


- Melhor reaproveitamento do cdigo
Porm, nenhum desses fatores dever influenciar no perfeito funcionamento do programa.
O por qu do menor nmero de linhas possvel como citei acima que, quanto menos
linhas tiverem o programa, menos linhas o programa ter de ler, e mais rpido ficar.
O melhor desempenho tambm uma conseqncia do nmero de linhas existentes no
programa, mas tambm tem a ver com certos comandos, funes ou objetos que tem
diferentes desempenhos.
Por melhor reaproveitamento do cdigo seria criar funes e subprocedimentos que
possam ser usados por outros programas no futuro.
Usar a lgica de programao resolver problemas de forma rpida e eficaz, indo
diretamente a raiz do problema.

As bibliotecas
As bibliotecas, tambm chamadas de referncias, so representadas por um arquivo de
sistema(um arquivo com extenso dll,old,tlb,ocx,etc). Ao anexarmos uma biblioteca em
nosso sistema teremos a nossa disposio o conjunto de objetos pertencentes a essa
biblioteca. V no menu Projects e selecione References. Ir abrir a seguinte janela:
Nesta lista existe uma
variedade de bibliotecas
diferentes. Para adicionarmos
ao projeto, s marcar a caixa
de seleo ao lado
O boto Browse nos
possibilita adicionar mais
bibliotecas procurando por um
arquivo de sistema.
Note que ao abrirmos essa janela, j existem quatro bibliotecas
selecionadas:
Aqui exibido
o nome e
caminho do arquivo de
- Visual Basic For Aplications
sistema responsvel pela
- Visual Basic Runtime and Procedures
biblioteca selecionada
- Visual Basic Objects ans Procedures
- Ole Automation
Todas elas representam os comandos, funes e objetos nativos do Visual Basic e no
devem ser retiradas do projeto.
Com as bibliotecas podemos fazer quase tudo que imaginarmos. Existem bibliotecas que
nos possibilitam a conexo com diferentes bancos de dados, bibliotecas que nos
possibilitam executar vdeo, msica, etc...

68

Ao declarar uma varivel ou objeto, voc j deve ter notado que depois da palavra da
palavra chave AS sempre abre uma lista com os tipos de variveis e tipos de objetos
acessveis ao projeto. Quando adicionamos uma nova biblioteca, novos objetos sero
adicionados a essa lista, e novos objetos podero ser usados pelo projeto.

Entretanto, tambm podemos visualizar todos os objetos acessveis ao sistema usando o


Object Browser. Tecle F2.
Abrir uma janela como a da figura abaixo.

O Object Browser exibe todos os objetos, mdulos, e conjunto de constantes acessveis


ao projeto; assim como seus respectivos mtodos, funes e constantes.
Ele tambm exibe uma breve descrio (em ingls) sobre a funo do item selecionado.
Podemos usar qualquer um desses itens que aparecem no Object Browser. Se algum
item que quisermos no estiver a, devemos adicionar a respectiva biblioteca como vimos
anteriormente.

Comandos, funes e objetos nativos

69

Seria impossvel fazer uma apostila de um tamanho mdio que contenha todos os
comandos, mtodos e objetos nativos do Visual Basic. Pois temos mdulos financeiros, de
sistema, grficos e muitos outros com comandos e funes. Alm disso, temos uma
variedade de objetos para as mais diferentes funes. Tentarei aqui descrever as funes
mais importantes que so usadas com freqncia em aplicativos comerciais.
Quanto aos comandos, gostaria de abordar aqui apenas mais um, que se refere abertura,
leitura e gravao em arquivos e, embora este comando no seja usado com muita
freqncia, pode nos fazer falta e, possivelmente poderemos fazer manuteno em um
sistema que tenha esse comando. Alm disso, em muitos aplicativos usado um arquivo de
registro (.INI ) que deve ser lido com o comando Open.

Comando Open
Com a evoluo dos bancos de dados praticamente no se usa mais o comando Open
para armazenar dados em arquivos. O comando Open serve para abrirmos um arquivo ou
at mesmo cri-lo. Sua sintaxe a seguinte:
Open <caminho e nome do arquivo.> For <Tipo> <tipo de bloqueio> <as <Nmero de
arquivo>
Caminho e nome de arquivo - Obrigatrio. um caminho vlido seguido do nome do
arquivo. Exemplo:
C:\Arquivos\Teste.Txt
Tipo Palavra chave que definir o tipo de abertura de arquivo que estamos fazendo:
Append, Binary, Random, Input e OutPut. Se esta palavra chave for omitida o arquivo
ser aberto no modo randmico(Random).
Tipo de Bloqueio- Opcional. Determina o tipo de bloqueio em que ser aberto o arquivo.
Shared, Lock Read, Lock Write e Lock Read Write.
Nmero de arquivo - Um nmero de arquivo disponvel no intervalo de 1 a 511. Podemos
usar a funo Freefile para obter o prximo nmero disponvel.
Vamos agora ver alguns exemplos:
O cdigo a seguir abre o arquivo TESTFILE no modo de entrada seqencial.
Open "TESTFILE" For Input As #1
' Fecha antes de reabrir em outro modo.
Close #1
Este exemplo abre o arquivo no modo Binary somente para operaes de gravao.

70

Open "TESTFILE" For Binary Access Write As #1


' Fecha antes de reabrir em outro modo.
Close #1
O exemplo a seguir abre o arquivo no modo Random. O arquivo contm registros do tipo
Record definido pelo usurio.
Type Record ' Define o tipo definido pelo usurio.
ID As Integer
Name As String * 20
End Type
Dim MyRecord As Record ' Declara a varivel.
Open "TESTFILE" For Random As #1 Len = Len(MyRecord)
' Fecha antes de reabrir em outro modo.
Close #1
Este exemplo de cdigo abre o arquivo para sada seqencial; qualquer processo pode ler
ou gravar no arquivo.
Open "TESTFILE" For Output Shared As #1
' Fecha antes de reabrir em outro modo.
Close #1
Este exemplo de cdigo abre o arquivo no modo Binary para leitura; outros processos no
conseguem ler o arquivo.
Open "TESTFILE" For Binary Access Read Lock Read As #1
Close #1
Este exemplo abre o arquivo para entrada seqencial usando a funo Freefile para retornar
o prximo nmero de arquivo disponvel
Open Teste.txt For Input as Freefile
Close Freefile
Como voc deve ter notado no cdigo acima temos um comando que voc no conhece:
o Close. Usamos para fechar um arquivo informando apenas o nmero antecipado por um
#.
At agora vimos apenas como abrir os arquivos e fech-los. Vamos agora conhecer
comandos que nos permitem gravar e ler dados de arquivos. No vamos nos aprofundar
muito nesta parte devido ao pouco uso que faremos desses recursos. No entanto vamos
aprender o que precisamos: Gravar e ler dados de um arquivo.
71

Input O comando Input nos possibilita ler dados de um arquivo aberto como seqencial
e jogar os dados em uma varivel. Exemplo:
Input #1, Nome
A linha acima ir ler uma linha do arquivo de nmero 1 aberto como seqencial e jogar
o contedo da respectiva linha para a varivel Nome. No caso de querermos que ele leia a
prxima linha, devemos usar novamente a instruo Input. Se no existir prxima linha e a
instruo Input for encontrada, o Visual Basic retornar um erro dizendo que foi
encontrado o fim do arquivo.
Vamos colocar um pouco do que aprendemos em prtica. Primeiramente crie um arquivo
no bloco de notas. Insira qualquer texto na primeira linha desse arquivo e o salve-o com o
nome Teste.Txt no drive C.
Depois crie um formulrio e insira um TextBox com o nome de TxtLinha. No evento
Load do formulrio coloque o seguinte cdigo:
Dim A As String
Open "c:\Teste.txt" For Input As #1
Input #1, A
TxtLinha.Text = A
Close #1
Rode o projeto.
Note que o TextBox do formulrio obteve o contedo da primeira linha do arquivo texto
que criamos. Analisando o cdigo acima, vejamos o que fizemos:
Declaramos uma varivel do tipo string denominada A.
Dim A As String
Abrirmos o arquivo Teste.Txt no modo seqencial e usamos o nmero 1 para referencilo.
Open "c:\Teste.txt" For Input As #1
Lemos uma linha do nosso arquivo e jogamos seu contedo para a varivel A. Como o
arquivo recm foi aberto, ele vai ler a primeira linha.
Input #1, A
Atribumos o valor da varivel A nossa TextBox.
Fechamos o arquivo.

72

Close #1
Conseguimos o que precisamos. Lemos os dados de um arquivo e o bicho nem foi to
feio como parece. Devo lembrar que h vrias outras maneiras de fazer isso que ilustrei
aqui e maneiras bem mais complicadas inclusive. No entanto, essa resolve a maioria dos
nossos problemas. No caso de termos que ler mais linhas de um arquivo basta repetir a
instruo Input para que ele leia automaticamente a prxima linha desde que o arquivo
ainda no tenha sido fechado.
O exemplo a seguir ilustra um eficaz processo para lermos todas as linhas de forma
seqencial e jogar os dados para um TextBox.
Dim A As String
Dim Texto As String
Open "c:\teste.txt" For Input As #1 'Abre o arquivo para entrada.
Do While Not EOF(1)

' Faz o loop at o fim do arquivo.

Input #1, A
Texto = Texto & A Concatena a varivel Texto com a ltima linha lida
Loop
TxtLinha.Text = Texto Joga o contedo da varivel Texto para o TextBox
Close #1

' Fecha o arquivo.

Gravando dados em um arquivo


H vrios modos de gravarmos dados em um arquivo. Veremos 2. O primeiro que
veremos abrindo o arquivo como OutPut, e usando o comando Print # para gravar os
dados no arquivo. Esta prtica a mais usada quando o nosso arquivo tiver apenas uma
linha e funciona assim:
Open "c:\teste.txt" For Output As #1
Print #1, "Dados a serem gravados"
Close #1
Simples, no?
Porm quando temos mais de uma linha em um arquivo e usamos o comando Print # todas
as outras linhas so apagadas.
No caso de termos mais de uma linha em um arquivo devemos abrir o arquivo como
Random e usar o comando Put # para gravar os dados, como o exemplo a seguir:

73

Open "c:\teste.txt" For Random As #1


Put #1, 5, "Testando o comando Put"
Close #1
get
A novidade no cdigo acima o comando Put #. A esse comando devemos fornecer
primeiramente o nmero do arquivo, depois o nmero do registro, ou seja, a linha onde ser
inserido os dados, e depois os dados que sero inseridos.
Bem, j sabemos como ler dados de um arquivo e gravar dados em um arquivo. O meu
objetivo em abordar esses comandos era o de passar ao aluno, meios para isso ser feito. No
entanto, no tratei aqui alguns comandos que julgo totalmente desnecessrio e fogem do
objetivo do nosso curso. Alm disso, existem muitos objetos do Visual Basic que fazem
essas tarefas com muito mais simplicidade e clareza.
Caso o aluno ainda tenha curiosidade em saber mais sobre comandos de leitura e
gravao de arquivos pode consultar o Help do Visual Basic.

Funes Internas
Representam todas as funes nativas do Visual Basic. Temos funes de manipulao de
strings, nmeros, datas, objetos, tratamento de erros e muitas outras. Temos um nmero
muito grande de funes internas.
Tentarei aqui abordar as mais teis e mais usadas.

Funes numricas
ABS: Retorna o valor absoluto de um nmero(positivo).
Abs(Expresso numrica)
Print Abs(-30)
retornar 30
ATN: Retorna o arco-tangente de um nmero.
Atn(Expresso numrica)
COS: Calcula o cosseno de um ngulo
Cos(<expressoNumrica>)
FIX: Retorna a parte inteira de um nmero, ignorando as casas decimais, se houver.
No faz arredondamento
Fix(<expressoNumrica>)
Print (10.2)
Retornar 10
HEX: Retorna a representao hexadecimal de um nmero decimal.
Hex(<expressoNumrica>)
74

INT: Retorna a parte inteira de um nmero, ignorando as casas decimais, se houver.


No faz arredondamento. Se o argumento for um nmero negativo ser incrementado em
um.
INT(<expressoNumrica>)
Print Int(10.2)
Retornar 10
Print Int(-10.2)
Retornar -11
LOG: Calcula o logaritmo natural de um nmero
LOG(<expressoNumrica>)
RND: Retorna um nmero randmico, ou seja, escolhe um nmero aleatoriamente.
Rnd[(<expressoNumrica>)]
SGN: Retorna -1 se o argumento for um nmero negativo, e 1 se for um nmero
positivo.
Sgn(<expressoNumrica>)
SIN: Calcula o seno de um ngulo.
Sin(<expressoNumrica>)
SQR: Calcula a raiz quadrada de um nmero.
Sqr(<expressoNumrica>)
TAN: Calcula a tangente de um ngulo.
Tan(<expressoNumrica>)

Funes de String
INSTR: Retorna a posio da primeira ocorrncia de uma seqncia de caracteres
dentro de outra
Varivel = InStr ({<posioInicial>,] <string>,
<SubStringAPesquisar>[, <MtodoDeComparao])
Posio Inicial:
Expresso numrica que define a posio inicial de cada
pesquisa. Se omitido, a pesquisa comea na posio do primeiro caractere.. Este argumento
necessrio se o Mtodo de Comparao for especificado.
String :
Expresso de seqncia de caracteres que est sendo pesquisada.
SubStringAPesquisar :
Expresso de seqncia de caracteres procurada.
MtodoDeComparao : Especifica o tipo comparao de seqncias de
caracteres. Este argumento pode ser omitido, pode ser 0 ou 1. Especifique 0 (padro) para
realizar uma comparao binria. Especifique 1 para realizar uma comparao textual que
75

desconsidere maisculas/minsculas. Se este argumento for omitido, a configurao de


Option Compare determinar o tipo de comparao.
Print InStr(1,Visual Basic,a)
Imprimir 5
Caso a funo InStr no encontre nenhuma ocorrncia da substring que estamos
pesquisando ela retornar 0.
LCASE: Converte todas as letras maisculas de uma string para minsculas.
Lcase (<string>)
Print Lcase(VISUAL BASIC)
Imprimir visual basic
LEFT: Retorna uma quantidade de caracteres que se encontra da esquerda para a
direita.
VarivelString = Left(<string>, <QuantidadeDeCaracteres>)
Print Left(Visual Basic,3)
Imprimir Vis
LEN: Retorna o nmero de caracteres de uma expresso String ou nmero de bytes
requerido para armazenar uma varivel.
VarivelNumrica = Len (ExpressoCaractere>)
Print Len(Maria)
Imprimir 5
LTRIM: Remove os espaos em branco esquerda de uma String.
VarivelString = Ltrim (<ExpressoString>)
MID: Retorna uma Substring de uma String, ou seja, retorna um nmero
especificado de caracteres de uma seqncia de caracteres.
SubString=Mid(<string>,<posioInicial>[, <quantidadeDeCaracteres>])
String :
Expresso de seqncia de caracteres a partir da qual os caracteres
so retornados.
PosioInicial:
Posio de caractere em String na qual a parte a ser
considerada inicia. Se Posio Inicial for maior do que o nmero de caracteres em String,
Mid retorna uma seqncia de caracteres de comprimento zero.
QuantidadeDeCaracteres: Nmero de caracteres a serem retornados. Se omitidos ou
se o nmero de caracteres do texto for inferior ao QuantidadeDeCaracteres (inclusive o
caractere em PosioIncial), sero retornados todos os caracteres desde a PosioInicial at
o final da seqncia de caracteres.
Print Mid("Jos da Silva Santos",6,8)
76

Valor Impresso: da Silva


Na string Jos da Silva Santos a partir da 6 posio com um comprimento de 8
caracteres.
RIGHT: Retorna uma substring com os caracteres que se encontram da direita para
a esquerda dentro de uma expresso String.
VarivelNumrica=Right([<ExpressoString>, <QuantidadeDeCaracteres>)
Print Right(Jos Da Silva,5)
Valor Impresso:Silva
RTRIM: Remove os espaos direita em uma String.
Rtrim(<string>)
SPACE: Retorna uma String com uma determinada quantidade de espaos vzios.
Space(<quantidadeDeCaracteres>)
STR: Retorna a representao de um nmero como uma String.
Str (<ExpressoNumrica>)
STRCOMP: Compara duas expresses Strings como se fosse nmeros.
StrComp(<string>,<string>[,Comparao>])
Comparao: Especifica o tipo de comparao de seqncias de caracteres. Este
argumento pode ser omitido, pode ser 0 ou 1. Especifique 0 (padro) para fazer uma
comparao binria. Especifique 1 para fazer uma comparao de texto.
Valores de retorno da funo: -1 quando a primeira String for menor que a Segunda,
0 quando forem iguais e 1 quando a primeira String for maior que a segunda.
Print StrComp("1", "2")
Retornar -1
Print StrComp("2", "1")
Retornar 1
Print StrComp("2", "2")
Retornar 0
STRING: Repete um determinado caractere a quantidade de vezes estabelecido na
funo.
String = String (<QuantidadeDeCaracteres>, <caracteres>)
Print String(30,"*")
Valor Impresso: ***************
TRIM: Remove os espaos esquerda e direita de uma string.
VarivelString = Trim(<String>)
UCASE: Converte uma expresso String para maisculas.
Ucase (<string>)
77

Print Ucase(Visual Basic)


Valor Impresso: VISUAL BASIC

Funes de Data e Hora


DATE: Retorna a data corrente do sistema operacional.
VarivelData = Date
DATEADD: Incrementa uma data nos dias, meses ou anos especificados.
DateAdd(<Intervalo>, <Incremento>,<ExpressoData>)
Retorna uma Variant que contm uma data qual foi adicionado um determinado
intervalo de tempo.
<Intervalo> Expresso de seqncia de caracteres que o intervalo de tempo que
voc quer adicionar. Tipos de caracteres usados:
yyyy Ano
q
Trimestre
m
Ms
y
Dia do ano
d
Dia
w
Dia da semana
ww Semana
h
Hora
n
Minuto
s
Segundo
<Incremento>
Expresso numrica que o nmero de intervalos que voc
quer adicionar. Pode ser positivo (para obter datas no futuro) ou negativo (para obter datas
no passado).
<ExpressoData> Data que est sendo adicionada.
Print DateAdd("d", 2, "28/2/2006")
Imprimir 02/03/2006
DATEDIFF: Calcula o intervalo entre duas datas e retorna um nmero
representando esse intervalo.
VarivelData=DateDiff(<intervalo>, <expressoData1>, <expressoData2>)
<Intervalo> Expresso de seqncia de caracteres, que o intervalo de tempo que
voc usa para calcular a diferena entre uma data e outra.
O argumento intervalo tem estas configuraes:
yyyy Ano
q
Trimestre

78

m
y
d
w
ww
h
n
s

Ms
Dia do ano
Dia
Dia da semana
Semana
Hora
Minuto
Segundo

<ExpressoData1 e 2> Duas datas que voc quer usar no clculo.


Print DateDiff("d", "01/01/2001", "10/01/2001")
Imprimir 9
A funo DateDiff sempre calcula o intervalo com base na configurao que voc
escolher em <Intervalo>. No exemplo acima, escolhemos d, o que far que a funo
calcule a diferena com base nos dias.
Se a expresso Data1 for uma data posterior a Data2 a funo retornar um
nmero negativo.
DATEPART: extrai de uma determinada data uma parte dela relativo a dia, ms,
semana, quinzena, etc.
DatePart(<intervalo>, <expressoData>)
Intervalo pode ser:
yyyy Ano
q
Trimestre
m
Ms
y
Dia do ano
d
Dia
w
Dia da semana
ww Semana
h
Hora
n
Minuto
s
Segundo
Print DatePart("d", "24/02/2006")
Imprimir 24
DATESERIAL: Retorna uma data para um dia, ms e ano especificados, ou seja,
monta a data com base nos argumentos especificados.
VariavelData = DateSerial(<ano>, <ms>, <dia>)
Print DateSerial("06", "02", "24")
Valor Impresso: 24/02/2006
DATEVALUE: Retorna a data especificada numa string, ou seja, converte uma
varivel String para o tipo Data.
DateValue(<VarivelStringDeData>)
79

Print DateValue("01/01/2001")
Valor Impresso: 01/01/2001
DAY: Retorna o dia do ms referente a uma data.
Day(<expressoData>)
Print Day("01/01/2001")
Valor Impresso: 1
HOUR: Retorna a hora de uma expresso de data e hora.
Hour(<ExpressoHora>)
Print Hour("11:33:02")
Valor Impresso: 11
MINUTE: Retorna o minuto de uma expresso de data e hora.
Minute(<ExpressoHora>)
MONTH: Retorna o ms de uma data.
Month(<ExpressoData>)
NOW: Retorna a data e a hora correntes do sistema operacional.
Now
Print Now
Imprimir a date e hora corrente no momento em que foi executada a funo.
SECOND: Retorna os segundos de uma expresso de data e hora.
VarivelNumrica = Second(<ExpressoHora>)
TIME: Retorna a hora corrente do sistema operacional.
Time
Print Time
Imprimir a hora corrente no momento em que foi executada a funo.
TIMER: Calcula a quantidade de segundos passados desde a meia noite.
Timer
TIMEVALUE: Retorna a hora especificada numa string, ou seja, converte uma
String cujo contedo esta no formato de hora para uma varivel tipo Data e Hora.
TimeValue(<ExpressoStringDeHora>)
WEEKDAY: Retorna o dia da semana de uma data, ou seja, seu numero
correspondente: 1 para Domingo at 7 para Sbado.
WeekDay(<ExpressoData>)
YEAR: Retorna o ano de uma data.
Year(<ExpressoData>)

80

Funes de converso
CBOOL: Converte uma expresso para um valor lgico (True ou false). Se o
argumento for um zero, retornar False, caso contrrio ser True.
CBool(<expresso>)
Cbool(1)
Retornar True
Cbool(0)
Retornar False
Cbool(1 = 2)
Retornar False. Pois 1 no igual a 2.
Dim A as Integer
Dim B as Integer
A=5
B=5
Print Cbool(A=B)
Imprimir True. Pois o valor da varivel A igual o valor da varivel B. Portanto, a
comparao verdadeira.
CBYTE: Converte uma expresso para um tipo Byte.
cbyte(<expresso>)
Print CByte(100.32)
Valor Impresso: 100
Print Cbyte(450)
O Visual Basic retornar um erro porqu expresses byte no podem ser maiores
que 255.

CCUR: Converte uma expresso numrica para um tipo-moeda.


Ccur(<expresso numrica>)
CDATE: Converte uma expresso para um tipo Data. Entretanto, esta converso se
concretizar desde que a expresso usada como argumento seja mesmo no formato de uma

81

data, ou seja, dia/ms/Ano. Se pedirmos para fazer converso da palavra teste para data
ser retornado um erro.
Cdate(<expresso>)
Print Cdate(01/01/2001)
Valor Impresso: 01/01/2001
A funo CDate retornar erro sempre que informarmos uma expresso que no
resulte em uma data vlida.

CDBL: Converte uma expresso numrica em um nmero de ponto flutuante de


preciso dupla. Um nmero de ponto flutuante de preciso dupla um dado do tipo
Double.
Cdbl(<expresso numrica>)
CINT: converte uma expresso numrica em um nmero inteiro(Integer). Faz
arredondamento.
CInt(<expresso numrica>)
Print CInt(32.30)
Valor Impresso: 32
CLNG: Converte uma expresso numrica em um nmero inteiro longo(Long).
CLng(<expresso numrica>)
Print CInt(32.30)
Valor Impresso: 32
CSNG: Converte uma expresso numrica em um nmero de ponto flutuante de
preciso simples(Single).
CSng(<expresso >)
CSTR: Converte uma expresso numrica, data ou outra em uma string (texto).
CStr(<expresso>)
Cstr(33)
Retornar 33
CVAR: Converte uma expresso de qualquer tipo para o tipo variante.
Cvar(<expresso>)
STR: Converte um valor numrico para o tipo String (texto). Valido somente para
argumentos numricos.
Str(<expressoNumrica>)
Str(45)
Retornar 45
STRCONV: Retorna uma string convertida de acordo com o tipo de converso
especificado.
82

Strconv(<ExpressoString>, <TipoDeConverso>)
Tipos de converso mais importantes que podemos usar:
vbUpperCaseConverte toda a expresso em letras maisculas.
vbLowerCase
Converte toda a expresso em letras minsculas.
vbProperCase
Converte somente a primeira letra em maiscula e o restante
em minsculo.
Print StrConv("visual basic", vbUpperCase)
Imprimir VISUAL BASIC
Print StrConv("visual basic", vbLowerCase)
Imprimir visual basic
Print StrConv("visual basic", vbProperCase)
Imprimir Visual Basic
ASC: Retorna o cdigo ANSI do primeiro caractere de uma String.
Asc(<string>)
Print Asc("A")
Valor Impresso: 65 (Numero correspondente na tabela ASCII da letra A.)
CHR: Retorna o caractere correspondente ao cdigo na tabela ASCII
Chr(<cdigoDoCaractere>)
Print Chr(65)
Valor Impresso: A
VAL: Converte uma String com caracteres numricos em uma varivel nmerica.
Val(<stringNumrica>)
Val(33)
Retornar 33

Funes para gerenciamento de matrizes


ARRAY: Retorna um Array do tipo Variant.
ArrayVariant = Array (<ValoresDosElementos>)
Quando me refiro Array, estou me referindo a uma matriz propriamente dita. O
que podemos dizer sobre o comando Array que ele transforma uma varivel em uma
matriz.

83

ValoresDosElementos: consiste de uma lista delimitada por vrgulas, separando


assim os valores dos elementos. O nmero de elementos que a matriz ter determinado
pelo nmero de valores que ela ter.
Dim Dias as Variant
Dias = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb")
Print Dias(2)
Print Dias(4)
Valor Impresso: Ter
Valor Impresso: Qui
A funo Array segue as mesmas regras de declarao de matrizes e obedece os
argumentos selecionados em Option Base.
LBOUND: Retorna o menor ndice de uma matriz.
Lbound(<NomeDaMatriz>)
Dim Dias As Variant
Dias = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb")
Print LBound(Array)
Imprimir 0
UBOUND: Retorna o maior ndice de uma matriz.
VarivelMatriz = Ubound(<NomeDaMatriz>])
Dim Dias As Variant
Dias = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb")
Print UBound(Dias)
Imprimir 6

Funes lgicas
IIF: Analisa uma expresso lgica, e retorna valores para quando for falso ou
verdadeiro.
IIF (<ExpressoLgica>,<ExpressoParaVerdadeiro>, <ExpressoParaFalso>)
Print IIf(2 > 1, "2 maior que 1", "1 maior que 2")
Imprimir 2 maior que 1
A funo Iff analisa a expresso lgica informada em <ExpressoLgica> e caso a
expresso seja verdadeira, retorna o valor contido em <ExpressoParaVerdadeiro>, caso
contrrio retorna o valor contido em <ExpressoParaFalso>.

84

SWITCH: Avalia uma lista de expresses e retorna o valor associado quela


primeira avaliada como verdadeira.
Switch(Expr1, Valor1[, Expr2, Valor2 , Expretc, Valoretc])
Expr :
Valor :

Expresso variant que voc quer avaliar.


Valor ou expresso que retornado se a expresso correspondente for

True.
Print Switch(1 > 2, "1>2", 3 > 3, "3>3", 2 > 1, "2>1",5.3,5>3)
Imprimir 2>1
A funo Switch analisa cada uma das expresses e retorna o valor contido em
<Valor> da primeira expresso correspondente que seja verdadeira . A funo Switch deve
ser composta por pares de expresses e valores de retorno. Portanto no podemos passar
expresses sem informar os respectivos valores de retorno. Se isso for feito, o Visual Basic
retornar um erro em tempo de execuo.

Funes de Disco
CURDIR: Retorna o diretrio corrente.
CurDir[(<drive>)]
Print CurDir("C:")
Imprimir o caminho completo do diretrio corrente
DIR: Procura por um arquivo especificado e retorna seu nome caso o mesmo seja
encontrado. Caso no encontre retorna Null(Nulo). Podemos procurar arquivos por
atributos tambm.
Dir[(Nomedocaminho[, Atributos])]
Nomedocaminho(Obrigatrio) :Expresso de seqncia de caracteres que
especifica um nome de arquivo e pode incluir diretrio ou pasta e unidade de disco. Se o
nome do caminho ou o arquivo especificado no for encontrado retornado uma string
vazia (Empty).
Atributos(Opcional) :Constante ou expresso numrica que especifica atributos de
arquivo. Se omitido, todos os arquivos normais que tiverem Nomedocaminho
correspondente so retornados.
As configuraes do argumento Atributos so:
vbNormal
0
Normal.
vbHidden
2
Oculto.
vbSystem
4
Arquivo de sistema,.
vbVolume 8 Etiqueta de volume; se especificada, todos os outros atributos so
ignorados.
vbDirectory 16
Diretrio ou pasta.
Exemplo:

85

If Dir("c:\tesste.txt") = "" Then


MsgBox "Arquivo no existe"
End If
O exemplo acima funcionaria da mesma forma se usssemos a palavra Empty, que
representa vazio no lugar de :
If Dir("c:\teste.txt") = Empty Then
MsgBox "Arquivo no existe"
End If
Use a funo Dir para verificar se determinados arquivos, vitais para ao
funcionamento do sistema, existem.
FILEDATETIME: Retorna a data e a hora da ltima atualizao do arquivo.
FileDateTime(<NomeArquivo>)
FILELEN: Retorna o tamanho do arquivo em bytes.
FileLen(<NomeArquivo>)
GETATTR: Verifica os atributos de um arquivo ou diretrio.
GetAttr(<NomeArquivo>)
Veja os valores de retorno desta funo:
0
1
2
4
16
32

vbNormal
vbReadOnly
vbHidden
vbSystem
vbDirectory
vbArchive

Normal.
Somente Leitura.
Oculto.
Arquivo de sistema
Diretrio ou pasta.
O arquivo foi modificado desde o ltimo backup.

Print GetAttr("C:\windows\system32\kernel32.dll")
Imprimir 32

Funes de Teste
ISARRAY: Testa se uma varivel uma matriz
IsArray(<varivel>)
ISDATE: Testa se o argumento pode ser convertido para uma data. Esta data deve
estar dentro dos padres de data.
IsDate(<expresso>)
ISEMPTY: Verifica se uma varivel string j foi iniciada.

86

IsEmpty retornar True se a varivel estiver iniciada; caso contrrio retornar


False. Se a expresso contiver mais de uma varivel, o retorno ser sempre False.
IsEmpty(<expresso>)
ISERROR: Testa se uma expresso um valor de erro.
IsError(<expresso>)
ISMISSING: Testa se um argumento opcional foi passado como parmetro para
uma procedure ou funo.
IsMissing(<NomedoArgumento>)
ISNULL: Testa se uma varivel possui valor nulo.
IsNull(<Expresso>)
ISNUMERIC: Testa se o argumento pode ser convertido para um nmero.
IsNumeric(<Expresso>)
Print IsNumeric(AB)
Imprimir False
Print IsNumeric(10)
Imprimir True
ISOBJECT: Testa se uma expresso referencia a um objeto vlido.
IsObject(<Expresso>)
VARTYPE: Retorna o tipo de varivel especificada como argumento:
VarType(<Varivel>)
Retorna os valores abaixo:
0
Empty (No iniciada).
1
Null Nenhum dado vlido.
2
Inteiro (Integer).
3
Inteiro por extenso (Long)
4
Nmero de ponto flutuante de preciso simples (Single).
5
Nmero de ponto flutuante de preciso dupla (Double).
6
Moeda (Currency).
7
Data (Date).
8
Seqncia de caracteres textos (String).
9
objeto de Automao OLE (Object).
10
Erro (Error).
11
Booleano Boolean).
12
Variant (usada somente com matrizes de Variantes).
13
Um objeto que no seja de Automao OLE (DataObject).
17
Byte
8192 Matriz (Array).
Exemplo:

87

Dim A As Integer
A = 220
If VarType(A) = 2 Then
MsgBox "Varivel A Do Tipo Integer"
Else
MsgBox "Varivel A no do tipo Integer"
End If
TYPENAME: Retorna o nome descritivo do tipo de uma varivel.
TypeName(<Varivel>
Vamos aos nomes de retorno da funo:
Byte
Um byte.
Integer
Um inteiro.
Long
Um inteiro por extenso.
Single
Um nmero de ponto flutuante de preciso simples.
Double
Um nmero de ponto flutuante de preciso dupla.
Currency
Um valor de moeda.
Date
Uma data.
String
Uma seqncia de caracteres.
Boolean
Um valor Booleano.
Error
Um valor de erro.
Empty
No iniciado.
Null
Nenhum dado vlido.
Object
Um objeto que suporta Automao OLE.
A funo TypeName funciona da mesma maneira que a VarType. A diferena que
enquanto a VarType retorna nmeros que representam os tipos das variveis, a funo
TypeName retorna diretamente os nomes dos tipos da varveis.

Funes de Escolha
CHOOSE: Seleciona um valor de uma lista de argumentos.
Choose (<ndice>, <Valor>[, <Valor>]...)
ndice :
Expresso numrica ou campo que resulta num valor entre 1 e o
nmero de opes disponveis.
Valor : Expresso Variant que contm um dos possveis valores a serem retornados.
A funo Choose retorna um valor de uma lista de valores separada por vrgula, com
base no nmero informado em <ndice>.
Print Choose(3,"Segunda-Feira","Tera-Feira","Quarta-Feira","QuintaFeira")
Imprimir Quarta-Feira

88

MSGBOX: Exibe uma caixa de dilogo durante a execuo do programa. Essa


caixa de dilogo poder informar algo ou perguntar algo ao usurio, dependendo da
configurao especificada no comando. Pode ser usada como uma funo para retornar
valores de resposta ou como comando para enviar informaes ao usurio.
MsgBox (<ExpressoPrompt>,<Estilo>, <BarraDeTtulo>)
ExpressoPrompt : Expresso de seqncia de caracteres exibida como a
mensagem numa caixa de dilogo. O tamanho mximo de ExpressoPrompt de
aproximadamente 1024 caracteres, dependendo da largura dos caracteres usados. Se
ExpressoPrompt for composto por mais de uma linha, voc poder separar as linhas
usando um caractere de retorno de carro (Chr(13)), um caractere de alimentao de linha
(Chr(10)) ou uma combinao de caracteres de retorno de carro e alimentao de linha
(Chr(13) & Chr(10)) entre cada linha.
Estilo: Um nmero ou uma soma de nmeros que representar o estilo da caixa de
dilogo. Por exemplo, se uma caixa de dilogo de informao, de pergunta, exclamao,
erro, etc...
Abaixo temos uma tabela com os estilos de caixa de dilogo que podemos usar:
Constante
vbOKOnly
VbOKCancel
VbAbortRetryIgnore

Valor
0
1
2

VbYesNoCancel

VbYesNo
VbRetryCancel
VbCritical
VbQuestion

4
5
16
32

VbExclamation

48

VbInformation

64

VbDefaultButton1
VbDefaultButton2
VbDefaultButton3
VbApplicationModal

0
256
512
0

VbSystemModal

4096

Descrio
Exibe apenas o boto "OK".
Exibe os botes "OK" e "Cancelar".
Exibe os botes "Anular", "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".
Exibe o cone "Consulta de
advertncia".
Exibe o cone "Mensagem de
advertncia".
Exibe o cone "Mensagem de
informao".
O boto "Primeiro" o padro.
O boto "Segundo" o padro.
O boto "Terceiro" o padro.
Janela restrita do aplicativo; o usurio
deve responder caixa de mensagem
antes de continuar seu trabalho no
aplicativo atual.
Janela restrita do sistema; todos os
aplicativos so suspensos at que o
89

usurio responda caixa de mensagem.


O primeiro grupo de valores (05) descreve o nmero e tipo de botes exibidos na
caixa de dilogo; o segundo grupo (16, 32, 48, 64) descreve o estilo de cone; o terceiro
grupo (0, 256, 512) determina qual boto o padro; e o quarto grupo (0, 4096) determina
modalidade da caixa de mensagem. Quando adicionar nmeros para criar um valor final
para o argumento buttons, use somente um nmero de cada grupo.
Durante a digitao da funo, quando formos escolher o estilo da mensagem, o
Visual Basic automaticamente apresenta uma lista com vrios estilos:

Podemos selecionar qualquer um item da lista, pois na verdade, cada um desses itens,
so constantes que representam os nmeros de estilos que vimos na tabela. Entretanto,
podemos substituir esses itens por uma soma resultante de um estilo personalizado que
possamos querer.
Observao Estas constantes so especificadas pelo Visual Basic para aplicativos.
Assim, os nomes podem ser usados em qualquer lugar do cdigo em lugar dos valores
reais.
BarraDeTtulo :
Expresso de seqncia exibida na barra de ttulos da caixa de
dilogo. Se voc omitir BarraDeTtulo, o nome do aplicativo ser includo na barra de
ttulos.
Estes so os valores que esta funo retorna, para informar qual foi ao do
usurio:

Constante
vbOK
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes
vbNo

Valor de Retorno
1
2
3
4
5
6
7

Boto escolhido
"OK"
"Cancelar"
"Anular"
"Repetir"
"Ignorar"
"Sim"
"No"

Se a caixa de dilogo exibir um boto "Cancelar", pressionar a tecla ESC ter o


mesmo efeito que escolher "Cancelar".

90

Se quiser especificar mais do que o primeiro argumento nomeado, voc dever usar
MsgBox em uma expresso. Se quiser omitir alguns argumentos de posio, voc dever
incluir o delimitador de vrgula correspondente.
J usamos bastante a funo MsgBox como comando em vrios exemplos do nosso
curso.
Vejamos agora um modo de us-la para retornar valores:
If MsgBox("Teste de Mensagem", vbOKCancel) = vbOK Then
MsgBox "Voc clicou OK"
End If
A funo MsgBox retorna um nmero dizendo qual foi o boto que o usurio
pressionou. No nosso exemplo acima, usamos a constante vbOK que representa o nmero
correspondente ao boto OK, para verificar se ele foi pressionado ou clicado. Caso seja,
usaremos novamente a funo MsgBox como comando, apenas para informar ao usurio o
boto que ele clicou.
Note que ao usarmos a funo MsgBox para retornar valores devemos colocar os seus
argumentos entre parnteses. E quando usarmos a funo MsgBox apenas para exibir
mensagens, o uso dos parnteses no necessrio.

Formatao de Dados
Podemos formatar os dados a serem exibidos em caixas de texto, formulrio, etc...
Para isso fazemos uso da funo Format. A funo Format tem vastos recursos
para formatao de dados numricos, string, moeda, data, etc.
Sua sintaxe a seguinte:
Format(<expresso>[, <Formato>)
<Expresso>: Seria a nossa expresso a ser formatada. Os dados que queremos formatar.
Pode ser uma string, uma expresso numrica, data, etc. ou qualquer varivel dos tipos
citados.
<Formato>: O formato pode ser determinado pelas mscaras de formatao, que
veremos a seguir, ou ainda, por uma palavra-chave que determina para que tipo de dados
estamos formatando a <Expresso>.
Formatao de Expresses Numricas
Para formatar qualquer expresso numrica usamos # para representar um digito
de 0 a 9, , para representar os milhares e . para representar as casas decimais. Como o
padro brasileiro para milhares e casas decimais exatamente o contrrio, o Visual Basic
automaticamente ir colocar no nosso padro, pois ir verificar qual o formato usado para o
pais de acordo com o que foi estabelecido no painel de controle.
Print Format(12345.3,##,###.##)
Valor Impresso: 12.345,3

91

Usamos o simbolo # para representar a disposio dos nmeros. No h


necessidade de colocar a mesma quantidade de nmeros e #. Se tivessesmos colocado
Print Format(12345.3,#,###,###.##), ainda assim seria impresso somente 12.345,3.
Entretanto, se colocarmos:
Print Format(12345.3, "###.##")
Valor Impresso: 12345,3
Perceba que no podemos colocar uma formatao menor que os nmeros que sero
impressos, pois seno a formatao no ir alcanar toda a extenso dos nmeros.
O smbolo # substitudo por nmeros quando existir nmero para ser
substitudo. Note que o nmero decimal .3 e apesar de termos usado uma formatao
para casas decimais com dois smbolos ##, no apareceu as duas casas decimais. Se
quisermos forar o aparecimento de zeros quando no tiver nmero para ser impresso,
usados 0 no lugar de #. Veja:
Print Format(12345.3,##,###.00)
Valor Impresso: 12.345,30
Print Format(12345,##,###.00)
Valor Impresso: 12.345,00
Isto vale tambm para formatao de nmeros sem casas decimais:
Print Format(45,0000)
Valor Impresso: 0045
Se quisermos uma formatao diferente para nmeros negativos, basta colocar essa
formatao aps o ponto-e-virgula.
Print Format(12345,##,###.00; (-)##,###.00)
Valor Impresso: 12.345,00
Print Format(-12345,##,###.00; (-)##,###.00)
Valor Impresso: (-)12.345,00
Veja abaixo os caracteres que podem ser usados na formatao de valores
numricos:
0
Exibe um dgito ou um zero. Se a expresso tiver um dgito na posio em
que o 0 aparece na seqncia de caracteres de formato, ele ser exibido; caso contrrio,
exibido um zero nessa posio.
Se o nmero possui um nmero de dgitos inferior ao de zeros (em qualquer lado da
casa decimal) na expresso de formato, exibe zeros esquerda ou direita. Se o nmero
tiver mais dgitos direita do separador decimal do que zeros direita do separador
decimal na expresso de formato, arredonda o nmero para tantas casas decimais quantos
forem os zeros existentes. Se o nmero tiver mais dgitos esquerda do separador decimal
do que zeros esquerda do separador decimal na expresso de formato, exibe os dgitos a
mais sem modificaes.
#
Exibe um dgito ou nada. Se a expresso tiver um dgito na posio em que o
smbolo # aparece na seqncia de caracteres de formato, ele ser exibido; caso contrrio,
nada ser exibido nessa posio.
Este smbolo funciona como o espao reservado para o dgito 0, mas os zeros
esquerda e direita no so exibidos se o nmero tiver a mesma quantidade ou menos
dgitos do que existem # caracteres em qualquer um dos lados do separador decimal na
expresso de formato.
92

.
Espao reservado para decimal
Para algumas localidades, usada uma vrgula como separador decimal. O espao
reservado para decimal determina quantos dgitos so exibidos esquerda e direita do
separador decimal. Se a expresso de formato contiver apenas sinais de nmeros esquerda
deste smbolo, os nmeros inferiores a 1 comeam com um separador decimal. Se voc
quiser que um zero esquerda seja sempre exibido com nmeros fracionrios, use 0 como o
primeiro espao reservado para dgito esquerda do separador decimal. O caractere real
utilizado como espao reservado para decimal na sada formatada depende do Formato
Numrico reconhecido pelo sistema.
%
Espao reservado para porcentagem
A expresso multiplicada por 100. O caractere de porcentagem (%) inserido na
posio onde ele aparece na seqncia de caracteres de formato.
,
Separador de milhar
Para algumas localidades, utilizado um ponto como o separador de milhar. O
separador de milhar separa milhar de centena dentro de um nmero que tenha quatro ou
mais casas esquerda do separador decimal. O uso padro do separador de milhar
especificado no formato que contm um separador de milhar delimitado por espaos
reservados de dgito (0 ou #). Dois separadores de milhar adjacentes ou um separador de
milhar imediatamente esquerda do separador decimal (sendo ou no especificado um
decimal) significa "aplique uma escala ao nmero dividindo-o por 1000 e arredonde-o
conforme necessrio." Use essa tcnica para aplicar escalas a nmeros extensos. Por
exemplo, a seqncia de caracteres de formato "##0,," pode ser usada para representar 100
milhes como 100. Nmeros inferiores a 1 milho so exibidos como 0. Dois separadores
de milhar adjacentes em qualquer posio que no seja a imediatamente esquerda do
separador decimal sero considerados apenas como especificao do uso de um separador
de milhar. O caractere real utilizado como o separador de milhar na sada formatada
depende do Formato Numrico reconhecido pelo sistema.
E- E+ e- e+ Formato cientfico
Se a expresso de formato contiver pelo menos um espao reservado para dgito (0
ou #) direita de E-, E+, e- ou e+, o nmero exibido em formato cientfico, sendo E ou e
inserido entre o nmero e seu expoente. O nmero de espaos reservados para dgito
direita determina o nmero de dgitos do expoente. Use E- ou e- para incluir um sinal de
subtrao (-) ao lado de expoentes negativos. Use E+ ou e+ para incluir um sinal de
subtrao ao lado de expoentes negativos e um sinal de adio (+) ao lado de expoentes
positivos.
- + $ ( ) space Exibe um caractere literal
Para exibir uma caractere diferente dos listados, preceda-o com uma barra invertida
(\) ou coloque-o entre aspas (" ").
\
Exibe o caractere seguinte da seqncia de caracteres de formato
Muitos caracteres da expresso de formato tm um significado especial e no podem
ser exibidos como caracteres literais a menos que sejam precedidos por uma barra invertida.

93

A barra propriamente no exibida. Sua utilizao equivale a colocar o caractere seguinte


entre aspas. Para exibir uma barra invertida, use duas barras invertidas (\\).
Exemplos de caracteres que no podem ser exibidos como caracteres literais so
caracteres de formatao de data e hora (a, c, d, h, m, n, p, q, s, t, w, y e /:), caracteres de
formatao numrica (#, 0, %, E, e, vrgula e ponto) e os caracteres de formatao de
seqncias de caracteres (@, &, <, >, e !).
"ABC"Exibe a seqncia de caracteres que est entre aspas.
Para incluir uma seqncia de caracteres em Format a partir do cdigo, voc deve
usar Chr(34) para delimitar o texto (34 cdigo de caractere para aspas).

Usamos tambm como argumento na formatao de expresses numricas

algumas palavras-chave que correspondem a algum tipo de formato padro.


General Number : Exibe o nmero na forma em que se encontra, sem separadores
de milhar.
Print Format(123456.7, "General Number")
Valor Impresso: 123456,7
Currency : Exibe o nmero com o separador de milhar, se apropriado; exibe dois
dgitos direita do separador de casa decimal. Note que a sada baseada nas
configuraes do Painel de Controle.
Print Format(123456.7, "Currency")
Valor Impresso: R$123.456,70
Fixed :
Exibe pelo menos um dgito esquerda e dois dgitos direita do
separador de casa decimal.
Print Format(123456.7, "Fixed")
Valor Impresso: 123456,70
Print Format(1, "Fixed")
Valor Impresso: 1,00
Standard : Exibe o nmero com o separador de milhar, pelo menos um dgito
esquerda e dois dgitos direita do separador de casa decimal.
Print Format(123456.7, "Standard")
Valor Impresso: 123.456,70
Percent : Exibe o nmero multiplicado por 100 com um sinal de porcentagem (%)
anexado direita; sempre mostra dois dgitos direita do separador de casa decimal.
Print Format(123456.7, "Percent")
Valor Impresso: 12345670,00%
Print Format(1, "Percent")
Valor Impresso: 100,00%
Scientific : Usa a notao cientfica padro.
Print Format(123456.7, "Scientific")
94

Valor Impresso: 1,23E+05

Formatao de Expresses Lgicas


Yes/No : Exibe No se o nmero for 0; caso contrrio, exibe Yes.
True/False : Exibe False se o nmero for 0; caso contrrio, exibe True.
On/Off : Exibe Off se o nmero for 0; caso contrrio, exibe On.
Print Format(1,True/False)
Valor Impresso: True
Formatao de Expresses Data e Hora
Usamos a funo Format tambm para formatar uma data ou hora, configurando
assim o formato que ser impresso. Veja os caracteres que podemos usar:
:
Separador de hora. Em algumas localidades podem ser usados outros
caracteres para representar o separador de hora. O separador de hora separa horas, minutos
e segundos quando os valores de hora so formatados. O caractere real usado como o
separador de hora na sada formatada determinado pelas configuraes de seu sistema.
/
Separador de data. Em algumas localidades podem ser usados outros
caracteres para representar o separador de data. O separador de data separa o dia, ms e ano
quando os valores de data so formatados. O caractere real usado como o separador de data
na sada formatada determinado pelas configuraes de seu sistema.
c
Exibe a data como ddddd e a hora como ttttt, nessa ordem. Exibe apenas
informaes de data se no houver parte fracionria para o nmero de srie de data; exibe
apenas informaes de hora se no houver parte inteira.
Print Format("01/08/96","c")
Valor Impresso: 01/08/96
Print Format(now,"c")
Valor Impresso: 01/08/96 22:51:11
d
Exibe o dia como um nmero sem zeros esquerda.
Print Format("05/07/96","d")
Valor Impresso: 5
dd
Exibe o dia como um nmero com zeros esquerda.
Print Format("05/07/96","dd")
Valor Impresso: 05
ddd Exibe o dia da semana como uma abreviado em 3 letras.
Print Format("01/08/96","ddd")
Valor Impresso: Qui
dddd Exibe o dia da semana como um nome completo.
Print Format("01/08/96","dddd")
95

Valor Impresso: Quinta-feira


w

Exibe o dia da semana como um nmero (1 para domingo at 7 para sbado).

ww Exibe a semana do ano como um nmero.


Print Format("01/08/96","ww")
Valor Impresso: 31
m
Exibe o ms como um nmero sem zeros esquerda. Se m vier
imediatamente depois de h ou hh, exibido o minuto em lugar do ms.
Print Format("01/08/96","m")
Valor Impresso: 8
mm Exibe o ms como um nmero com zeros esquerda. Se m vier
imediatamente depois de h ou hh, exibido o minuto em lugar do ms.
Print Format("01/08/96","mm")
Valor Impresso: 08
mmm Exibe o ms como uma abreviado em trs letras.
Print Format("01/08/96","mmm")
Valor Impresso: Ago
mmmm
Exibe o ms como um nome completo.
Print Format("01/08/96","mmmm")
Valor Impresso: Agosto
q
Exibe o trimestre do ano como um nmero.
Print Format("01/08/96","q")
Valor Impresso: 3
y
Exibe o dia do ano como um nmero.
Print Format("01/08/96","y")
Valor Impresso: 214
yy
Exibe o ano como um nmero de dois dgitos.
Print Format("01/08/96","yy")
Valor Impresso: 96
yyyy Exibe o ano como um nmero de quatro dgitos.
Print Format("01/08/96","yy")
Valor Impresso: 1996
h
Exibe a hora como um nmero sem zeros esquerda.
Print Format("09:13:55","h")
Valor Impresso: 9
hh

Exibe a hora como um nmero com zeros esquerda.


96

Print Format("09:13:55","h")
Valor Impresso: 09
n
Exibe o minuto como um nmero sem zeros esquerda.
nn
Exibe o minuto como um nmero com zeros esquerda.
s
Exibe o segundo como um nmero sem zeros esquerda.
ss
Exibe o segundo como um nmero com zeros esquerda.
t t t t t Exibe uma hora como uma hora completa (inclusive hora, minuto e
segundo), formatada usando o separador de hora definido pelo formato de hora reconhecido
pelo sistema.
Print Format(now,"ttttt")
Valor Impresso: 23:17:27

Usando estes caracteres especiais podemos formatar uma data de vrias

maneiras, como por exemplo:


Print Format(01/08/96,dd/mmmm/yyyy)
Valor Impresso: 01/Agosto/1996
Print Format(01/08/96,dd/mmm/yy)
Valor Impresso: 01/Ago/96

Veja abaixo a relao das palavras-chaves aceita pela funo Format para

expresses de data e hora:


General Date : Exibe a data e a hora nos formatos estabelecidos nas configuraes
do Windows. Caso a expresso seja somente uma data, ser exibido
Print Format(now,"general date")
Valor Impresso: 01/08/96 23:21:25
Print Format("01/08/96","general date")
Valor Impresso: 01/08/96
Print Format("09:24:11","general date")
Valor Impresso: 09:24:11
Long Date : Exibe uma data de acordo com o formato por extenso de data de seu
sistema.
Print Format("01/08/96","Long Date")
Valor Impresso: Quinta-feira, 1 de Agosto de 1996
Medium Date : Exibe uma data usando o formato mdio de data apropriado para a
verso de idioma do aplicativo host.
Print Format("01/08/96","Medium Date")
Valor Impresso: 01-Ago-96
Short Date : Exibe uma data usando o formato abreviado de data de seu sistema.
Print Format("01/08/96","Short Date")
Valor Impresso: 01/08/96
97

Long Time : Exibe uma hora usando o formato por extenso de hora de seu sistema:
inclui horas, minutos, segundos.
Print Format("09:24:11","Long Time")
Valor Impresso: 09:24:11
Medium Time : Exibe uma hora no formato 12 horas usando horas e minutos e a
designao AM/PM.
Print Format("09:24:11","Medium Time")
Valor Impresso: 09:24 AM
Short Time : Exibe uma hora usando o formato 24 horas.
Print Format("09:24:11","Short Time")
Valor Impresso: 09:24

Formatao de Expresses String


A manipulao de expresses String podem ser formatados usando os caracteres
especiais abaixo:
@
Exibe um caractere ou um espao. Se a seqncia de caracteres tem um
caractere na posio em que @ aparece na seqncia de formato, ele ser exibido; caso
contrrio, um espao ser apresentado nessa posio. Os espaos reservados so
preenchidos da direita para a esquerda a menos que exista um caractere ! na seqncia de
caracteres de formato. Veja abaixo.
&
Exibe um caractere ou nada. Se a seqncia de caracteres tem um caractere
na posio em que & aparece, ele ser exibido; caso contrrio, nada ser exibido. Os
espaos reservados so preenchidos da direita para a esquerda a menos que exista um
caractere ! na seqncia de caracteres de formato. Veja abaixo.
!
Fora preenchimento da esquerda para a direita dos espaos reservados. O
preenchimento padro feito da direita para a esquerda.
<

Exibe todos os caracteres no formato de minsculas.

>

Exibe todos os caracteres no formato de maisculas.

Banco de Dados
Abordarei aqui, o assunto Banco de Dados na forma mais simples possvel. O que quero
dizer que no vamos nos prender a conhecer todos os recursos que um banco de dados
pode nos fornecer. At mesmo por que esse foge ao objetivo do nosso curso. No entanto,

98

vamos aprender tudo o que precisamos para criar aplicativos comerciais usando um banco
de dados de uma forma limpa, rpida e simples.
Porm, devo dizer ao aluno que nunca demais se aprofundar no assunto Banco de
Dados, tentando tirar o mximo de proveito que ele pode nos fornecer. Principalmente, com
tantos tipos novos de bancos de dados surgindo por a.
A biblioteca de conexo, que contm os objetos que vamos usar para nos conectarmos
com os bancos de dados que criaremos, o Microsoft D.A.O. (Microsoft Data Access
Objects) e nos permite nos conectarmos com banco de dados no formato Access, alm de
tipos de bancos de dados mais antigos como Dbase, FoxPro, Paradox, etc.
Durante o nosso curso, trabalharemos com o Microsoft Access. Devo lembrar que a
mudana de um tipo de banco de dados para o outro est na que um tem mais ou menos
recursos que o outro, sendo que todos tm em comum, tabelas, campos, chave primria, etc.
Sempre que for utilizar um banco de dados que voc ainda no conhea, consulte a sua
documentao.

O que um banco de dados?


Vrias regras podem ser levadas em considerao no que diz respeito a julgar se temos
um gerenciador banco de dados ou no. O que quero dizer que o que uns podero julgar
como um gerenciador de banco de dados, outros consideraro apenas um gerenciador de
arquivos.
No entanto, eu diria que um banco de dados se resume a um conjunto de tabelas,
consultas, relatrios, e demais ferramentas de acesso a dados.
No nosso curso, no chegaremos a usar tudo o que um gerenciador de banco de dados
pode nos oferecer. Mas novamente devo dizer ao aluno para que aprenda o mximo
possvel sobre banco de dados e o que eles podem oferecer para simplificar os sistemas que
iremos construir.

Criando um banco de dados


J citei anteriormente que o banco de dados que utilizaremos no nosso curso o
Microsoft Access. Poderemos optar entre 2 ferramentas para criar o banco de dados:
Temos o prprio editor do Microsoft Access, caso voc tenha o Office instalado:

99

e tambm o Visual Data Manager, que uma ferramenta do Visual Basic:

O Visual Data Manager oferece uma interface mais bsica e objetiva, porm tem a
desvantagem de ser toda em ingls e no oferece alguns recursos como gerenciamento de
relatrios e formulrios. No entanto, como no vamos usar esses recursos de banco de
dados nesse curso, poderamos us-lo sem problemas.
Devo dizer que bancos de dados criados com as ltimas verses do Microsoft Access
no so reconhecidas pelo Visual Data Manager, no podendo assim serem abertas.

O que so tabelas?
As tabelas so bases de qualquer banco de dados. delas que viro os dados a serem
processados por consultas, relatrios, formulrios e demais objetos de banco de dados. As
tabelas so divididas em campos e registros.

100

Os campos so definidos quando definimos a estrutura da tabela, j os registros so


adicionados de acordo com a necessidade do usurio. Para ilustrar o que estou dizendo, veja
a tabela a seguir:
Cdigo
1
2
3

Nome
Maria da Silva
Joo dos Santos
Jos Carlos

Endereo
Rua Silvio Toigo, 432
Rua das Tulipas, 920
Av. Brasil, 5555

Telefone
887-7787
7877-6545
9877-4544

Registros
Campos
Cdigo, Nome, Endereo e Telefone representam os campos, enquanto os respectivos
dados desses campos representam um registro.
Um registro um conjunto dos dados de cada campo.Poderamos tambm entend-lo
como uma linha dentro da tabela.

Criando uma tabela


Por razo de compatibilidade, vamos criar nossa tabela usando o Visual Data Manager,
lembrando que poderemos abrir o Banco de Dados usando o Microsoft Access
posteriormente, caso quisermos. Nas ltimas verses do Access, talvez tenhamos que fazer
uma converso.
Acesse, dentro do Visual Basic, o menu Add-Ins e selecione Visual Data Manager.
Depois de aberto, selecione a opo New para criar um novo banco de dados, depois
selecione o tipo, que no nosso caso o Microsoft Access, e depois selecione Version 7.0
MDB, que oferece maior compatibilidade com as ltimas verses do Access, podendo
assim ser aberto.

101

Abriro 2 janelas, uma para serem executados instrues SQL *, e outra com as
propriedades do banco de dados.
* - Instrues SQL so instrues especficas de banco de dados como criar tabelas,
fazer manuteno dos dados, etc. Como nosso curso ir tratar os bancos de dados na
sua forma mais bsica, as instrues SQL fogem do objetivo do nosso curso.

102

J temos o banco de dados propriamente dito, agora precisamos criar tabelas. Para
criar uma tabela, clique com o boto direito do mouse em cima das propriedades e
selecione a opo New Table.

Abrir a seguinte janela:


Aqui descrevemos
qual deve ser o
nome da tabela
Boto de adicionar
campo
Boto de remover
campo
Este boto serve
para adicionarmos
um ndice tabela.
Veremos mais
tarde o que so
ndices e para que
servem
Depois de adicionados
os campos, usamos este
boto para confirmar a
criao da tabela.

Usado para
remover um ndice
da tabela.
103

Este a janela de adicionar tabelas. Podemos aqui definir o nome da tabela, assim
como adicionar campos, ndices e selecionar as suas respectivas propriedades.
Ao clicar no boto de Adicionar Campo, voc ver que se abrir uma janela.
nessa janela que selecionamos as propriedades do campo.
Aqui definimos o
nomeescolhemos
do campo o tipo
Aqui
do campo em uma lista.
Segue as mesmas regras
para tipos de variveis

Tamanho do
campo

Aqui definimos s o campo ir


aceitar comprimento zero ou no.
Comprimento zero seria um campo
com nmero de caracteres
preenchidos igual a zero. Ou seja,
vazio. Se est opo estiver
marcada o campo aceitar
comprimento zero.
Aqui definimos se o campo
ser ou no obrigatrio. Um
campo obrigatrio no aceita
como valor nulo(Null).
Se escolhermos um tipo de campo
como Long poderemos selecionar
esta opo. A propriedade
AutoIncrField nos possibilita criar
um campo autoincrementvel, ou
seja um campo que se numera
automaticamente de acordo com os
registros criados

Uma expresso que ser


usada para verificar se o
campo vlido ou no. Por
exemplo, se utilizarmos
nessa propriedade a seguinte
expresso >10 em um valor
numrico, esse campo s
aceitar valores maiores que
10.

A mensagem que exibida quando o valor


que foi atribudo ao campo no coincidir
com a regra de validao
Aqui definimos um valor padro para o
campo. Por exemplo, se definimos o
Default Value(valor padro) de um
campo numrico para zero, quando
adicionarmos um novo registro, esse
campo j ter esse valor zero at que seja
modificado.

104

Crie uma tabela com o nome de Clientes e adicione os seguintes campos:


Cdigo
Nome
DataNasc
Telefone
Ao campo cdigo, obviamente, voc ter que escolher um tipo que aceite nmeros.
O ideal seria usar um campo do tipo Long autoincrementvel, fazendo assim que
cada cliente adicionado tenha um novo cdigo automaticamente.
Para o campo Nome poderamos usar um campo do tipo Text com um tamanho
de 40 caracteres sem problemas.
O campo DataNasc servir para gravarmos datas de nascimento, portanto o tipo
DateTime seria o apropriado.
Quanto ao Telefone, deve ser do tipo Text por que usaremos sinais como - e * e
se colocarmos nmeros com sinais em um campo numrico o Visual Basic
entender que estamos tentando calcular valores e retornar o resultado.
Depois de adicionar todos os campos, feche a janela de adicionar campo e clique
no boto Build the Table para confirmar a criao da tabela. Voc vai notar que a
tabela j vai aparecer na janela de banco de dados.

Se voc clicar 2 vezes com o boto esquerdo do mouse em cima dela, ela aberta para
incluso, alterao e edio de dados.
Se clicarmos com o boto direito em cima da tabela aparecem opes como Open, que
abrir a tabela do mesmo modo como se tivssemos dado 2 cliques; Design, que serve para
alterarmos a estrutura da tabela, Rename(renomear); Delete(deletar). Alm disso, aparecem
outras opes que no nos sero teis no momento.

105

Bem, vamos fazer uso da nossa tabela. Insira 5 registros com nomes, telefones e datas de
nascimento diferentes.
Voc ver que, a cada novo registro que adicionarmos o campo Cdigo incrementado
em 1. Notar tambm que se um valor atribudo um campo no coincidir com o tipo que
foi definido para o mesmo,a tabela no aceitar. Por exemplo, se voc tiver um campo do
tipo DateTime, s conseguir inserir datas. Esse tipo de data obedece formatao que
voc definir no Painel de Controle.

Criando ndices
Um ndice usado para indexar registros. Por exemplo, se temos um campo Nome e
quisermos que este campo seja ordenado por ordem alfabtica. Devemos criar um ndice e
selecionar o campo Nome para que seja a base desse ndice.
Um campo do tipo numrico, seja ele Integer, Long ou qualquer outro tipo numrico, ao
ser indexado ficar em ordem crescente. Um campo do tipo DateTime, por ordem
cronolgica. Resumindo, um ndice organiza os dados da forma mais presumvel possvel.
Um ndice, alm de organizar os registros com base em um campo, tambm torna as
pesquisas pelo campo que tem um ndice, bem mais rpidas.
Vamos agora criar alguns ndices na nossa tabela de clientes. Clique na tabela com o
boto direito e selecione a opo Design. Aps, clique no boto Add Index para adicionar
um novo ndice. Abrir a seguinte janela:

106

Aqui definimos o nome que


iremos dar ao ndice.
Aqui escolhemos o campo que
ser a base do ndice
Se a propriedade Primary
estiver marcada, significa que
o campo selecionado ser a
chave primria. Podemos ter
apenas uma por tabela. Logo,
explicarei o que chave
primria.
Por padro, a atribuio de
um valor nulo a um campo
indexado, gera um erro. Se a
propriedade IgnoreNulls for
marcada, o campo passar a
aceitar valores nulos.

Se a propriedade Unique for


marcada, o campo no
aceitar valores duplicados,
ou seja, se tivermos um
campo Nome com o valor
Maria, no poderemos ter
outro registro com um campo
Nome de mesmo valor.

Vamos agora adicionar um ndice chamado Nome a tabela que criamos. Esse ndice ter
como base o campo Nome. No ir aceitar valores nulos nem valores iguais.

Definindo a chave primria


Uma chave primria til quando queremos que uma tabela no aceite valores nulos e
nem valores duplicados. Uma chave primria tambm til para se relacionar com outras
tabelas.
Podemos dizer que uma chave primria um ndice ou um conjunto de ndices que no
podem ter valores repetidos ou nulos. Por exemplo, digamos que voc defina como chave
primria 2 campos. Um referente ao campo Codigo e outro ao campo Nome. Poderamos
at ter 2 cdigos iguais e 2 nomes iguais, mas uma combinao de nome e cdigo igual no
poderia existir. A chave primria nesse caso, seria um ndice que definimos com a
propriedade Primary e definimos que o mesmo teria como base o campo Nome e o campo
Cdigo.
Devo admitir que na teoria isso parece um pouco confuso, mas na prtica fica bem mais
simples.

107

Uma tabela pode ter apenas uma chave primria(tambm chamada de ndice primrio),
mas pode ter vrios ndices. Se voc tentar atribuir mais de um ndice como Primary, ir
receber uma mensagem de erro dizendo que o ndice no pode ser criado.
Como a tabela que criamos bem mais simples e o ndice que criamos(Nome), j d
conta de no permitir valores nulos e repetidos, uma chave primria no
momento,desnecessria.

Acessando o banco de dados atravs do Visual Basic


O Visual Basic oferece objetos que nos permitem interagir de forma completa com o
Banco de Dados. Podemos alterar a estrutura das tabelas, criar tabelas, campos, ndices,
inserir registros, alterar registros, excluir registros, etc...
No nosso curso veremos como interagir com as tabelas que criamos no Visual Data
Manager.
Primeiramente, crie um novo projeto. Agora, voc deve chamar uma biblioteca que
disponha de objetos para manipulao de banco de dados. Temos vrias. No nosso curso
iremos usar o Microsoft DAO 3.6 Object Library.

Marque essa biblioteca e selecione OK.


Agora j podemos usar os objetos que essa biblioteca nos oferece.

Abrindo um banco de dados


Vamos agora, realizar algumas operaes envolvendo bancos de dados. Primeiro crie
uma pasta de trabalho no diretrio c:\ com o nome de Trabalho. Depois crie um banco de
dados com o nome DbCurso dentro dessa mesma pasta.
108

Crie uma tabela nesse banco de dados chamada clientes com os seguintes campos e
atributos:
Campo
Tipo
Tamanho
Codigo
Long(Autoincrementvel)
Nome
Text
40
Cpf
Text
15
Rg
Text
11
DataNascimento
DateTime
DataCadastro
DateTime
Endereco
Text
30
Bairro
Text
3
Casado
Boolean
Alguns campos aparecem sem seus respectivos tamanhos por qu no so necessrios
devido ao tipo do campo selecionado.
Adicione um ndice para o nome chamado IndNome, outro para o Cdigo chamado
IndCodigo e uma chave primria com base no campo Nome e no campo Cdigo e se
chamar Chave.
Atravs do Microsoft Access ou do Visual Data Manager, acrescente 5 registros a essa
tabela e grave-a.
Agora que j temos um banco de dados com uma tabela, vamos aprender como abrimos
o banco de dados e lemos os dados da tabela.
O primeiro objeto de banco de dados que vamos conhecer objeto Database. Um
objeto Database contm propriedades, funes e mtodos relativos banco de dados. Para
abrir um banco de dados usando o objeto Database, devemos usar a funo
OpenDatabase. Essa funo s disponvel quando a biblioteca do Microsoft DAO foi
selecionada.
Primeiramente, devemos declarar um objeto Database. Vamos declarar uma varivel
chamada Banco como sendo um objeto Database:
Dim Banco as Database
Depois, iremos instanciar o objeto Banco que criamos apontando para a funo
OpenDatabase que abrir o banco de dados que desejarmos. A funo OpenDatabase tem
a seguinte sintaxe:
OpenDatabase(<Caminho e nome do banco de
dados>,<Opes>,<TipoDeAcesso>,<Conexo>)
<Caminho e nome do banco de dados>- Uma string que representa o caminho completo,
incluindo o nome do banco de dados.
<Opes>(Opcional)- Determina se o banco de dados ser aberto em modo exclusivo ou
no. True para exclusivo e False para modo compartilhado. Este recurso til quando
iremos criar um sistema que ser usado em rede(Multiusurio). Se este argumento for
omitido o padro ser False.

109

<TipoDeAcesso>(Opcional)- O tipo de acesso deve informar se o banco de dados ser


aberto como somente leitura(True) ou para leitura/gravao(False) .
<Conexo>(Opcional)- Uma string que determina vrias opes de configurao,
incluindo senhas.
A pergunta que talvez esteja na sua cabea Onde devo declarar um objeto Database?.
Bem, na verdade um objeto Database, assim como as variveis no Visual Basic, podem ser
declaradas em qualquer lugar. No entanto, se declararmos o objeto Database em um
subprocedimento, ele ser restrito somente ao subprocedimento em que foi declarado. O
ideal sempre usarmos declar-lo na seo General-Declarations do formulrio ou
mdulo que formos us-lo. Se usarmos em um mdulo, esteve objeto ser visvel em todos
os outros mdulos e formulrios. No nosso exemplo, usaremos na seo GeneralDeclarations do formulrio onde ele ser usado.
Vamos voltar a declarao do objeto Database que comeamos.

Declaramos um objeto Database chamado Banco na seo General-Declarations do


nosso formulrio.
Agora, para usarmos esse objeto, temos de instanci-lo apontando para a funo
OpenDatabase, como vimos anteriormente. O local ideal para fazer essa instanciao no
evento Load do formulrio. Teremos assim desta forma, o objeto instanciado durante todo
o tempo que o cdigo estiver sendo executado no formulrio.
A sintaxe da funo OpenDataBase j vimos anteriormente. Veremos agora como
ficaria se usssemos o banco de dados que criamos na nossa pasta de trabalho.

Usamos apenas o primeiro argumento que representa o caminho e o nome do banco de


dados. Como voc pode ver, os banco de dados do tipo Access terminam com a extenso
.mdb, sendo portanto, necessrio que especifiquemos o nome completo do banco de
dados. Os outros argumentos so opcionais.
Agora que j temos o objeto Database instanciado, podemos usar os seus recursos a
qualquer momento.
O primeiro recurso do objeto Database que iremos conhecer o mtodo
OpenRecordset. Este mtodo serve para abrirmos um RecordSet. Claro que antes de uslo voc precisa saber o que um RecordSet e para o que serve.

110

O que um Recordset?
Recordset um objeto que representa uma tabela. Assim como o objeto Database
representa o banco de dados, o objeto Recordset representa uma tabela. Com ele, podemos
efetuar todas as operaes em tabelas que fazamos via Access ou Visual Data Manager.
Agora que j sabemos pra que serve um Recordset vamos aprender a declar-lo e
instanci-lo. Primeiro, v na seo General-Declarations, onde j declaramos um objeto
Database, e declare l tambm um objeto Recordset com o nome de Tabela.

Depois de declarar o objeto Recordset, ser necessrio instanci-lo. a que entra o


mtodo OpenRecordset do objeto Database. Veremos agora a sintaxe do mtodo
OpenRecordset:
OpenRecordset(<NomeDaTabela>,<Tipo>,<Opes>,<SomenteLeitura>)
<NomeDaTabela>- Uma string contendo o nome da tabela que desejamos abrir.Na
verdade, esse argumento no precisa ser necessariamente um nome de tabela. Pode tambm
ser uma consulta ou uma instruo SQL. No nosso curso usaremos somente atribu-lo com
o nome da tabela.
<Tipo>- Ao abrirmos um objeto recordset, poderemos escolher entre vrios tipos de
aberturas diferentes. Esse argumento pode ser um nmero ou uma constante interna que
determina o tipo de abertura. Veremos agora os tipos mais usados:
DbOpenTable Ao usar a contante DbOpenTable, estamos abrindo um objeto
RecordSet do tipo Table como se ele fosse uma tabela normal. Podemos consultar
registros, adicionar registros, excluir registros, atualizar registros e todas as operaes que
podemos fazer via Access ou Visual Data Manager.
DbOpenSnapShot Esta outra contante nos permite abrir um objeto recordset como sendo
do tipo SnapShot. Um recordset do tipo SnapShot pode ser visto como uma cpia virtual
dos dados. Ou seja, uma cpia da tabela no exato momento em que for criado o objeto
recordset tipo SnapShot. No podem ser atulizados. Seu uso se restringe a consultas.
DbOpenDynaset Essa constante cria um objeto RecordSet tipo Dynaset. Um Dynaset
muito semelhante a um SnapShot. A diferena que os Dynaset podem ser atualizados.
Devo lembrar que cada um desses tipos de RecordSet contem vrias particularidades no
mencionadas aqui, sendo estas que citei, portanto, as mais importantes.
Voltando a abertura do nosso banco de dados, usaremos um objeto recordset do tipo
Table, pelo fato desse tipo de recordset ter as mesmas caractersticas de uma tabela. Dessa

111

forma, poderemos efetuar todas as operaes que


precisamos(Incluso,Alterao,Consulta,Excluso).
J que temos o objeto Database instanciado e o objeto RecordSet declarado, vamos
agora instanciar o objeto RecordSet, apontando para o mtodo OpenRecordset do objeto
Database. Ficaria assim:

Instanciamos o objeto tipo Recordset apontando para o mtodo OpenRecordset do


objeto DataBase. Como usamos no argumento <Tipo> do mtodo OpenRecordset ,a
contante DbOpenTable, o objeto tipo RecordSet aberto, ser do tipo Table. Ou seja, se
comportar como se fosse uma tabela normal.
Pronto! Agora a varivel Tabela tem todas as caractersticas de um objeto recordset do
tipo Table e tm tambm todos os registros existentes na tabela Clientes.

Consultando Registros
Desde que j tenhamos um objeto Recordset aberto, poderemos facilmente consultar
seus registros. H dois tipos de sintaxes que podemos utilizar para retornar valores de
registros:
<RecordSet>(<StringNomeCampo>)
ou
<RecordSet>!<NomeCampo>
Exemplo:
TxtNome.Text = Tabela(Nome)
Ou
TxtNome.Text = Tabela!Nome
No projeto que criamos, adicione um TextBox chamado TxtNome e utilize o exemplo
anterior para preencher o TextBox com o valor do campo Nome. Voc pode adicionar mais
TextBoxs ao formulrio e fazer com que os demais campos sejam exibidos. Rode o
programa.
Voc deve ter notado que os dados exibidos no formulrio so referentes ao primeiro
registro. Isso por qu quando abrimos um recordset, ele aponta primeiramente para o

112

primeiro registro. Como se tivssemos aberto uma tabela no Access ou no Visual Data
Manager. como se existisse um ponteiro virtual que sempre est apontando para um
registro X.
Na prtica, consultar apenas o primeiro registro no nos adiantaria. ai que entram os
mtodos de navegao que veremos agora.

Navegao atravs dos registros


MoveNext Este mtodo mover o ponteiro para o prximo registro.
MovePrevious Move o ponteiro para o registro anterior
MoveFirst Move o ponteiro para o primeiro registro.
MoveLast Move o ponteiro para o ltimo registro.
Move Move o ponteiro N registros frente.
Exemplo:
Tabela.Move 3
Mover o ponteiro 3 registros frente.
Exemplos:
Tabela.MoveNext
Tabela.MoveLast
Tabela.MovePrevious

Mtodos de procura
Um Recordset oferece alguns mtodos para realizarmos operaes de busca atravs das
tabelas. Veremos agora os mtodos de busca e as suas particularidades.
FindFirst- o mtodo de procura mais usado. Ele procura um registro com base em uma
condio, a partir do primeiro registro. Sua sintaxe a seguinte:
Recordset.FindFirst(StringComCondio)
O argumento StringComCondio representa uma string, onde dever ser informada a
condio. Por exemplo, se voc desejar procurar um registro que contenha um campo
Nome igual Joo, ento ir usar uma string assim:Nome = Joao. Vejamos como
ficaria usando o mtodo FindFirst:
Tabela.FindFirst(Nome = Joao)
113

Note que quando procuramos um campo do tipo Texto(Text), o texto a procurar deve ser
delimitados por aspas simples . Caso for um campo do tipo numrico(Integer,Long, etc...)
as aspas no so necessrias:
Tabela.FindFirst(Cdigo = 3)
FindNext O mtodo FindNext funciona de forma semelhante ao FindFisrt. A diferena
que enquanto o mtodo FindFirst procura um registro a partir do primeiro, o FindNext
procura a partir do registro corrente, sendo os anteriores ignorados. A sintaxe usada a
mesma nos dois mtodos.
FindPrevious A partir da atual posio do ponteiro no recordset, localiza o registro
anterior que satisfaa o critrio. Segue a mesma sintaxe dos mtodos anteriores.
FindLast A partir do primeiro registro, procura pelo ltimo registro que satisfaa o
critrio estabelecido, no caso de termos mais de um registro encontrado. Segue a mesma
sintaxe dos mtodos anteriores.

O mtodo Seek
O mtodo Seek oferece um meio de pesquisa mais rpido quando procuramos um
registro com um campo indexado. O mtodo Seek s pode ser usado em um RecordSet do
tipo Table e necessrio que especifiquemos um ndice corrente antes de fazermos a
pesquisa. Para especificar um ndice corrente, usamos a propriedade Index do RecordSet.
Digamos que vamos usar o Recordset que j criamos q que se chama Tabela. Como voc
lembra, quando criamos a tabela Clientes adicionamos um ndice chamado Nome e
este ndice que iremos usar.
Tabela.Index =Nome
Feito isso, j poderemos usar o mtodo Seek que tem a seguinte sintaxe:
<RecordSet>.Seek <Mtodo de Comparao>,<Chave1>,<Chave2>,<Chave3>,Etc...
<Mtodo de Comparao> - Uma string que determina os mtodos de comparao pra
quando buscarmos pelo registro especificado em qualquer uma das <Chaves>. Os mtodos
de comparao so representados pelos operadores <, <=, =, >= ou >.
<Chave1>,<Chave2>,<Chave3>,Etc... Um ou mais valores que representam os campos
existentes no ndice definido atrabs da propriedade Index. Podemos colocar at 13 chaves.
Exemplo:
Tabela.Index =Nome
Tabela.Seek =, Joo

114

Aps utilizarmos um mtodo de procura, seja ele Seek ou qualquer um dos que vimos
anteriormente, o ponteiro de mover para o registro que satisfaa as condies
estabelecidas nas opes de critrio. Caso o registro no seja encontrado, o ponteiro
continuar no registro atual.
Quando uma operao de procura no obter sucesso, a propriedade NoMatch do objeto
Recordset passar a ter o valor True. Essa propriedade til para sabermos se o registro
que procuramos foi encontrado.
Exemplo:
Dim Banco as Database
Dim Tabela as Recordset
Set Banco = Opendatabase(C:\Trabalho\Dbcurso.mdb)
Set Tabela = Banco.OpenRecordset(Clientes,Dbopentable)
Tabela.FindFirst(Nome = Maria)
If Tabela.Nomatch = True Then
MsgBox Nome no foi encontrado
Else
MsgBox Nome foi encontrado
Endif

Adidionando Registros
Para adicionarmos registros usamos o mtodo AddNew de um objeto RecordSet.
<Recordset>.AddNew
Depois de usarmos AddNew, devemos atribuir os valores aos campos do Recordset:
<RecordSet>(<Campo>) = <Valor a ser atribudo ao campo>
Feito isso, ainda precisamos usar o mtodo Update do objeto Recordset para finalizar a
adio do novo registro. Este mtodo trabalha em conjunto com o mtodo AddNew.
Lembre-se de sempre us-lo quando a adio do registro estiver OK.
<Recordset>.Update
Vamos ao exemplo prtico para ilustrar esse processo, partindo do RecordSet que
criamos chamado Tabela

115

Tabela.AddNew
Tabela(Nome) = Vanessa Martins Vargas
Tabela(Endereo) = Joo Borges Fortes, 2000
Tabela(DataNasc) = # 15/09/1980 #
Tabela.Update
Na pratica, estes valores provavelmente viriam de TextBoxs. Mas no exemplo acima
adicionamos os valores diretamente aos campos da tabela para ilustrar o processo. Note que
ao nos referirmos aos campos da tabela usamos, por exemplo Tabela(Nome), mas
tambm poderamos usar Tabela!Nome. Cabe ao aluno avaliar qual a sintaxe mais
intuitiva.

Atualizando Registros
A atualizao de registros bem semelhante adio. A diferena que no lugar de
usarmos o mtodo AddNew, usamos o mtodo Edit. Retomando o exemplo anterior,
digamos que foi gravado o endereo do cliente errado. Usaramos o seguinte cdigo para
consertar isso:
Tabela.MoveLast Move o ponteiro para o ltimo registro
Tabela.Edit Abre a edio do registro
Tabela(Endereo)=Jos Joaquim Da Mota,211 Atribui o novo endereo
Tabela.Update Grava o novo endereo

Excluindo registros
Esta a mais simples das operaes envolvendo manipulao de registros. Para excluir
um registro, aponte para o registro que deseja excluir e use o mtodo Delete do objeto
RecordSet. Exemplo:
Tabela.MoveLast
Tabela.Delete

Fechando um RecordSet e um Database


muito importante se atentar para o fato de precisar fechar a conexo dos objetos com a
tabela e o banco de dados quando no estivermos mais usando os dados provenientes deles.
Pois isto evitar que o banco de dados possa estar corrompindo futuramente. Para fechar
um Database, objeto que representa o banco de dados, devemos primeiramente fechar os
RecordSets baseados nesse Database. Se tentarmos fechar o Database primeiro sem

116

termos fechado o(s) Recordsets bseados nele, teremos um erro em tempo de execuo.
Para fechar um RecordSet ou um DataBase, usamos o mtodo Close.
Tabela.Close
Banco.Close
O exemplo acima fecha primeiramente o RecordSet chamado Tabela e depois o
Database chamado Banco.

Conhecendo algumas propriedades teis


Vamos conhecer agora algumas propriedades teis do objeto RecordSet :
AbsolutePosition : Indica o numero do registro corrente da tabela em uso. No podemos
consultar essa propriedade em um objeto Recordset do tipo Table. Somente SnapShot ou
Dynaset.
BOF : Retorna True quando foi feita uma tentativa de ir para um registro anterior ao
primeiro. Quando isto aontecer, om ponteiro no apontar para nenhum registro, tendo o
programador ter que fazer com que ele aponte para um registro novamente.
DateCreated : Retorna a data de criao da tabela manipulada pelo Recordset.
EOF : Retorna True quando for feita uma tentativa de ir para um registro superior ao
ltimo.
Index : Especificamos o nome do ndice que ser associado a tabela.
NoMatch : Retorna True se uma pesquisa efetuada dentro da tabela foi bem-sucedida.
PercentPosition : Retorna um percentual referente a posio que a tabela se encontra com
comparao com o total de registros da tabela.
RecordCount : Retorna a quantidade de registros que uma tabela possui.
Com base nos mtodos, propriedades e funes aprendidas, crie um cadastro com base na
tabela Clientes que criamos no banco de dados DbCurso. O cadastro dever ter botes de
adicionar registros, um boto para ir para o prximo registro, anterior, primeiro e ltimo.
Dever ter tambm um boto de excluir registros e um para alterar.

Conhecendo alguns objetos de banco de dados

117

Iremos conhecer agora alguns objetos que facilitam a nossa vida, quando precisamos
manipular dados de um banco de dados. O primeiro dos objetos que conheceremos um
controle:
Data Este objeto automatiza tarefas como a do nosso exemplo anterior,
economizando cdigo. Vejamos como us-lo.
Crie um formulrio e seleciona na caixa de ferramentas um objeto Data. Nomei-o como
Data. Agora insira 5 Labels e 5 Textboxs nesse formulrio, como se fosse fazer um
cadastro para a nossa tebela de clientes, como no exemplo anterior. Deixe o formulrio
semelhante ao formulrio da figura abaixo:

No nexessrio nomear os TextBoxs. Vamos agora configurar o objeto Data. Sem mais
rodeios, vamos diretamente propriedade que nos interessa e ela a DatabaseName. Nela
escolheremos o banco de dados que tm a tabela que iremos usar.

Clicando no boto ao lado <...>, uma janela se abrir para que possamos procurar pelo
banco de dados.

118

Depois de selecionado o banco de dados, j podemos selecionar uma tabela, atravs da


propriedade RecordSource do objeto Data.

Note tambm que na propriedade RecordsetType, podemos escolher entre os 3 tipos de


recordsets que vimos anteriormente.

Bem, agora vamos conhecer o que o objeto Data tem a nos oferece. Primeiramente,
configure a opo DataSource dos TextBoxs. Note que quando adicionamos um objeto
Data ao formulrio, o mesmo ir aparecer na lista da propriedade RecordSource das
TextBoxs existentes no formulrio.

Selecione este objeto para todas as TextBoxs. Agora que j selecionamos o objeto Data
para a propriedade RecordSource de todos os TextBoxs, configure a propriedade DataField
das mesmas, uma por vez.
Note que se tudo estiver configurado de forma adequada, voc pode escolher os campos
em uma lista na propriedade DataField de cada TextBox.

Selecione um a um, os respectivos campos para cada TextBox. Depois disso feito, rode o
projeto.
Voc vai ver que podemos navegar atravs dos registros. Como voc notou, a economia
de cdigo foi de 100 %.
Tudo o que for digitado ou trocado nas TextBoxs vai ser alterado diretamente no banco
de dados, sem necessidade nenhuma de usar mtodos Edit ou Update.
Devo dizer que um excelente recurso para consultar dados. Na prtica, naum se usa
muito esse tipo de controle. Pois na maioria dos aplicativos, temos que fazer validao do
que o usurio digita nas caixas de texto, limitar algumas delas, validar dados, etc. Alm
disso, funes como excluir registros, adicionar registros, devem ser feitas manualmente.

119

O Controle DataGrid(DbGrid)
O controle DbGrid oferece um sofisticado meio de consultarmos dados. Para usar o
DbGrid, voc deve marc-lo na caixa de componentes. H mais de um tipo de DataGrid, no
entanto o que vamos estudar o Microsoft Data Bound Grid Control 5.0(SP3).

Depois de feito isso e o controle j estar visvel na caixa de ferramentas, clique nele e o
arraste-o para o mesmo formulrio onde criamos o nosso cadastro de clientes.

120

V na propriedade DataSource da DataGrid. Voc ver que aparecer o nosso objeto Data
na lista. Selecione-o. De fato, para usarmos o objeto DataGrid, temos que ter um objeto
Data j configurado, no mesmo formulrio.
Feito isso, j preenchemos o DataGrid com os dados existentes no objeto Data. Rode o
projeto e confira o resultado.

Note que ao mudarmos de registro no DataGrid, o registro tambm troca no objeto Data
e vice-versa.
O Datagrid funciona de forma bem semelehante ao objeto Data. Quando alteramos um
campo via DataGrid, estamos alterando diretamente no banco de dados, sem necessidade de
algum comando adicional. No entanto existem propriedades que nos permitem bloquear
esse tipo de alterao direta. Vejamos algumas propriedades do DataGrid:
AllowAddNew: Habilita a possibilidade de se poder acrescentar registros na tabela.
Quando esta propriedade est habilitada. O DataGrid oferece um registro em branco no
final para que possamos inserir um novo registro.
AllowDelete : Habilita a possibilidade de apagar registros. Quando habilitamos essa
propriedade, podemos excluir registros selecionando toda uma linha e pressionando a tecla
<Del>.
AllowUpdate : Habilita a possibilidade de alterar os registros existentes diretamente.
ColumnHeaders : Determina se o cabealho de cada coluna ser exibido.
RecordSelectors : Determina se no DBGrid ir aparecer um seletor de registros
AllowRowSizing : Habilita a possibilidade do usurio mudar o tamanho das colunas.
Enabled : Habilita ou no a interao do DBGrid com o usurio.
Columns : Seleciona em qual coluna de dados do DBGrid que ter as propriedades abaixo
disponvel para serem configuradas.
Caption : Ttulo da Coluna selecionada.

121

DataField : Campo da tabela que ter seus dados exibidos na coluna selecionada.
DefaultValue : Valor padro para um determinado campo.
NumberFormat : Determina o formato com que os dados da coluna sero mostrados no
vdeo. Usa as mesmas regras da funo FORMAT.
Locked : Trava os dados contido nas colunas.
AllowSizing : Habilitada a possibilidade de mudar o tamanho da coluna
Visible : Indica se a coluna ser visvel ou no.
Alignment : Alinha dos dados na coluna na forma determinada nesta propriedade.

Impresso
Atualmente existem vrias ferramentas para facilitar a impresso de relatrios.
Estudaremos 2 delas:
O objeto Printer, que um objeto nativo do Visual Basic, e a ferramenta Crystal
Reports, que um programa separado, mas que gera relatrios que podem ser acessados
atravs do Visual Basic. A verso do Crystal Reports que estudaremos o Crystal
Reports Report Design Component, que permite projetarmos relatrios dentro do nosso
prprio projeto do Visual Basic.

O objeto Printer
O objeto Printer nos permite obter um total controle sobre as tarefas de impresso. Tem
propriedades que nos possibilitam alterar a fonte do que ser impresso, alterar a impressora
padro, alternar para fonte em negrito, etc. Tem mtodos que nos possibilitam saltar para a
prxima pgina, terminar a impresso, imprimir na linha x, coluna x,etc. Veremos agora as
principais propriedades do Printer:
ColorMode: Determina ou mostra a capacidade de impresso colorida do dispositivo.
Copies: Especifica a quantidade de cpias de uma pgina que deve ser impressa.
CurrentX: Determina a coordenada horizontal que a impressora ir imprimir.
CurrentY: Determina a coordenada vertical que a impressora ir imprimir.
DeviceName: Mostra o nome da impressora padro suportada pelo dispositivo
FontName: Determina qual fonte de letra a impressora usar para impresso.
FontBold: Determina se a fonte ser em negrito.
FontItalic: Determina se a fonte ser em itlico.
Fonts: Fornece uma lista de todas as fontes disponveis para impresso.
FontSize: Determina o tamanho que a fonte de letra escolhida usar.
FontUnderline: Determina se a fonte ser sublinhada.
Orientation: Determina a orientao do papel: Retrato ou Paisagem. Usamos as constantes
para definir o tipo escolhido:
vbPRORPortrait
1
Retrato
vbPRORLandscape 2
Paisagem
Page : Retorna o nmero da pgina que esta sendo impressa.
PaperSize: Determinamos o tamanho do papel. Podemos usamos as seguintes constantes:
122

vbPRPSLetter
VbPRPSLetterSmall
VbPRPSTabloid
VbPRPSLedger
VbPRPSLegal
VbPRPSStatement
VbPRPSExecutive
vbPRPSA3
vbPRPSA4
vbPRPSA4Small
vbPRPSA5
vbPRPSB4
vbPRPSB5
vbPRPSFolio
VbPRPSQuarto
vbPRPS10x14
vbPRPS11x17
VbPRPSNote
vbPRPSEnv9
vbPRPSEnv10
vbPRPSEnv11
vbPRPSEnv12
vbPRPSEnv14
VbPRPSCSheet
vbPRPSDSheet
vbPRPSESheet
vbPRPSEnvDL
vbPRPSEnvC3
vbPRPSEnvC4
vbPRPSEnvC5
vbPRPSEnvC6
vbPRPSEnvC65
vbPRPSEnvB4
vbPRPSEnvB5
vbPRPSEnvB6
vbPRPSEnvItaly
vbPRPSEnvMonarch
vbPRPSEnvPersonal
vbPRPSFanfoldUS
vbPRPSFanfoldStdGerma
n
vbPRPSFanfoldLglGerma
n
vbPRPSUser

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
29
30
28
31
32
33
34
35
36
37
38
39
40
41

Letter, 8 1/2 x 11 in.


Letter Small, 8 1/2 x 11 in.
Tabloid, 11 x 17 in.
Ledger, 17 x 11 in.
Legal, 8 1/2 x 14 in.
Statement, 5 1/2 x 8 1/2 in.
Executive, 7 1/2 x 10 1/2 in.
A3, 297 x 420 mm
A4, 210 x 297 mm
A4 Small, 210 x 297 mm
A5, 148 x 210 mm
B4, 250 x 354 mm
B5, 182 x 257 mm
Folio, 8 1/2 x 13 in.
Quarto, 215 x 275 mm
10 x 14 in.
11 x 17 in.
Note, 8 1/2 x 11 in.
Envelope #9, 3 7/8 x 8 7/8 in.
Envelope #10, 4 1/8 x 9 1/2 in.
Envelope #11, 4 1/2 x 10 3/8 in.
Envelope #12, 4 1/2 x 11 in.
Envelope #14, 5 x 11 1/2 in.
C size sheet
D size sheet
E size sheet
Envelope DL, 110 x 220 mm
Envelope C3, 324 x 458 mm
Envelope C4, 229 x 324 mm
Envelope C5, 162 x 229 mm
Envelope C6, 114 x 162 mm
Envelope C65, 114 x 229 mm
Envelope B4, 250 x 353 mm
Envelope B5, 176 x 250 mm
Envelope B6, 176 x 125 mm
Envelope, 110 x 230 mm
Envelope Monarch, 3 7/8 x 7 1/2 in.
Envelope, 3 5/8 x 6 1/2 in.
U.S. Standard Fanfold, 14 7/8 x 11 in.
German Standard Fanfold, 8 1/2 x 12
in.
German Legal Fanfold, 8 1/2 x 13 in.

256

User-defined

123

Port: Retorna o nome da porta de impresso que ser usada pela impressora padro.
PrintQuality: Determina ou seta a resoluo que a impressora ir usar.
VbPRPQDraft
-1
Resoluo Draft
vbPRPQLow
-2
Baixa Resoluo
vbPRPQMediu
-3
Mdia Resoluo
m
vbPRPQHigh
-4
Alta Resoluo
Vejamos agora, os principais mtodos:
EndDoc: Finaliza a impresso de um relatrio
KillDoc: Termina imediatamente a impresso
Line: Imprime uma linha horizontal, de acordo com as coordenadas especificadas.
NewPage: Fora a impresso passar para a prxima pgina.
Print <expresso> : Imprime uma expresso ou varivel especificada.
Quando usamos o objeto Printer, ser de extrema necessidade o uso de uma funo
auxiliar que s pode ser usado com o mtodo Print ou com a instruo Print #. Esta funo
a funo Tab e usada para posicinar a sada. Imagine que estamos imprimindo alguma
coisa com o mtodo Print. Queremos imprimir o ttulo do relatrio bem no centro da folha.
Se usssemos o mtodo Print assim:
Printer.Print Ttulo do Relatrio
O ttulo sairia no incio da folha, agora usando a funo Tab associada com o mtodo
Print, podemos definir em qual coluna ir comear a impresso feita pelo mtodo Print.
Printer.Print Tab(35); Ttulo do Relatrio
Dever existir um ; (ponto e vrgula) entre a funo Tab e o que queremos imprimir.
Mas se voc no digitar no tem problema, pois o editor do Visual Basic se encarrega de
corrigir esse erro de sintaxe.
Vejamos agora, um exemplo de como poderia ser feito um relatrio dos clientes na tabela
que criamos.
Primeiramente, abre o ltimo projeto que criamos. No formulrio que criamos, adicione
um boto de Imprimir e nomei-o como CmdImprimir.

124

No evento Load do boto, adicione o seguinte cdigo:


Dim Banco As Database
Dim Tabela As Recordset
Dim Linha As Integer
Set Banco = OpenDatabase("C:\trabalho\dbcurso.mdb")
Set Tabela = Banco.OpenRecordset("Clientes", dbOpenTable)
Linha = 1
Do While Not Tabela.EOF
If Linha = 1 Then
Cabecalho
End If
Linha = Linha + 1
Printer.Print Tab(5); Tabela!codigo;
Printer.Print Tab(15); Tabela!nome;
Printer.Print Tab(45); Tabela!endereco;
Printer.Print Tab(65); Tabela!datanasc;
Printer.Print Tab(93); Tabela!rg;
Printer.Print
If Linha = 50 Then
Printer.NewPage
Linha = 1
End If
Tabela.MoveNext
Loop

125

Printer.EndDoc
Agora, crie um subprocedimento denominado Cabealho, que ter a funop de
imprimir o cabealho do relatrio toda vez que uma nova pgina comear a ser impressa.
Neste subprocedimento, insira o seguinte cdigo:
Printer.Font = "Arial"
Printer.FontBold = True
Printer.FontSize = 11
Printer.Print Tab(35); "Relatrio de Clientes"
Printer.Print
Printer.Print Tab(5); "Cdigo";
Printer.Print Tab(15); "Nome";
Printer.Print Tab(40); "Endereo";
Printer.Print Tab(60); "Data de Nascimento";
Printer.Print Tab(85); "RG";
Printer.FontBold = False
Bem, vamos comear pelo evento Load do boto CmdImprimir.Primeiramente,
declaramos as variveris:
Dim Banco As Database
Dim Tabela As Recordset
Dim Linha As Integer
Uma para o banco de dados, outra para a tabela, e outra referente a um contador de
linhas que criamos para limitarmos o nmero de linhas impressas por pgina em 50, quando
exceder, o programa ir passar para uma nova pgina.
Depois disto, instanciamos as variveis do banco de dados e da tabela:
Set Banco = OpenDatabase("C:\trabalho\dbcurso.mdb")
Set Tabela = Banco.OpenRecordset("Clientes", dbOpenTable)
E dizemos que a linha inicial ser a 1, atribuindo o valor 1 a varivel Linha.
Linha = 1
Feito isso, iniciar um ciclio, a qual imprimir um registro da tabela por vez, enquando a
tabela no chegar no final. Assim que tentarmos nos mover para um registro maior que o
ltimo, o ciclio interrompido e a impresso encerrar:
Do While Not Tabela.EOF

126

Na linha seguinte, verificamos se a varivel Linha tem o valor 1, o que quer dizer que
estamos comeando uma nova pgina, se tiver ela ir chamar o subprocedimento
Cabealho:
If Linha = 1 Then
Cabecalho
End If
Vejamos agora o cdigo existente no subprocedimento chamado Cabealho.
Printer.Font = "Arial"
Printer.FontBold = True
Printer.FontSize = 11
Printer.Print Tab(35); "Relatrio de Clientes"
Printer.Print
Printer.Print Tab(5); "Cdigo";
Printer.Print Tab(15); "Nome";
Printer.Print Tab(40); "Endereo";
Printer.Print Tab(60); "Data de Nascimento";
Printer.Print Tab(85); "RG";
Printer.FontBold = False
As 3 primeiras linhas se referem ao tipo, estilo e tamanho da fonte, Font, FontBold e
FontSize; que se referem nessa ordem Nome da Fonte, Fonte em negrito e tamanho da
fonte. Sendo assim, escolhemos para o cabealho a fonte Arial, que ser em negrito, j
que estamos escolhendo a propriedade FontBold como True. O tamanho da fonte ser
igual a 11, j que definimos a propriedade FontSize com 11.
As prximas linhas se referem a impresso do cabealho em si, onde usamos a funo
auxiliar Tab para posicionar a impresso na coluna desejada.
Uma observao que tenho que fazer aqui quanto linha que tem um Print.Print sem
nada imprimir. Isto seria um modo de deixar uma linha em branco aps o ttulo do
relatrio. Outra o ;(Ponto e Vrgula) no final de todas as linhas de impresso. Colocando
esse ; (Ponto e Vrgula) fazemos com que a impresso continue na mesma linha. Ou seja, a
prxima instruo Print que usarmos aps o ; (Ponto e Vrgula) ser impressa na mesma
linha. A impresso s passar para a linha seguinte, quando usarmos o mtodo Print sem
o ; (Ponto e Vrgula).
Terminamos o subprocedimento do cabealho, fazendo com que a fonte passe do negrito
para o normal, j que terminamos a impresso do relatrio e precisamos que os registros
no sejam impressos em negrito:
Printer.FontBold = False
Retornando so evento Load do boto CmdImprimir, temos o restante do cdigo:
Linha = Linha + 1
Printer.Print Tab(5); Tabela!codigo;
127

Printer.Print Tab(15); Tabela!nome;


Printer.Print Tab(45); Tabela!endereco;
Printer.Print Tab(65); Tabela!datanasc;
Printer.Print Tab(93); Tabela!rg;
Printer.Print
If Linha = 50 Then
Printer.NewPage
Linha = 1
End If
Tabela.MoveNext
Incrementamos a varivel Linha em 1, j que cada ciclo ser impressa uma linha:
Linha = Linha + 1
As prximas linhas se referm impresso da linha(registro) em si:
Printer.Print Tab(5); Tabela!codigo;
Printer.Print Tab(15); Tabela!nome;
Printer.Print Tab(45); Tabela!endereco;
Printer.Print Tab(65); Tabela!datanasc;
Printer.Print Tab(93); Tabela!rg;
Printer.Print
Depois delas, temos a seguinte verificao:
If Linha = 50 Then
Printer.NewPage
Linha = 1
End If
Se a linha for igual 50, ento usamos o mtodo NewPage para passarmos para uma
nova pgina, e conseqentemente, deveremos atribuir o Valor 1 a varivel Linha. Pois
comearemos novamente a contar as linhas a partir de 1.
Depois de impresso o registro, passaremos para o prximo registro na tabela:
Tabela.MoveNext
O prximo comando o Loop e encerra o ciclo Do While:
Loop
Aps encerrado o ciclo, e todos os registros serem impressos, precisamos dizer a
impressora que a impresso encerrou. Para isso, usamos o mtodo EndDoc.
Printer.EndDoc

128

necessrio usar esse mtodo para encerrar a impresso, pois se no usssemos o


programa ficaria se comunicando com o Spool da impressora e os dados s seriam
impressos quando o programa fosse encerrado.

Criando relatrios com o Crystal Reports


A ferramenta Crystal Reports, da Seagate, sem dvida a ferramenta preferida pelos
desenvolvedores da atualidade para desenvolver relatrios. Isso por qu ele automatiza
vrias tarefas que o programador teria de fazer manualmente, caso fosse usar o Printer.
Voc pode selecionar um banco de dados de forma interativa e escolher quais campos
devem aparecer no relatrio, que ele monta automaticamente o relatrio pra voc.
Possui ainda um assistente que faz todo o trabalho pesado pra voc. Voc ter apenas
que arrumar alguns detalhes, se necessrio, no relatrio.
Criando um relatrio no Crystal Reports usando o assistente
Existem vrias verses do Crystal Reports espalhadas por a. A verso que iremos usar o
Crystal Reports Report Design Component .
Em outras verses do Crystal Reports, ele funciona como um programa separado onde
criamos os relatrios dentro dele mesmo. Esses relatrios, contituem um arquivo separado,
que ter de ser chamado pelo Visual Basic.
Com o Crystal Reports Report Design Component , voc cria os relatrios dentro do
prprio Visual Basic, e no h necessidade nenhuma de ter um arquivo separado para cada
relatrio. Esta , na minha opinio, a granda vantagem de usar essa verso.
Bem, deixando de rodeios e indo ao que interessa, o que primeiramente precisamos para
criar um relatrio usando o Crystal ter ele instalado. Feito isso, ele j ir aparecer nos
menus do Visual Basic.
Para no termos problemas com o uso do assistente, devemos adicionar um componente
ao projeto. V no menu Project, selecione Components e marque o controle Crystal
Report View Control. Este controle requerido pelo assistente quando ele cria o relatrio e
se voc no adicion-lo ter problemas srios ao encerrar o assistente. Esses problemas
srios incluem o Visual Basic fechar e voc perder tudo o que no foi salvo. Portanto, no
esquea de marcar tal componente.

129

Para adicionarmos um novo relatrio usando o Crystal Reports, acessamos o menu


Project e escolhemos a opo Add Crystal Reports 8.5.
Abrir ento uma janela perguntando se queremos criar o novo relatrio usando o
assintente, se queremos criar um relatrio vazio ou criar um relatrio a partie de outro
existente.
Alm disso, existe uma lista abaixo com vrios tipos de relatrios predefinidos para que
possamos escolher.

Criar um novo relatrio usando o assistente

Criar um novo relatrio em branco

Criar um novo relatrio a partir de um


relatrio j existente
Aqui temos uma lista de tipos de relatrios
predefinidos
Aqui exibido o LayOut do relatrio
predefinido escolhido na lista.

Como vamos criar nosso relatrio usando o assistente, marque a primeira opo e clique
em OK.
Feito isso, o assistente iniciar o processo:
130

Primeiramente, deveremos selecionar um banco de dados, de onde viro os dados do


relatrio. Para fazer isso, clicamos no boto Project. Aps clicarmos nesse boto, ir abrir
uma janela com vrias opes para nos conectarmos com diferentes bancos de dados.

Como estamos utilizando conexo com banco de dados via DAO, marque a opo DAO
e clique no boto Browse para selecionar um banco de dados ou digite o caminho do banco
de dados na caixa de texto.

131

Note ainda que existe uma caixa abaixo, onde podemos selecionar para abrir vrios tipos de
banco de dados diferentes. Como o banco de dados que iremos abrir Access, ento no
precisamos alterar.

132

Estando o nome do banco de dados e o tipo selecionado, podemos clicar no boto OK


para proseguirmos. Feito isso, abrir uma janela onde podemos selecionar o objeto do
banco de dados que desejamos, no nosso caso, a tabela Clientes.
Ateno: Neste exemplo selecionamos a tabela Clientes. No entanto, podemos
selecionar mais de uma tabela sem problemas. O ato de adicionar mais de uma tabela ao
relatrio no obriga o relatrio a ser baseado em todas as tabelas. Mas por sua vez, mantm
essas tabelas disponveis para usarmos no relatrio.

Estando esta tabela selecionada, j podemos clicar no boto OK. O assistente retornar
novamente para a primeira tela.
Para proseguir, clicamos no boto Next.

133

O assistente ento passar para o guia Fields, onde definimos quais campos aparecero
no relatrio:
Nesta lista esto
todos os campos que
podemos adicionar ao
relatrio. Para
adicionar um campo,
basta selecion-lo
nesta lista e clicar no
boto Add ->

O boto Add All->


coloca todos os
campos no relatrio
sem a necessidade de
termos que inserir um
por um.

O boto Remove <remove o campo


selecionado na lista de
campos a exibir no
rerlatrio

O boto <- Remove All


remove todos os campos
da lista de campos a
exibir no relatrio.

nessa lista que


ficam os campos que
escolhemos para
exibir no relatrio
Nesta caixa, podemos
selecionar
individualmente o
cabealho que ser
exibido134
para cada
campo.

Depois de adicionados os campos necessrios para o nosso relatrio e caso ele seja um
relatrio simples, j podemos finalizar, clicando no boto Finish. Veremos mais tarde ao
que se destinam os prximos passos do assintente.
Se voc j adicionou os campos que precisa no relatrio e no usar nenhum recurso
especial no seu relatrio, dever clicar no boto Finish. Feito isso, aparecer a seguinte
janela:
Aqui ele pergunta se
queremos que o assistente
crie um formuilrio que
servir como visualizao de
impresso. Caso voc queira
visualizar o relatrio antes de
imprimir, marque a opo
Yes.
Aqui ele pergunta se voc
que o assistente modifique as
propriedades de projeto para
que o formulrio de
visualizao de impresso
seja o objeto inicial do
projeto(StartUp Object).
Caso voc queira, marque
Yes. Geralmente usamos No.

Depois que voc selecionar as opes que voc deseja, clique em OK.

135

Veja que o assistente criou um Relatrio(Report) com o nome CrystalReports1.


Nomeio-o como RptClientes. Caso j tivssemos um relatrio com o nome de
CrystalReports1, ele nomearia como CrystalReports2, e assim sucessivamente.
Note tambm que ele criou um formulrio como o nome Form1. Se j tivssemos um
formulrio com esse nome, ele criaria um com o nome de Form2 e assim sucessivamente.
Nome-o para FrmRelCli. Veja que esse formulrio funciona como visualizao dos
relatrios. Assim, quando precisarmos imprimir um relatrio criado a partir do Crystal,
basta chamar o formulrio que o assistente criou para esse relatrio atravs do mtodo
Show. O formulrio far toda a parte de imprimir o relatrio para ns.
A janela abaixo mostra uma pr-visualizao que foi criada pelo assistente do Crystal
em um formulrio. Ela oferece recursos de Zoom, mudana de pgina, pesquisa e ainda
oferece recursos para alternarmos entre os grupos, caso estejamos trabalhando com
relatrios que contenham grupos.

Depois de renomear o nome do relatrio e o do formulrio que o assistente criou, voc


tambm deve renomear o nome no cdigo do formulrio que o assistente criou. Nesse
cdigo ele faz referncia ao relatrio que o assistente criou. Como
o nome
Aqui modificamos
a declarao est
apontando
desse relatrio, tambm temos de fazer o mesmo no cdigo. Apara
nica
linha
que
teremos
de que
o objeto CrystalReports1,
foi criado pelo assistente. Como
modificamos o nome, faa com que
ela aponte para o novo objeto,
136 no
nosso caso, RptCli.(Dim Report as
RptCli).

alterar na declarao, onde declarado um objeto do tipo Report(relatrio). Altere o nome


para o novo nome que voc atribuiu ao relatrio.

Essa nica linha que teremos de alterar nesse cdigo para que ele funcione
perfeitamente. Essa mudana s necessria por que alteramos o nome do objeto Report.
Feito essa modificao, talvez voc queira fazer alguns ajustes no Layout do relatrio.
Um relatrio dividido em vrias sees. Veremos agora a funo de cada uma delas.

A seo Report Header o cabealho do relatrio. No confunda cabealho do relatrio


com cabealho da pgina. Pois o cabealho da pgina impresso sempre antes de uma

137

pgina ser impressa. J o cabealho do relatrio ser impresso somente uma vez, antes de
qualquer pgina ser impressa.
A seo Page Header o cabealho de pgina e como j falamos anteriormente impressa
sempre que iniciada uma nova pgina. Usamos esta seo para colocar os cabealhos para
os campos, alm de outras informaes.
A seo Details(detalhe) a mais importante do relatrio. nela que iro os dados que
compem o relatrio. Como por exemplo, os campos nome, endereo, etc.
A seo Report Footer o rodap do relatrio. Ou seja, o que ser impresso, no final do
relatrio, aps todas as pginas serem impressas.
A seo Page Footer o rodap da pagina. o que ser impresso no fim de cada pgina.
Usamos esta seo para imprimir, por exemplo, os nmeros de pgina. Ao criar um
relatrio pelo assistente, o Crystal automaticamente insere uma funo, para retornar o
nmero de pgina nesta seo.

Na caixa de ferramentas a esquerda podemos ver os controles disponveis para inserir


nos relatrios criados pelo Crystal

Os controles mais importantes so:


Text Objext Um simples objeto de texto que tem a mesma funo do objeto Label
nos formulrios.
Line Object Serve para traarmos uma linha reta no relatrio.
Alm desses recursos, o Crystal ainda nos oferece recursos de poder inserir campos
especiais, como hora, data, etc. Vejamos alguns:

138

Exibe a data
Exibe a hora
Exibe a data de modificao
Exibe a hora da modificao
Exibe o nmero de registro
Exibe o nmero da pgina
Exibe o numero total de pginas

Trabalhando com filtros no Crystal Reports


comum as vezes o programador se deparar com um relatrio em que a aplicao de um
filtro necessria. Com o objeto Printer, temos a liberdade de imprimir somente os dados
que nos interessam. Digamos que voc precise imprimir um relatrio com nomes, em que a
impresso do registro se basear em um nome que ser digitado em um TextBox. Sero
aceitos nomes que iniciem com a string digitada na Textbox. Por exemplo, se voc digitar a
string JO na TextBox, podero ser impressos no relatrio nomes como JOAO, JOS,
JOVANA e todos outros nomes que comecem com JO. Crie um formulrio com a
aparncia da figura abaixo:

Nomeie a TextBox com o nome de TxtFiltro, o boto de impresso com o nome de


CmdImprimir. Crie um subprocedimento denominado Cabealho e insira o seguinte
cdigo:
Printer.Font = "Arial"
Printer.FontBold = True
Printer.FontSize = 11
Printer.Print Tab(35); "Relatrio de Clientes"
Printer.Print
Printer.Print Tab(5); "Cdigo";
Printer.Print Tab(15); "Nome";
Printer.Print Tab(40); "Endereo";
Printer.Print Tab(60); "Data de Nascimento";
Printer.Print Tab(85); "RG";
Printer.FontBold = False

139

No evento Load do boto CmdImprimir, insira o seguinte cdigo:


Dim Banco As Database
Dim Tabela As Recordset
Dim Linha As Integer
Set Banco = OpenDatabase("C:\trabalho\dbcurso.mdb")
Set Tabela = Banco.OpenRecordset("Clientes", dbOpenTable)
Linha = 1
Do While Not Tabela.EOF
If Mid(Tabela!nome, 1, Len(TxtFiltro.Text)) = TxtFiltro.Text Then
If Linha = 1 Then
cabecalho
End If
Linha = Linha + 1
Printer.Print Tab(5); Tabela!codigo;
Printer.Print Tab(15); Tabela!nome;
Printer.Print Tab(45); Tabela!endereco;
Printer.Print Tab(65); Tabela!datanasc;
Printer.Print Tab(93); Tabela!rg;
Printer.Print
If Linha = 50 Then
Printer.NewPage
Linha = 1
End If
End If
Tabela.MoveNext
Loop
Printer.EndDoc
O cdigo acima oferece um modo para filtrarmos alguma string com base no que for
digitado na TextBox.. Antes de o registro ser impresso, verificamos se a string inicial do
campo Nome do registro atual bate com o que foi digitado na Textbox.
If Mid(Tabela!nome, 1, Len(TxtFiltro.Text)) = TxtFiltro.Text Then
Atravs da funo Mid, que retorna uma substring de uma string, pegamos uma substring
inicial do campo Nome, com o tamanho da string que foi digitada em TxtFiltro. Se a
condio for verdadeira, tudo o que estiver no bloco If ser executado e o registro ser
impresso. Caso contrrio, o programa passar ao prximo registro atravs do mtodo
140

MoveNext do objeto Recordset Tabela. Depois disso, encontrado o comando Loop e o


ciclo reiniciado, passando o prximo registro agora pela verificao. Desta forma, s os
registros que coincidirem sero impressos. Rode o projeto e veja o resultado.
Como voc pode confirmar, com o objeto Printer podemos controlar registro registro o
que est sendo impresso. A questo ento : Como podemos criar relatrios com filtros no
Cystal?
Bem, na verdade existem muitas maneiras de se fazer isso. Algumas delas so at mesmo
bem complexas.
Ao definir uma tabela para um relatrio, quando voc o cria, seja pelo assistente ou outro
mtodo, o relatrio ter os dados da tabela naquele exato momento. Portanto, modificaes
feitas na tabela aps termos definido os dados no relatrio, no sero refletidas no relatrio.
Muitas pessoas usam uma tabela temporria (embora muita gente no aconselhe) para
filtrar somente os dados que se deseja em uma tabela (tabela temporria) e atribuem essa
tabela ao relatrio. Alguns problemas com que voc vai se deparar, so:
1 - A tabela deve ser atribuda dinamicamente, ou seja, em tempo de execuo.
2 - Uma vez atribudo a tabela ao relatrio, ela dever ser atribuda novamente cada vez
que o filtro for modificado. Caso contrrio, ficar com os dados existentes da primeira vez
que voc atribuiu a tabela ao relatrio.
3 - O uso de um relatrio com uma tabela temporria pode tornar-se lento em relatrios
com muitos registros.
O uso de tabelas temporrias no aconselhado por oferecer um desempenho baixo
(baixa velocidade) em impresso de relatrios com muitos registros. No entanto, talvez
voc se depare com alguma situao em que voc no v outra sada. Por exemplo. Voc
quer criar uma planilha sobre o controle de vendas mensal, no Crystal. Uma soluo seria
criar uma tabela exatamente como seria a planilha com os dados que voc que e jogar essa
tabela para o Crystal. Vejamos como poderamos fazer isso. Primeiramente, crie a tabela
temporria que voc ir usar para imprimir os dados da planilha. Depois, utilize o assistente
do Crystal para adicionar essa tabela ao relatrio. Supondo que voc criou uma tabela com
o nome TabTemp, e criou um relatrio com o nome RptPlan, poderimos usar o seguinte
cdigo:
Dim Banco as Database
Dim Tabela as RecordSet
Set Banco = OpenDatabase(C:\Trabalho\Dbcurso.mdb)
Set Tabela = Banco.OpenRecordset(TabTemp,Dbopentable)
<
Aqui poderiam ser utilizados comandos
para efetuar o filtro na tabela. Mas isto
voc quem vai avaliar, e atravs do mtodo
Delete do objeto RecordSet, deletar os registros
que no devem aparecer no relatrio.

141

>
RptPlan.Database.SetDataSource Tabela
RptPlan.PrintOut
Esse cdigo tem dois mtodos do objeto Crystal Report que ainda no conhecemos. Um
deles o mtodo SetDataSource do objeto Database, que membro do objeto Crystal
Report, ou seja, do relatrio que criamos .
O objeto SetDataSource tem a funo de atribuir uma origem de dados ao Crystal
Reports. Uma origem de dados pode ser uma tabela ou uma instruo SQL. Podemos, por
exemplo, criar um objeto RecordSet, instanci-lo e atribuir ao relatrio. Foi o que fizemos
no exemplo acima. Criamos um objeto Recordset chamado Tabela, instanciamos esse
objeto com a tabela que queremos usar no relatrio. Como essa tabela temporria,
efetuamos as possveis operaes de excluso para deixar na tabela somente os dados que
nos interessam. Aps isso, utilizamos o mtodo SetDataSource, que, como voc pode ver,
oferece uma sintaxe muito simples:
RptPlan.Database.SetDataSource Tabela
No nosso caso, Tabela o objeto RecordSet que representa a tabela TabTemp.
Depois disso, entra outro mtodo que ainda no conhecemos, mas que tambm muito
simples. o mtodo PrintOut do objeto Crystal Report. Este mtodo envia diretamente o
relatrio para a impressora.
Uma observao a ser feita e um problema bem comum a de que quando voc *chama
um relatrio , fica armazenado nele o que foi impresso pela primeira vez. Ento se voc
voltar a imprimir esse relatrio sem decarreg-lo da memria, e aplicar outro filtro, vai ver
que os dados impressos so iguais ao que voc imprimiu na primeira vez.
Claro que se voc aplicar o filtro, chamar o relatrio, imprimir, fechar a aplicao e
voltar a imprimir o relatrio, tudo funcionar perfeitamente. Mas, imagine que voc tem um
formulrio com um TextBox de filtro e um boto de impresso. Ento voc cria uma rotina
para visualizar a impresso. Provavelmente, voc ir dar ao usurio a alternativa de digitar
um filtro e clicar no boto de impresso para ver o resultado, para depois imprimir. Ento o
usurio poderia testar vrias vezes o filtro selecionado que ele quer. O que acontece aqui
que assim que ele atribuir uma origem de dados ao relatrio pela primeira vez, os dados do
primeiro filtro que ele atribuir ao relatrio, sero sempre os exibidos quando ele for acessar
o relatrio novamente. Para contornar esse problema, devemos sempre descarregar o
relatrio da memria, atravs do comando Unload, depois que ele foi usado. Exemplo:
Unload RptCli
Isso descarrega imediatamente o relatrio da memria. Ateno: Voc deve apenas
decarregar o relatrio da memria, aps o termino de seu uso. Se o relatrio estiver sendo
exibido ou um objeto CRViewer, que o objeto que o assistente cria para podermos
142

visualizar os dados antes de imprimir, estiver exibindo dados do relatrio e voc


descarregar o relatrio da memria, no haver visualizao dos dados. Uma dica: No
formulrio de visualizao (aquele que o assistente cria pra voc e que possibilita visualizar
os dados), descarregue o relatrio da memria no evento Unload. Exemplo:
Private Sub Form_Unload(Cancel As Integer)
Unload RptCli
End Sub
*chamar um relatrio O ato de chamar um relatrio no est necessariamente ligado ao
comando Load. Podemos tambm chamar um relatrio atravs do comando Load, mas o
que acontece na verdade que todos os objetos do projeto so automaticamente carregados,
quando o programa iniciado. Assim, todo objeto fica na memria para um acesso mais
rpido quando precisarmos desse objeto. No caso do relatrio, temos a necessidade de
descarreg-lo da memria para que os dados impressos da ltima vez sejam substitudos
pelos novos. No entanto, ele automaticamente carregado quando fizermos qualquer
referncia a ele, usando um mtodo ou propriedade.
Continuando, veremos como criar um relatrio com filtro sem precisar utilizar uma
tabela temporria. O que se torna mais simples, rpido e organizado. Primeiramente, crie
um novo projeto e adicione um formulrio como o que j criamos anteriormente com a
aparncia semelhante ao da figura abaixo.

Nomeie a TextBox com o nome de TxtFiltro, o boto de impresso com o nome de


CmdImprimir.
Depois, adicione o relatrio RptCli, j criado anteriormente, ao projeto. Feito isso,
codifique o evento Load do boto CmdImprimir da seguinte maneira:
Dim Banco as Database
Dim Tabela as RecordSet
Set Banco = OpenDatabase(C:\Trabalho\Dbcurso.mdb)
If TxtFiltro.Text<> then
Set Tabela = Banco.OpenRecordset(Select * from Clientes Where Nome Like
& TxtFiltro.Text & * )
Else
Set Tabela = Banco.OpenRecordset(Clientes)
End if
RptPlan.Database.SetDataSource Tabela
RptPlan.PrintOut

143

Primeiro, declaramos 2 variveis. Um objeto Database e outro RecordSet.


Dim Banco as Database
Dim Tabela as RecordSet
Abrimos o banco de dados:
Set Banco = OpenDatabase(C:\Trabalho\Dbcurso.mdb)
Depois disso, verificamos de a TextBox TxtFiltro no est vazia:
If TxtFiltro.Text<> then
Se ela no estiver vazia, abrimos a tabela usando uma instruo SQL(Explicarei logo
aps) que abre a tabela j com o filtro aplicado. Este filtro feito com base nos primeiros
caracteres digitados em TxtFiltro:
Set Tabela = Banco.OpenRecordset(Select * from Clientes Where Nome Like
& TxtFiltro.Text & * )
Caso contrrio:
Else
Set Tabela = Banco.OpenRecordset(Clientes)
Abrir a tabela normalmente, sem nenhum filtro a aplicar, o que quer dizer que se no
difitarmos nada na TextBox, todos os registros sero exibidos no relatrio.
Feito essa verificao, o bloco If encerrado:
End if
Depois disso, atribumos a tabela com ou sem o filtro ao nosso relatrio e jogamos tudo
para a impressora:
RptPlan.Database.SetDataSource Tabela
RptPlan.PrintOut
Como voc pode ver um cdigo bem simples e a nica parte do cdigo desconhecida
pelo aluno o uso de uma instruo SQL para abrir e filtrar a tabela. No propsito do
nosso curso abordar sobre instrues SQL, no entanto, irei abordar ela sobre a questo de
filtros, sendo que um recurso que no complexo, mas ao mesmo tempo um recurso
muito poderoso.

Utilizando instrues SQL para aplicar filtros

144

Para entender como funciona uma instruo SQL, primeiramente olhe para a linha a
seguir:
Select * From Clientes Where Nome = joao
Veremos o que querem dizer cada uma dessas palavras:
Select Quer dizer que estamos selecionando campos de uma tabela. O * existente depois
da palavra Select quer dizer que todos os campos foram selecionados. Poderamos escolher
somente Nome e Cdigo, caso quisssemos. Neste caso, o farmos demilitando os campos
por vrgula. Exemplo:
Select Cdigo, Nome From Clientes
No nosso curso utilizaremos apenas o *.
From Especifica a origem de dados. O que vir aps From o nome da tabela de onde
viro os dados.
Where Esta clusula o motivo pela qual fizemos esse superficial estudo sobre
instrues SQL . A clusula Where nos permite aplicar um filtro tabela com base no
critrio especificado. O que ir aps clusula Where o critrio de filtro. Olhamos
novamente para esta linha:
Select * From Clientes Where Nome = joao
O que podemos concluir que:
Selecionamos todos os campos da tabela Clientes e filtramos a tabela, de forma que s o
registro com nome = joao ser exibido.
Quando estamos especificando critrios para um campo do tipo String, o valor deve estar
entre (aspas simples). No caso de um valor numrico, no so necessrias as
aspas.Exemplo:
Select * From Clientes Where Cdigo = 2
Um recurso muito til que a linguagem SQL nos oferece a possibilidade de procurar
registros pelos seus caracteres iniciais ou finais, ou, at mesmo, por uma Substring dentro
de uma string. Esse recurso muito simples de usar. Utilizando o operador LIKE no lugar
do sinal de igual, com um * no incio ou no final da string a procurar, podemos pesquisar
pelos caracteres iniciais ou finais, respectivamente. Podemos tambm, inserir um * no
incio e outro no final da string. Estaremos desta forma, pesquisando qualquer registro que
contenha a string especificada. Para esclarecer um pouco sobre isso, d uma olhada nos
exemplo seguir:
Select * From Clientes Where Nome Like Jo*

145

Ir selecionar todos os registros que tiverem no campo nome nomes que comecem com
J:Joo, Jos,Jovana, etc...
O * no final da string indica que estamos ignorando os ltimos caracteres.
Select * From Clientes Where Nome Like *o
O exemplo acima ir selecionar todos os registros em que o campo Nome termina com
ao. Joo, Estevo, etc. Ignorando desta forma, os primeiros caracteres.
Select * from Clientes Where Nome Like *ar*
O exemplo acima procura um registro em que o campo Nome contenha a string ar,
ignorando os primeiros e os ltimos caracteres.
Associar a linguagem SQL aos nossos programas para filtrar dados oferece economia de
cdigo e eficncia. Nosso curso no se destina abordar sobre a linguagem SQL, no
entanto achei importante abordar sobre a questo de filtros.
Voc tambm pode, ao usar uma instruo SQL, utilizar todos os outros operadores do
Visual Basic para especificar opes de critrio:
Select * from Clientes Where Codigo > 2 And Codigo < 4
O exemplo acima retornar o registro que tenha no campo Codigo um valor igual a 3.
Alm disso, Muitas funes do Visual Basic tambm funcionam dentro de uma instruo
SQL. A nica diferena ser que o aluno dever substituir as aspas duplas pelas aspas
simples .
A forma como usamos as instrues SQL dentro do Visual Basic muito simples. Basta
voc a usar aonde colocaria o nome da tabela. Por exemplo:
Set Tabela = Banco.OpenRecordset(Select * From Clientes Where Nome =
Maria)
Agora que j temos uma noo sobre instrues SQL, iremos analisar, quela linha do
cdigo que usamos para filtrar o relatrio:
Set Tabela = Banco.OpenRecordset(Select * from Clientes Where Nome = & TxtFiltro.Text &
* )
uma instruo SQL simples. O nico fato que merece um esclarecimento a concatenao
g que usamos para a instruo SQL.
Como temos um Textbox e o filtro ser com base nesse Textbox, logo teremos que
concatenar a instruo SQL com o contedo de TxtFiltro, atravs da propriedade Text.
(Select * from Clientes Where Nome = & TxtFiltro.Text
Aps o sinal de igual(=), usamos uma (aspas simples), pois o campo a qual estamos
filtrando a tabela Text, que funciona como se fosse uma varivel String, por isso a
necessidade das (aspas simples). Como ainda iremos concatenar a instruo SQL com o

146

valor contido em TxtFiltro, apenas abrimos as aspas simples, deixando para fechar logo
aps a concatenao com a Textbox TxtFiltro.
Depois da (aspas simples), utilizamos a aspas duplas para fechar a string, e,
concatenamos, atravs do operador &, com o texto contido em TxtFiltro:
& TxtFiltro.Text
Para facilitar o entendimento, digamos que o usurio tenha digitado na Textbox, o string
ma. Essa string ser concatenada com a string esquerda dela atravs do operador &.
Isso resultar na seguinte String:
Select * from Clientes Where Nome Like ma
Como voc viu, ainda faltam o * e uma aspa simples no final da expresso para que a
instruo SQL funcione. isto que faz o restante da expresso:
& *
Como resultado final, tudo o que for digitado na Textbox ser pesquisado no campo
nome da tabela Clientes. Se os primeiros caracteres coincidirem, o registro ser aceito.

Visualizando os dados antes de imprimir


Em um relatrio mais profissional, temos a necessidade de visualizar os dados antes de
imprimi-los. E o Crystal nos primite isso, atravs do objeto Crviewer. No nosso curso,
iremos aprender a visualizar os dados, atravs do formulrio que o assistente cria para
podermos visualizar os dados. Desta forma, aplicaremos o filtro que precisamos no cdigo
desse formulrio e, bastando apenas, a alterao de uma propriedade, conseguimos o
resultado esperado.
Voltando quele nosso exemplo do filtro anterior. Crie um novo projeto. Crie um novo
relatrio no Crystal(no se esquea de adicionar o controle crviewer na caixa de
componentes). Este formulrio deve ter como base a tabela Clientes, existente no banco
de dados bCurso. Quando o assistente perguntar se voc quer criar um formulrio de
visualizao, selecione a opo Yes.

Nomeie o relatrio como RptCli e o formulrio como FrmRelCli. Agora observe o


cdigo criado pelo assistente no formulrio FrmRelCli:

147

Bem, a primeira coisa que devemos fazer nesse cdigo, retirar a linha existente na
seo General-Declarations do formulrio, j que renomeamos o nome do formulrio e
agora essa declarao no aponta para lugar algum.
Analisando o cdigo, onde podemos nesse cdigo aplicar o nosso filtro?
A resposta : No evento Load.
Claro que colocar Um Textbox nesse formulrio para digitar o filtro no seria o correto,
j que esse um formulrio prprio para a visualizao. Como esse um exemplo prtico,
faamos o seguinte.
Criamos um novo formulrio, como o que j criamos anteriormente para aplicar filtros,
com a seguinte aparncia:

Nomeie o formulrio como FrmFiltro.O Textbox como TxtFiltro e o boto de


visualizao de impresso como CmdVisualizar.
Usaremos esse formulrio apenas para informar o filtro ao relatrio. Sendo assim, a
nica coisa que teremos de fazer codificar o evento Click do boto CmdVisualizar para
que chame o formulrio de visualizao(FrmRelCli):

Agora que j chamamos o formulrio de visualizao, vamos aplicar o filtro no evento


Load desse formulrio, com base no que foi digitado pelo usurio no objeto TxtFiltro do
formulrio FrmFiltro. Aplicamos o filtro da mesma maneira como j fizemos
anteriormente, quando mandamos os dados direto para a impressora.(No se esquea de
marcar a biblioteca do D.A.O., na caixa de referncias).

148

Dim Banco as Database


Dim Tabela as RecordSet
Set Banco = OpenDatabase(C:\Trabalho\Dbcurso.mdb)
If FrmFiltro.TxtFiltro.Text<> then
Set Tabela = Banco.OpenRecordset(Select * from Clientes Where Nome like &
FrmFiltro.TxtFiltro.Text & * )
Else
Set Tabela = Banco.OpenRecordset(Clientes)
End if
RptCli.Database.SetDataSource Tabela
A nica diferena est em 2 linhas nesse cdigo, onde fizemos referncia ao objeto
TxtFiltro do formulrio FrmFiltro. O Visual Basic trata os objetos de um formulrio
como variveis pblicas. Ento podemos acessa-los de qualquer parte do projeto, bastando
anteceder seu nome pelo nome do formulrio seguido de .(ponto).
FrmFiltro.TxtFiltro.Text
Enfim, com esse cdigo acima, j conseguimos obter o filtro que precisamos. Com isso,
j podemos jogar os dados para a impressora. Mas no isso que queremos agora. O que
queremos visualizar os dados antes de imprimir. Olhando para o restante do cdigo do
evento, s temos que alterar uma propriedade:
Screen.MousePointer = vbHourglass
CRViewer1.ReportSource = Report
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
Aqui voc troca pelo nome do formulrio que ir usar
Alterando, ficar:
Screen.MousePointer = vbHourglass
CRViewer1.ReportSource = RptCli
CRViewer1.ViewReport
Screen.MousePointer = vbDefault
Agora altera a propriedade WindowsState do formulrio atual para 2 - Maximized para
dar uma aparncia mais profissional visualizao de impresso.
No podemos nos esquecer de descarregar o relatrio da memria. Podemos fazer isso,
no evento Unload do relatrio de visualizao:

149

Rode o projeto e confira o resultado.


1

Autor:Dieimes Viana Corra


Email:dieimes_c@yahoo.com.br
Fone: (051) 91538814

150