You are on page 1of 150

1)O que programao ? ..................................................................................2 2)Apresentando o Visual Basic......................................................................... 3 3)Usando Forms, objetos e controles.............................................................. 5 4)Propridades...................................................................................................... 6 5)O que so Forms(Formulrios)........................................................................

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

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

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

Apresentando o ambiente do Visual Basic 6


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

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

Vejamos na figura:

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

Usando Forms, Objetos e Controles


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

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

Na figura 1 (Exemplo anterior), vemos que existe um formulrio, no nosso caso(Form1), com controles dentro dele(Caixa de texto, Lista e Boto). Os forms(Formulrios), como qualquer objeto, possuem mtodos, eventos e propriedades a qual veremos mais tarde. O que so Propriedades? Propriedades, como o prprio nome sugere, so os atributos que podemos definir para cada objeto, seja um formulrio , controle, etc... Quando selecionamos um objeto, no Visual Basic, aparecer no canto direito da tela uma janela onde poderemos definir as propriedades para esse objeto. Podemos definir a cor, o Nesta caixa aparece no canto direito o nome nome e muitas outras propriedades.
dado pelo usurio ao Objeto selecionado, e no canto direito o tipo de Objeto. No exemplo mostramos o objeto de nome Form1 tipo Form (formulrio). Podemos tambm selecionar outro objeto que existe em nosso formulrio nesta caixa, clicando na seta para baixo, e selecionando outro objeto que ali esteja disponvel para seleo.

Nesta coluna aparece o nome das Propriedades. Cada Objeto possui uma quantidade diversa de propriedade para vrios aspectos diferentse. Como por exemplo, a Propriedade BorderStyler que especifica o tipo de borda que o Objeto ter. A Propriedade Caption que da um ttulo ao Objeto, Propriedade BackColor onde se escolhe a cor de fundo que o objeto ter. Lembrando que essas propriedades atuam somente no Objeto selecionado. Se queremos mudar uma determinada propriedade de um Boto de Comando por exemplo, precisamos selecionlo na forma, e depois levar o mouse at a propriedade que se quer mudar.

Esta coluna onde modificamos a propriedade escolhida, seja atravs de uma lista de opes (ComboBox), ou digitada diretamente.

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

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

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

Nesta caixa podemos selecionar qualquer objeto existente no formulrio

Neste outra caixa selecionamos os eventos correspondentes ao objeto selecionado

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

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

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

Acesse o menu Project e selecione Components

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

Com este boto podemos procurar por um determinado controle que no esteja na lista

Sempre que selecionamos um controle, aqui aparecer o nome do arquivo correspondente.

10

Conhecendo melhor o Form(Formulrio)


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

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

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

11

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

12

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

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 99

(Default) Ponteiro padro. Ponteiro em forma de seta Ponteiro de seleo exata Seleo de escrita cone Seleo de Mover Objetos Redimensionamento na diagonal Redimensionamento na vertical Redimensionamento na diagonal Redimensionamento na horizontal Seleo alternada Sinal de ocupado. No disponvel ( Ocupado ) Trabalhando em segundo plano ( Somente 32-bit Visual Basic.) Seleo de Ajuda. (Somente 32-bit Visual Basic.) Todos os Tamanhos. (Somente 32-bit Visual Basic.) Aparece o cone escolhido na propriedade MouseIcon

13

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

CommandButton ( Boto de Comando)


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

Errado

Certo

Vamos as propriedades do CommandButton ou Boto de Comando: 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. 14

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: Name = CmdSair Caption = Sair 15

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

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

16

exclusivo do CommandButton , ou seja, outros objetos tambm tem as mesmas particularidades.

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

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

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

17

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

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

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

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

19

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

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.

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

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

MouseMove: Ocorre quando movemos o ponteiro do mouse sobre a caixa de texto. MouseDown: Ocorre quando o usurio aperta o boto do mouse (seja da direita ou da esquerda) sobre a caixa de texto. MouseUp: Ocorre quando o usurio solta o boto do mouse (seja da direita ou da esquerda) sobre a caixa de texto., 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 ? 20

Lembra-se daquele formulrio que fizemos como exemplo do CommandButton ? Vamos melhor-lo: Quanto aos botes, voc pode deixar todos. Apenas os arraste para o canto direito do formulrio. Coloque 3 Labels. Voc ver que ao colocar a Label dentro do formulrio ela tem a propriedade Caption Definida como o nome do Label. Voc deve troc-la. Coloque uma com o Caption = Cdigo, outra =Nome outra = Endereo. O formulrio deve ficar assim :

