Escolar Documentos
Profissional Documentos
Cultura Documentos
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.
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)
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.
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.
Os Controles
Ao abrirmos o ambiente do Visual Basic, podemos ver esquerda a Caixa de Ferramentas.
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.
10
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
0
1
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
14
15
99
13
Errado
Certo
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.
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
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
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
{
|
}
~
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 :
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
Eventos do OptionButton
Os eventos do OptionButton so praticamente os mesmo usados pelas TextBox, sendo
que no h nenhum em especial.
O Frame
22
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
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.
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
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.
26
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
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:
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:
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.
30
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
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
, . : ; - /
<
>
\
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.
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:
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
, 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
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
Sempre que
clicarmos em um
objeto ou clicarmos
em exibir cdigo
ela se abrir.
Boto de
Exibir
Cdigo
Variveis
Voc j deve conhec-las da matemtica, onde geralmente tnhamos a varivel X ou
varivel Y.
41
Descrio
Numrico Inteiro
Numrico Inteiro
Numrico Inteiro
Numrico real
Double
Numrico real
Currency
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
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
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.
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.
Modificadores de acesso
48
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
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:
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
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 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.
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.
Soluo:
Dim Contador As Integer
59
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
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
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
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.
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
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)
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
73
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
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
78
m
y
d
w
ww
h
n
s
Ms
Dia do ano
Dia
Dia da semana
Semana
Hora
Minuto
Segundo
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.
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.
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
83
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
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
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
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
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
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"
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
.
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
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
Veja abaixo a relao das palavras-chaves aceita pela funo Format para
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
>
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.
99
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
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.
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.
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
104
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
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.
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.
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
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.
111
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.
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
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.
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
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
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
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
128
129
Como vamos criar nosso relatrio usando o assistente, marque a primeira opo e clique
em OK.
Feito isso, o assistente iniciar o processo:
130
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 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 ->
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
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.
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.
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
139
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
143
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.
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:
148
149
150