Está en la página 1de 10

5.

NOES DE PROGRAMAO
VARIVEIS

As variveis, em Visual Basic, so classificadas de acordo com o esquema a seguir:

Tabela 14

ESCOPO VIDA DECLARAO


Local Dinmica ou Esttica Dim, Static (dentro de uma procedure)
Mdulo Esttica Dim (seo declarations de um formulrio ou mdulo)
Public Esttica Public (seo declarations de um mdulo)

Variveis Locais so declaradas dentro de uma procedure (Sub ou Function) e so vistas


apenas por esta procedure. Variveis locais podem ser estticas, se declaradas com a palavra
Static, ou dinmicas, se declaradas com Dim. Variveis dinmicas perdem o valor quando a
procedure encerrada, ou seja, o espao de memria alocado quando a procedure iniciada e
desalocado quando do seu encerramento. Todas as variveis no Visual Basic so inicializadas com
o valor zero. Variveis dinmicas so um timo recurso para reduzir o espao de memria e devem
ser usadas sempre que possvel.

Variveis de Mdulo so sempre estticas e devem ser declaradas na seo


Declarations de um mdulo ou formulrio com a palavra reservada Static. Embora sejam
estticas, tais variveis so vistas por todas os procedimentos do mdulo em que foram
declaradas, mas no por procedures externas a ele.

Variveis Pblicas tambm so declaradas em um mdulo e, alm de serem estticas,


so vistas por todas os procedimentos de todos os formulrios e mdulos do projeto. Quando voc
no souber como declarar uma varivel, declare-a como Public, mas bom ter em mente que esta
varivel exige um espao de memria constante. Portanto, excessivas variveis Pblicas podem
acarretar em falta de memria.

Variveis Pblicas no podem ser declaradas dentro de um formulrio. Da mesma forma, a


palavra reservada Dim no pode ser usada na seo declarations de um mdulo.

Os tipos de variveis reservados pelo Visual Basic so os seguintes:

Tabela 15

TIPO DESCRIO VARIAO (APROXIMADA)


Integer 2 Bytes, inteira 32.768
Long 4 Bytes, inteira 2.147.483.648
Single 4 Bytes, ponto flutuante 1,4.10-45 a 3,4.1038
Double 8 Bytes, ponto flutuante 1,798.10-324 a 4,94.10308
Currency 8 Bytes, ponto flutuante 922337203685477,58
String string 0 a 65.500
Variant - -

Por exemplo, uma varivel Public do tipo inteiro pode ser declarada da seguinte maneira:
Public Nome_da_Varivel As Integer

ARRAYS

Arrays so matrizes, ou variveis indexadas, em Visual Basic, declaradas de forma


semelhante a outras variveis. Arrays podem ser de qualquer tipo, inclusive tipos de dados
definidos pelo usurio. Tambm podem ser estticos, locais ou Pblicas.

Unidimensionais: Dim Soma (1 To 2). Este array ser constitudo por vinte nmeros:
Soma(1), Soma (2) ... Soma (20).

Bidimensionais: Public Mult (1 To 15, 1 To 15).

Multidimensionais: O Visual Basic adimite at 60 dimenses.

O Visual Basic permite a declarao de arrays dinmicos, que so usados quando no se


sabe antecipadamente o tamanho de um array. A utilizao de arrays dinmicos envolve dois
passos:

1. Declarar o array sem fazer referncia s dimenses: Dim DynArray ().


1. Redimensionar o array. Este passo s pode ser feito dentro de uma procedure:
ReDim DynArray (1 To 10).

A palavra reservada ReDim apaga todos os valores anteriores do array. Para evitar isto,
podemos usar a palavra Preserve: ReDim Preserve DynArray 1 To 10). Somente o limite superior
da ltima dimenso de um array dinmico pode ser alterado quando se usa Preserve.

No necessrio que o limite inferior de uma dimenso seja 1. Podemos declarar um array
da seguinte forma: Dim Matriz (-10 To 35, -5 To 20). Para no perdermos de vista quais so os
limites das dimenses de arrays, podemos usar duas funes:

UBound: retorna o maior ndice disponvel para a dimenso indicada. Sintaxe: UBound (array,
dimenso);
LBound: retorna o menor ndice disponvel para a dimenso indicada. Sintaxe: UBound (array,
dimenso).

Exemplo: Seja a matriz M(-3 To 4, -2 To 5). UBound (M, 1) retorna 4. LBound (M, 2) retorna
-2.