Agora coloque 3 TextBoxs na seguinte ordem, de cima pra baixo: TxtCodigo Text= TxtNome Text= TxtEndereco Text=

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

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

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

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

O Frame
claro que, depois do exemplo anterior no poderamos deixar de conhecer o Frame. Esse controle, como voc viu anteriormente serve para organizarmos melhor os controles 22

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

Caption com texto digitado.

Caption sem nenhum texto.

Enabled: Determina se todos todos os objetos colocados no interior da moldura estar ou no disponvel para o usurio. Name: Nome dado ao objeto. A inicial abreviada fra. Cuidado para no colocar frm a abreviatura do Objeto Form. Um exemplo de Frame com a propriedade Enabled definida como False:

Como voc pode ver o Frame da esquerda est com a propriedade Enabled definida como False. Estando assim no conseguiremos acessar nem mesmo os controles que esto dentro do Frame. Esse recurso muito til quando queremos restringir ao usurio o acesso a certas opes. O frame, assim como o OptionButton, tambm no possui nenhum evento em especial, sendo a maioria idnticos aos do OptionButton.

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.

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

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). Segundo Insira 2 Frames: Um que ter um grupo de opes com OptionButtons e se referir ao sexo do cliente, que obviamente ter 2 opes(Masculino ou Feminino). O outro Frame se referir ao estado civil do cliente. Teremos as seguintes opes: 1- Solteiro

24

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

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

25

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

Caixa de Lista Vazia com vrios nomes inseridos na propriedade List

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

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

Columns ajustado para 0. Os Columns ajustado para 1. Os Columns igual a 2. Os nomes nomes ficam em 1 coluna de nomes ficam e 1 coluna de ficam dispostos em duas forma vertical. forma horizontal. colunas de forma horizontal.

Enabled: Habilita ou no o ListBox para o usurio selecionar algum item no objeto. IntegralHeight: Determina a possibilidade dos itens dentro da caixa de lista ser exibido de forma parcial.
IntegralHeight com TRUE IntegralHeight com FALSE

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

26

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

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

Style: CheckBox

Style: Standard

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

27

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

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

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

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

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

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

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

29

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

Bem, j codificamos o boto de AdicionarItem, o de RemoverItem, resta apenas o de Limpar a caixa de listagem. O mais fcil de todos. Basta colocar no evento Click() do respectivo boto a linha que usa o mtodo Clear do ListBox:

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

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

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

30

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

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

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

31

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

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

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

32

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

branco. Por exemplo, a mscara de entrada anterior solicita que todas as entradas contenham exatamente os dgitos necessrios para completar um cdigo de rea e nmero de telefone, e que somente dgitos possam ser inseridos em cada espao em branco. Voc pode definir uma mscara de entrada usando os seguintes caracteres. 0 9 # L ? A a & C , . : ; - / < > \ Dgito (de 0 a 9, entrada requerida, sinais de mais (+) e menos (-) no permitidos). Dgito ou espao (entrada no requerida, sinais de (+) e menos (-) no permitidos). Dgito ou espao (entrada no requerida, os espaos so exibidos como vazios enquanto os dados so editados, mas so removidos quando perde o foco, sinais de mais e menos permitidos). Letra (de A a Z, entrada requerida). Letra (de A a Z, entrada opcional). Letra ou dgito (entrada requerida). Letra ou dgito (entrada opcional). Qualquer caractere ou espao (entrada requerida). Qualquer caractere ou um espao (entrada opcional). Marcador de posio decimal e separadores de milhares, de data e de hora. (O caractere realmente usado depende das configuraes do Painel de Controle do Windows). Faz com que todos os caracteres sejam convertidos para minsculos. Faz com que todos os caracteres sejam convertidos para maisculos. Faz com que o caractere seguinte seja exibido literalmente (por exemplo, \A exibido simplesmente como A).

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

34

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

35

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

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

36

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

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

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

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

37

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

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

A propriedade WindowList A propriedade Visible cria automaticamente um do menu determina se menu gerenciador de janelas o item estar visvel ou em aplicaes com vrias no. janelas, onde exibido as A propriedade Checked nos janelas recentemente abertas. Muito til para criarmos um possibilita colocar um ao lado do menu Janela item de menu. Isto til em menus onde existem dois estados: Ligado e Desligado. Agora que j conhecemos as propriedades, vamos aprender a criar os menus. Primeiramente, voc define o Caption e o Name do item de menu. Devo lembrar que o Name obrigatrio. Note que podemos criar submenus dentro dos menus. Usando e , sendo que avana um nvel e recua um nvel. Menus que so antecipados com .... representam submenus. Quanto mais .... tiver na frente do submenu, mais avanado o seu nvel.

38

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

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

39

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

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

40

detalhadamente, assim como o mtodo de declar-los no cdigo, vamos conhecer a nossa amiga Janela de Cdigo. nela que estaremos trabalhando a maior parte do tempo.

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

Boto de Exibir Cdigo

Esta janela o Project Explorer e nos mostra todos os componentes do projeto e podemos selecionar qual quisermos.

Note que o Visual Basic separa automaticamente com uma linha os eventos ou subprocedimentos

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

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

Em programao, ela tem a mesma funo com vrios recursos adicionais. Na matemtica, s tnhamos a varivel numrica. Na programao temos vrios tipos de variveis. Vamos conhec-las: Nome Integer Long Byte Single Double Descrio Numrico Inteiro Numrico Inteiro Numrico Inteiro Numrico real Numrico real 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.

Currency String

Numrico Valores monetrios Texto

Date Boolean Object Variant

Data e Hora

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

42

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

Marcamos esta caixa para forar a declarao de variveis.

Podemos tambm usar a instruo Option Explicit na seo General-Declarations do mdulo em que dever ser forada a declarao de variveis.

43

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

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

44

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

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

45

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

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

46

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

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

Varivel Object e instanciao


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

47

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

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

Se a declararmos dentro de um procedimento qualquer, ela ser vlida apenas dentro desse procedimento. - Para que a varivel seja vista pelo projeto inteiro, devemos declar-la como Public, no mdulo principal. Veremos agora o que significa Public , assim como os demais modificadores de acesso.

Modificadores de acesso
48

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

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

49

FormularioTal.Data

Operadores
Agora que j aprendemos a trabalhar com variveis, vamos conhecer os operadores, que sero essncias para a manipulao dos valores de nossas variveis. Com eles, poderemos realizar operaes matemticas, lgicas, etc. Os operadores se dividem em: - Matemticos - Relacionais - Lgicos - String Matemticos Os operadores matemticos j so conhecido de todos. Com eles poderemos somar, dividir, subtrair,etc. So eles: Operador + * / \ ^ Mod Descrio Soma Subtrao Multiplicao Diviso Diviso. Resultado ser um nmero inteiro Exponenciao Resto da Diviso Exemplo Var = 18+5 Var = 18-5 Var = 18*5 Var = 18/5 Var = 18\5 Var = 18^5 Var = 18 Mod 5

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

50

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

Operadores de String
51

Como j vimos anteriormente, so representados pelo + e pelo &, sendo que o + fora o clculo, no caso de termos uma das expresses sendo numrica, enquanto o & fora a concatenao, no caso de termos uma das partes sendo string e outra numrica. Para maiores detalhes, consulte a seo anterior.

Comandos condicionais e Loops


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

IF, Then, Elseif, Else, Endif


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

Endif =Fim Do Comando SE

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

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

Primeiro, verificamos se o TextBox est vazio, atravs da propriedade Text: If TxtCli.Text = then onde representa uma string vazia. Poderamos usar a constante Empty do VB tambm: If TxtCli.Text = Empty then

54

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

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

55

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

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

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

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

Do, Loop While


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

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

Do, Loop Until


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

Dim Contador as Integer Contador = 1 Do Print Contador Contador = Contador + 1 Loop Until Contador > 11

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

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

EXIT DO e EXIT FOR


58

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

Soluo: Dim Contador As Integer 59

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

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

60

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

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

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

62

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

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

63

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

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

64

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

65

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

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

66

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

Linha 1 Linha 2 Linha 3

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 - Melhor desempenho na execuo 67

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

As bibliotecas
As bibliotecas, tambm chamadas de referncias, so representadas por um arquivo de sistema(um arquivo com extenso dll,old,tlb,ocx,etc). Ao anexarmos uma biblioteca em nosso sistema teremos a nossa disposio o conjunto de objetos pertencentes a essa biblioteca. V no menu Projects e selecione References. Ir abrir a seguinte janela: Nesta lista existe uma variedade de bibliotecas diferentes. Para adicionarmos ao projeto, s marcar a caixa de seleo ao lado O boto Browse nos possibilita adicionar mais bibliotecas procurando por um arquivo de sistema. Note que ao abrirmos essa janela, j existem quatro bibliotecas exibido o nome e Aqui selecionadas: 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... 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 68