Em Visual Basic, arquivos que excedem 64 kBytes so denominados Huge Arrays (Arrays
Enormes). O limite mximo para estes arrays de 64 Mbytes (ou a memria do computador). No
existe nenhuma declarao especial para Huge Arrays. O Visual Basic cuida de tudo sozinho.
TIPOS DE DADOS DEFINIDOS PELO USURIO
Tipos de dados definidos pelo usurio so mais flexveis do que qualquer outro tipo. At
mesmo mais flexveis do que arrays dinmicos, pois podem incluir estes ltimos. Para usar estes
tipos de dados, declaramos, antes, o tipo, em um mdulo do projeto:

Type Agenda
Nome As String*50
Endereo As String*80
Telefone As String*11
End Type

A seguir, declaramos uma varivel esttica, local ou Public como pertencente ao tipo de
dados definido anteriormente.

Public MinhaAgenda (0 To 100) As Agenda

Tipos de dados definidos pelo usurio so colees de registros divididos em campos,


conforme a tabela a seguir.

Tabela 16

Registro NOME ENDEREO TELEFONE


0 Fernando Color Miami 354-6565
1 Fernando Henrique Braslia 253-8686
2 Anthony Blair 10, Downing Street, London 646-6868
... ... ... ...
100 Bill Clinton The White House 999-73474
EXEMPLO: UM BANCO DE DADOS
A utilizao mais clssica de tipos de dados definidos pelo usurio na construo de
bancos de dados. De fato, antigamente todos os bancos de dados deviam ser construdos desta
forma. Veremos que, embora o VB fornea excelentes ferramentas para construir e manter bancos
de dados, frequentemente necessrio construir pequenos bancos com as prprias mos. Isto
acontece porque, eventualmente, o banco de dados de que necessitamos muito pequeno para
justificar a utilizao da maquinaria de banco de dados do VB.

Inicie um novo projeto e insira alguns controles conforme a figura abaixo.

frmEndereos

txtUNome txtPNome

txtEndereo
txtUF
txtCidade

txtCEP
cmdAes()

cmdMover()

Insira um mdulo, renomeando-o para Endereos.bas, e declare as seguintes variveis:

Option Explicit

Type Endereo
PNome As String * 20
LName As String * 20
Endereo As String * 40
Cidade As String * 15
UF As String * 2
CEP As String * 5
End Type

Public CR As Endereo
Public NovoRegistro As Boolean
Public RegistroAtual As Integer
Public NmeroDeRegistros As Integer
Public RegistroAntigo As Integer
Public NomeArqCompleto As String
Public NumArquivo As Integer
Public Const NOMEARQ = "ENDEREO.DAT"
Note que Endereo o tipo de varivel definida pelo usurio, tendo os seguintes
campos: PNome, UNome, Endereo, Cidade, UF e CEP. CR a varivel pertencente ao tipo de
dados Endereo. As outras variveis so auxiliares.

A primeira linhas de botes de comando um array de controles, com ndices variando


entre zero e trs. A mesma coisa vale para a segunda linha de botes.

O arquivo de banco de dados, que chamaremos de ENDEREO.DAT, aberto no evento


Load do formulrio:

Private Sub Form_Load()

Dim Resposta As Integer

' Gera o caminho completo para o arquivo


NomeArqCompleto = App.Path & "\" & NOMEARQ
NumArquivo = FreeFile

'Abre o arquivo e calcula o nmero de registros


Open NomeArqCompleto For Random As #NumArquivo Len = Len(CR)
NmeroDeRegistros = (LOF(NumArquivo) / Len(CR))

' Se o arquivo est vazio