acessveis ao projeto. Quando adicionamos uma nova biblioteca, novos objetos sero adicionados a essa lista, e novos objetos podero ser usados pelo projeto.

Entretanto, tambm podemos visualizar todos os objetos acessveis ao sistema usando o Object Browser. Tecle F2. Abrir uma janela como a da figura abaixo.

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

Comandos, funes e objetos nativos


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

69

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. Open "TESTFILE" For Binary Access Write As #1 ' Fecha antes de reabrir em outro modo. Close #1

70

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

71

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. 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 72

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 ' Fecha o arquivo. ' Faz o loop at o fim do arquivo.

Gravando dados em um arquivo


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

73

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

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

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

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

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

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

76

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

77

Funes de Data e Hora


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

78

ww h n s

Semana Hora Minuto Segundo

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

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>)

Funes de converso

80

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

CCUR: Converte uma expresso numrica para um tipo-moeda. Ccur(<expresso numrica>) CDATE: Converte uma expresso para um tipo Data. Entretanto, esta converso se concretizar desde que a expresso usada como argumento seja mesmo no formato de uma data, ou seja, dia/ms/Ano. Se pedirmos para fazer converso da palavra teste para data ser retornado um erro. Cdate(<expresso>)

81

Print Cdate(01/01/2001) Valor Impresso: 01/01/2001 A funo CDate retornar erro sempre que informarmos uma expresso que no resulte em uma data vlida.

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

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

Funes para gerenciamento de matrizes


ARRAY: Retorna um Array do tipo Variant. ArrayVariant = Array (<ValoresDosElementos>) Quando me refiro Array, estou me referindo a uma matriz propriamente dita. O que podemos dizer sobre o comando Array que ele transforma uma varivel em uma matriz. ValoresDosElementos: consiste de uma lista delimitada por vrgulas, separando assim os valores dos elementos. O nmero de elementos que a matriz ter determinado pelo nmero de valores que ela ter.

83

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

Funes lgicas
IIF: Analisa uma expresso lgica, e retorna valores para quando for falso ou verdadeiro. IIF (<ExpressoLgica>,<ExpressoParaVerdadeiro>, <ExpressoParaFalso>) Print IIf(2 > 1, "2 maior que 1", "1 maior que 2") Imprimir 2 maior que 1 A funo Iff analisa a expresso lgica informada em <ExpressoLgica> e caso a expresso seja verdadeira, retorna o valor contido em <ExpressoParaVerdadeiro>, caso contrrio retorna o valor contido em <ExpressoParaFalso>. SWITCH: Avalia uma lista de expresses e retorna o valor associado quela primeira avaliada como verdadeira. Switch(Expr1, Valor1[, Expr2, Valor2 , Expretc, Valoretc])

84

Expr : Valor : True.

Expresso variant que voc quer avaliar. Valor ou expresso que retornado se a expresso correspondente for

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: If Dir("c:\tesste.txt") = "" Then MsgBox "Arquivo no existe" End If

85

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

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

Funes de Teste
ISARRAY: Testa se uma varivel uma matriz IsArray(<varivel>) ISDATE: Testa se o argumento pode ser convertido para uma data. Esta data deve estar dentro dos padres de data. IsDate(<expresso>) ISEMPTY: Verifica se uma varivel string j foi iniciada. IsEmpty retornar True se a varivel estiver iniciada; caso contrrio retornar False. Se a expresso contiver mais de uma varivel, o retorno ser sempre False. IsEmpty(<expresso>) ISERROR: Testa se uma expresso um valor de erro. IsError(<expresso>)

86

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

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 MSGBOX: Exibe uma caixa de dilogo durante a execuo do programa. Essa caixa de dilogo poder informar algo ou perguntar algo ao usurio, dependendo da configurao especificada no comando. Pode ser usada como uma funo para retornar valores de resposta ou como comando para enviar informaes ao usurio. MsgBox (<ExpressoPrompt>,<Estilo>, <BarraDeTtulo>)

88

ExpressoPrompt : Expresso de seqncia de caracteres exibida como a mensagem numa caixa de dilogo. O tamanho mximo de ExpressoPrompt de aproximadamente 1024 caracteres, dependendo da largura dos caracteres usados. Se ExpressoPrompt for composto por mais de uma linha, voc poder separar as linhas usando um caractere de retorno de carro (Chr(13)), um caractere de alimentao de linha (Chr(10)) ou uma combinao de caracteres de retorno de carro e alimentao de linha (Chr(13) & Chr(10)) entre cada linha. Estilo: Um nmero ou uma soma de nmeros que representar o estilo da caixa de dilogo. Por exemplo, se uma caixa de dilogo de informao, de pergunta, exclamao, erro, etc... Abaixo temos uma tabela com os estilos de caixa de dilogo que podemos usar: Constante vbOKOnly VbOKCancel VbAbortRetryIgnore VbYesNoCancel VbYesNo VbRetryCancel VbCritical VbQuestion VbExclamation VbInformation VbDefaultButton1 VbDefaultButton2 VbDefaultButton3 VbApplicationModal Valor 0 1 2 3 4 5 16 32 48 64 0 256 512 0 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 usurio responda caixa de mensagem.

VbSystemModal

4096

O primeiro grupo de valores (05) descreve o nmero e tipo de botes exibidos na caixa de dilogo; o segundo grupo (16, 32, 48, 64) descreve o estilo de cone; o terceiro grupo (0, 256, 512) determina qual boto o padro; e o quarto grupo (0, 4096) determina

89

modalidade da caixa de mensagem. Quando adicionar nmeros para criar um valor final para o argumento buttons, use somente um nmero de cada grupo. Durante a digitao da funo, quando formos escolher o estilo da mensagem, o Visual Basic automaticamente apresenta uma lista com vrios estilos:

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

Constante vbOK vbCancel vbAbort vbRetry vbIgnore vbYes vbNo

Valor de Retorno 1 2 3 4 5 6 7

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

Se a caixa de dilogo exibir um boto "Cancelar", pressionar a tecla ESC ter o mesmo efeito que escolher "Cancelar". 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: 90

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 Usamos o simbolo # para representar a disposio dos nmeros. No h necessidade de colocar a mesma quantidade de nmeros e #. Se tivessesmos colocado Print Format(12345.3,#,###,###.##), ainda assim seria impresso somente 12.345,3. Entretanto, se colocarmos: Print Format(12345.3, "###.##") Valor Impresso: 12345,3

91

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

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. A barra propriamente no exibida. Sua utilizao equivale a colocar o caractere seguinte entre aspas. Para exibir uma barra invertida, use duas barras invertidas (\\). Exemplos de caracteres que no podem ser exibidos como caracteres literais so caracteres de formatao de data e hora (a, c, d, h, m, n, p, q, s, t, w, y e /:), caracteres de formatao numrica (#, 0, %, E, e, vrgula e ponto) e os caracteres de formatao de seqncias de caracteres (@, &, <, >, e !). "ABC"Exibe a seqncia de caracteres que est entre aspas. 93

Para incluir uma seqncia de caracteres em Format a partir do cdigo, voc deve usar Chr(34) para delimitar o texto (34 cdigo de caractere para aspas). Usamos tambm como argumento na formatao de expresses numricas algumas palavras-chave que correspondem a algum tipo de formato padro. General Number : Exibe o nmero na forma em que se encontra, sem separadores de milhar. Print Format(123456.7, "General Number") Valor Impresso: 123456,7 Currency : Exibe o nmero com o separador de milhar, se apropriado; exibe dois dgitos direita do separador de casa decimal. Note que a sada baseada nas configuraes do Painel de Controle. Print Format(123456.7, "Currency") Valor Impresso: R$123.456,70 Fixed : Exibe pelo menos um dgito esquerda e dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Fixed") Valor Impresso: 123456,70 Print Format(1, "Fixed") Valor Impresso: 1,00 Standard : Exibe o nmero com o separador de milhar, pelo menos um dgito esquerda e dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Standard") Valor Impresso: 123.456,70 Percent : Exibe o nmero multiplicado por 100 com um sinal de porcentagem (%) anexado direita; sempre mostra dois dgitos direita do separador de casa decimal. Print Format(123456.7, "Percent") Valor Impresso: 12345670,00% Print Format(1, "Percent") Valor Impresso: 100,00% Scientific : Usa a notao cientfica padro. Print Format(123456.7, "Scientific") Valor Impresso: 1,23E+05

Formatao de Expresses Lgicas


Yes/No : Exibe No se o nmero for 0; caso contrrio, exibe Yes.

94

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

ww Exibe a semana do ano como um nmero. Print Format("01/08/96","ww") Valor Impresso: 31 95

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