If NmeroDeRegistros = 0 Then
Resposta = MsgBox("Novo arquivo - iniciar a entrada de dados ?", vbYesNo, "New
file")
If Resposta = vbYes Then
NovoRegistro = True
Form1.Show
Call AdNovoEndereo
Else
Close (NumArquivo)
End
End If
Else ' Se o arquivo no est vazio, mostra o primeiro registro
RegistroAtual = 1
NovoRegistro = False
Call MostraRegistro(RegistroAtual)
End If

End Sub
As procedures AdNovoEndereo e MostraRegistro podem ser escritas no prprio
formulrio, seo General, ou no mdulo Endereo.bas:

Public Sub AdNovoEndereo()


' Adiciona um novo registro no final do arquivo
NmeroDeRegistros = NmeroDeRegistros + 1

RegistroAntigo = RegistroAtual
RegistroAtual = NmeroDeRegistros

cmdAction(0).Caption = "&Salvar"
cmdAction(1).Caption = "&Cancelar"

'Apaga contedo das caixas de texto.


txtPNome.Text = ""
txtUNome.Text = ""
txtEndereo.Text = ""
txtCidade.Text = ""
txtUF.Text = ""
txtCEP.Text = ""

txtUNome.SetFocus
End Sub

Public Sub MostraRegistro(Record As Integer)


'L o registro especificado e exibe o contedo
Get #NumArquivo, Record, CR

Atualiza o contedo das caixas de texto.


txtUNome.Text = CR.LName
txtPNome.Text = CR.PNome
txtEndereo.Text = CR.Endereo
txtCidade.Text = CR.Cidade
txtUF.Text = CR.UF
txtCEP.Text = CR.CEP
End Sub

A procedure para os comandos cmdAes faz uso, como sempre, da instruo Select ...
Case.

Private Sub cmdAes_Click(Index As Integer)


Dim Resposta As Integer

If NovoRegistro Then
Select Case Index
Case 0 ' Salvar.
Call SalvaRegistroAtual
NovoRegistro = False
cmdAes(0).Caption = "&Novo"
cmdAes(1).Caption = "&Deletar"
Case 1 ' Cancelar
RegistroAtual = RegistroAntigo
NovoRegistro = False
cmdAes(0).Caption = "&Novo"
cmdAes(1).Caption = "&Deletar"
Call MostraRegistro(RegistroAtual)
Case 2 ' Lista
frmList.Show
Case 3 ' Sair
Call ByeBye
End Select

Else
Select Case Index
Case 0 ' Novo
NovoRegistro = True
Call AdNovoEndereo
Case 1 ' Deletar
Resposta = MsgBox("Deletar este endereo ?", vbYesNo + vbQuestion)
If Resposta = vbYes Then
txtPNome.Text = ""
txtUNome.Text = ""
txtEndereo.Text = ""
txtCidade.Text = ""
txtUF.Text = ""
txtCEP.Text = ""
Call SalvaRegistroAtual
End If
Case 2 ' Lista
frmList.Show
Case 3 ' Sair
Call ByeBye
End Select
End If
End Sub

As procedures ByeBye e SalvaRegistroAtual devem ser escritas no mdulo ou na seo


General de frmEndereo:

Public Sub ByeBye()


Close #NumArquivo
Unload Form1
End Sub
Public Sub SalvaRegistroAtual()
CR.LName = txtUNome.Text
CR.PNome = txtPNome.Text
CR.Endereo = txtEndereo.Text
CR.Cidade = txtCidade.Text
CR.UF = txtUF.Text
CR.CEP = txtCEP.Text

Put #NumArquivo, RegistroAtual, CR


End Sub

Para finalizar a minha parte, falta a procedure associada aos botes cmdMover(), que
simplesmente gerencia o estado da varivel RegistroAtual e a exibio dos registros:

Private Sub cmdMove_Click(Index As Integer)


If NovoRegistro Then Exit Sub

' Salva o registro atual caso ele tenha sido modificado


Call SalvaRegistroAtual

Select Case Index


Case 0 'Primeiro registro
RegistroAtual = 1
Call MostraRegistro(RegistroAtual)
Case 1 ' Registro anterior
RegistroAtual = RegistroAtual - 1
If RegistroAtual < 1 Then
RegistroAtual = 1
Beep
MsgBox ("Primeiro registro!")
End If
Call MostraRegistro(RegistroAtual)
Case 2 ' Prximo registro
RegistroAtual = RegistroAtual + 1
If RegistroAtual > NmeroDeRegistros Then
RegistroAtual = NmeroDeRegistros
Beep
MsgBox ("ltimo registro !")
End If
Call MostraRegistro(RegistroAtual)
Case 3 ltimo registro
RegistroAtual = NmeroDeRegistros
Call MostraRegistro(RegistroAtual)
End Select
End Sub

Fica como exerccio implementar o formulrio frmLista, que deve conter uma lista (ListBox)
a ser preenchida com o contedo de ENDEREO.DAT durante o evento load de frmLista. Em vez
de uma ListBox voc pode usar tambm uma Grid.

INSTRUES DO VISUAL BASIC

A seguir encontram-se descritas as sintaxes das principais instrues do Visual Basic.


FOR ... NEXT
For contador = incio To fim[Step incremento]
[instrues]
[Exit For]
[instrues]
Next [contador]

WHILE ... WEND


While condio
[indtrues]
Wend

DO ... LOOP
Do [{While | Until} condio]
[instrues]
[Exit Do]
[instrues]
Loop

SELECT ... CASE


Select Case expresso_teste
[Case lista-n
[instrues]] . . .
[Case Else
[instrues]]
End Select

WITH
With objeto
[instrues]
End With