t t t t t Exibe uma hora como uma hora completa (inclusive hora, minuto e segundo), formatada usando o separador de hora definido pelo formato de hora reconhecido pelo sistema. Print Format(now,"ttttt") Valor Impresso: 23:17:27 Usando estes caracteres especiais podemos formatar uma data de vrias maneiras, como por exemplo: Print Format(01/08/96,dd/mmmm/yyyy) Valor Impresso: 01/Agosto/1996 Print Format(01/08/96,dd/mmm/yy) Valor Impresso: 01/Ago/96 Veja abaixo a relao das palavras-chaves aceita pela funo Format para expresses de data e hora: General Date : Exibe a data e a hora nos formatos estabelecidos nas configuraes do Windows. Caso a expresso seja somente uma data, ser exibido Print Format(now,"general date") Valor Impresso: 01/08/96 23:21:25 Print Format("01/08/96","general date") Valor Impresso: 01/08/96 Print Format("09:24:11","general date") Valor Impresso: 09:24:11 Long Date : Exibe uma data de acordo com o formato por extenso de data de seu sistema. Print Format("01/08/96","Long Date") Valor Impresso: Quinta-feira, 1 de Agosto de 1996 Medium Date : Exibe uma data usando o formato mdio de data apropriado para a verso de idioma do aplicativo host. Print Format("01/08/96","Medium Date") Valor Impresso: 01-Ago-96 Short Date : Exibe uma data usando o formato abreviado de data de seu sistema. Print Format("01/08/96","Short Date") Valor Impresso: 01/08/96 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

97

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

Formatao de Expresses String


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

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

98

A biblioteca de conexo, que contm os objetos que vamos usar para nos conectarmos com os bancos de dados que criaremos, o Microsoft D.A.O. (Microsoft Data Access Objects) e nos permite nos conectarmos com banco de dados no formato Access, alm de tipos de bancos de dados mais antigos como Dbase, FoxPro, Paradox, etc. Durante o nosso curso, trabalharemos com o Microsoft Access. Devo lembrar que a mudana de um tipo de banco de dados para o outro est na que um tem mais ou menos recursos que o outro, sendo que todos tm em comum, tabelas, campos, chave primria, etc. Sempre que for utilizar um banco de dados que voc ainda no conhea, consulte a sua documentao.

O que um banco de dados?


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

Criando um banco de dados


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

99

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

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

O que so tabelas?
As tabelas so bases de qualquer banco de dados. delas que viro os dados a serem processados por consultas, relatrios, formulrios e demais objetos de banco de dados. As tabelas so divididas em campos e registros. Os campos so definidos quando definimos a estrutura da tabela, j os registros so adicionados de acordo com a necessidade do usurio. Para ilustrar o que estou dizendo, veja a tabela a seguir: Cdigo 1 2 3 Registros 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. Campos 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

100

Criando uma tabela


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

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.

101

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

Abrir a seguinte janela:

102

Aqui descrevemos qual deve ser o nome da tabela Boto de adicionar campo Boto de remover campo Este boto serve para adicionarmos um ndice tabela. Veremos mais tarde o que so ndices e para que servem Usado para Depois de adicionados remover um ndice os campos, usamos este Este a janela de adicionar tabelas. Podemos aqui definir o nome da tabela, assim da tabela. boto para confirmar a como adicionar campos, ndices e selecionar as suas respectivas propriedades. criao da tabela. 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 nome do campo Aqui escolhemos o tipo do campo em uma lista. Segue as mesmas regras para tipos de variveis Tamanho do campo Uma expresso que ser usada para verificar se o campo vlido ou no. Por exemplo, se utilizarmos nessa propriedade a seguinte expresso >10 em um valor Aqui definimos um valoresse campo s numrico, padro para o campo. Por exemplo, se definimos o que aceitar valores maiores Default Value(valor padro) de um 10. campo numrico para zero, quando A mensagem que novo registro, esse quando o adicionarmos um exibida103 valor que teratribudo ao campo que seja campo j foi esse valor zero at no coincidir com a regra de validao modificado.

Aqui definimos s o campo ir aceitar comprimento zero ou no. Comprimento zero seria um campo com nmero de caracteres preenchidos igual aozero. Ou seja, Aqui definimos se campo vazio. Se est opo estiver ser ou no obrigatrio. Um marcada o campo aceitar campo obrigatrio no aceita comprimento zero. como valor nulo(Null).

Se escolhermos um tipo de campo como Long poderemos selecionar esta opo. A propriedade AutoIncrField nos possibilita criar um campo autoincrementvel, ou seja um campo que se numera automaticamente de acordo com os registros criados

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

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

105

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: Aqui definimos o nome que iremos dar ao ndice. Aqui escolhemos o campo que ser a base do ndice Se a propriedade Primary estiver marcada, significa que o campo selecionado ser a chave primria. Podemos ter apenas uma por tabela. Logo, explicarei o que chave primria. Por padro, a atribuio de um valor nulo a um campo indexado, gera um erro. Se a propriedade IgnoreNulls for marcada, o campo passar a aceitar valores nulos. Se a propriedade Unique for marcada, o campo no aceitar valores duplicados, ou seja, se tivermos um campo Nome com o valor Maria, no poderemos ter outro registro com um campo Nome de mesmo valor.

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

106

Definindo a chave primria


Uma chave primria til quando queremos que uma tabela no aceite valores nulos e nem valores duplicados. Uma chave primria tambm til para se relacionar com outras tabelas. Podemos dizer que uma chave primria um ndice ou um conjunto de ndices que no podem ter valores repetidos ou nulos. Por exemplo, digamos que voc defina como chave primria 2 campos. Um referente ao campo Codigo e outro ao campo Nome. Poderamos at ter 2 cdigos iguais e 2 nomes iguais, mas uma combinao de nome e cdigo igual no poderia existir. A chave primria nesse caso, seria um ndice que definimos com a propriedade Primary e definimos que o mesmo teria como base o campo Nome e o campo Cdigo. Devo admitir que na teoria isso parece um pouco confuso, mas na prtica fica bem mais simples. Uma tabela pode ter apenas uma chave primria(tambm chamada de ndice primrio), mas pode ter vrios ndices. Se voc tentar atribuir mais de um ndice como Primary, ir receber uma mensagem de erro dizendo que o ndice no pode ser criado. Como a tabela que criamos bem mais simples e o ndice que criamos(Nome), j d conta de no permitir valores nulos e repetidos, uma chave primria no momento,desnecessria.

Acessando o banco de dados atravs do Visual Basic


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

107

Marque essa biblioteca e selecione OK. Agora j podemos usar os objetos que essa biblioteca nos oferece.

Abrindo um banco de dados


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

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

109

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

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

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.

110

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

111

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

Consultando Registros
Desde que j tenhamos um objeto Recordset aberto, poderemos facilmente consultar seus registros. H dois tipos de sintaxes que podemos utilizar para retornar valores de registros: <RecordSet>(<StringNomeCampo>) ou <RecordSet>!<NomeCampo> Exemplo: TxtNome.Text = Tabela(Nome) Ou TxtNome.Text = Tabela!Nome No projeto que criamos, adicione um TextBox chamado TxtNome e utilize o exemplo anterior para preencher o TextBox com o valor do campo Nome. Voc pode adicionar mais TextBoxs ao formulrio e fazer com que os demais campos sejam exibidos. Rode o programa. Voc deve ter notado que os dados exibidos no formulrio so referentes ao primeiro registro. Isso por qu quando abrimos um recordset, ele aponta primeiramente para o primeiro registro. Como se tivssemos aberto uma tabela no Access ou no Visual Data Manager. como se existisse um ponteiro virtual que sempre est apontando para um registro X. Na prtica, consultar apenas o primeiro registro no nos adiantaria. ai que entram os mtodos de navegao que veremos agora.

Navegao atravs dos registros


MoveNext Este mtodo mover o ponteiro para o prximo registro. MovePrevious Move o ponteiro para o registro anterior

112

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

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

113

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 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

114

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 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.

115

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

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

Fechando um RecordSet e um Database


muito importante se atentar para o fato de precisar fechar a conexo dos objetos com a tabela e o banco de dados quando no estivermos mais usando os dados provenientes deles. Pois isto evitar que o banco de dados possa estar corrompindo futuramente. Para fechar um Database, objeto que representa o banco de dados, devemos primeiramente fechar os RecordSets baseados nesse Database. Se tentarmos fechar o Database primeiro sem termos fechado o(s) Recordsets bseados nele, teremos um erro em tempo de execuo. Para fechar um RecordSet ou um DataBase, usamos o mtodo Close. Tabela.Close Banco.Close O exemplo acima fecha primeiramente o RecordSet chamado Tabela e depois o Database chamado Banco.

Conhecendo algumas propriedades teis


Vamos conhecer agora algumas propriedades teis do objeto RecordSet : 116

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

Conhecendo alguns objetos de banco de dados


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:

117

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.

Depois de selecionado o banco de dados, j podemos selecionar uma tabela, atravs da propriedade RecordSource do objeto Data.

Note tambm que na propriedade RecordsetType, podemos escolher entre os 3 tipos de recordsets que vimos anteriormente.

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.

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).

119

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.

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. 120

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. 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.

121

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: vbPRPSLetter 1 Letter, 8 1/2 x 11 in. VbPRPSLetterSmall 2 Letter Small, 8 1/2 x 11 in. VbPRPSTabloid 3 Tabloid, 11 x 17 in. VbPRPSLedger 4 Ledger, 17 x 11 in. VbPRPSLegal 5 Legal, 8 1/2 x 14 in. VbPRPSStatement 6 Statement, 5 1/2 x 8 1/2 in. VbPRPSExecutive 7 Executive, 7 1/2 x 10 1/2 in. 122

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

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

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

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

123

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

124

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

125

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

126

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

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

128

necessrio usar esse mtodo para encerrar a impresso, pois se no usssemos o programa ficaria se comunicando com o Spool da impressora e os dados s seriam impressos quando o programa fosse encerrado.

Criando relatrios com o Crystal Reports


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

129

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

Criar um novo relatrio usando o assistente

Criar um novo relatrio em branco Criar um novo relatrio a partir de um relatrio j existente Aqui temos uma lista de tipos de relatrios predefinidos Aqui exibido o LayOut do relatrio predefinido escolhido na lista.

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

Primeiramente, deveremos selecionar um banco de dados, de onde viro os dados do relatrio. Para fazer isso, clicamos no boto Project. Aps clicarmos nesse boto, ir abrir uma janela com vrias opes para nos conectarmos com diferentes bancos de dados.

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

131

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

132

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

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

133

O assistente ento passar para o guia Fields, onde definimos quais campos aparecero no relatrio: Nesta lista esto todos os campos que podemos adicionar ao relatrio. Para adicionar um campo, basta selecion-lo nesta lista e clicar no boto Add -> O boto Add All-> coloca todos os campos no relatrio sem a necessidade de termos que inserir um por um. nessa lista que ficam os campos que escolhemos para exibir no relatrio O boto Remove <remove o campo selecionado na lista de campos a exibir no rerlatrio O boto <- Remove All remove todos os campos da lista de campos a exibir no relatrio. Nesta caixa, podemos selecionar individualmente o cabealho que ser exibido para cada 134 campo.

Depois de adicionados os campos necessrios para o nosso relatrio e caso ele seja um relatrio simples, j podemos finalizar, clicando no boto Finish. Veremos mais tarde ao que se destinam os prximos passos do assintente. Se voc j adicionou os campos que precisa no relatrio e no usar nenhum recurso especial no seu relatrio, dever clicar no boto Finish. Feito isso, aparecer a seguinte janela:

Aqui ele pergunta se queremos que o assistente crie um formuilrio que servir como visualizao de impresso. Caso voc queira visualizar o relatrio antes de imprimir, marque a opo Yes.

Aqui ele pergunta se voc que o assistente modifique as propriedades de projeto para que o formulrio de visualizao de impresso seja o objeto inicial do projeto(StartUp Object). Caso voc queira, marque Yes. Geralmente usamos No.

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

135

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

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

alterar na declarao, onde declarado um objeto do tipo Report(relatrio). Altere o nome para o novo nome que voc atribuiu ao relatrio.

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

A seo Report Header o cabealho do relatrio. No confunda cabealho do relatrio com cabealho da pgina. Pois o cabealho da pgina impresso sempre antes de uma

137

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

Na caixa de ferramentas a esquerda podemos ver os controles disponveis para inserir nos relatrios criados pelo Crystal

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

138

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

Trabalhando com filtros no Crystal Reports


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

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

139

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

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

141

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

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

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

143

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

Utilizando instrues SQL para aplicar filtros

144

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

145

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

146

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

Visualizando os dados antes de imprimir


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

Nomeie o relatrio como RptCli e o formulrio como FrmRelCli. Agora observe o cdigo criado pelo assistente no formulrio FrmRelCli:

147

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

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

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

148

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

149

Rode o projeto e confira o resultado.


1

Autor:Dieimes Viana Corra Email:dieimes_c@yahoo.com.br Fone: (051) 91538814

150

You might also like