You are on page 1of 217

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

Captulo 1

1.1 INICIANDO

E ai pessoal tudo bem? O objetivo deste livro ser apresentar conceitos sobre a operao e programao da ferramenta de desenvolvimento de aplicativos VISUAL BASIC 6.0. Ser explorado o aprendizado de programaes bsicas indo at o desenvolvimento de aplicativos com suporte a Banco de Dados e Consulta SQL. super importante que, alm da prtica em sala de aula, voc possa exercitar o contedo do livro em sua casa, ou em algum lugar onde voc possa ter acesso a um computador e naturalmente ao Visual Basic 6.0. Para uma boa iniciao em linguagem de programao, ideal que voc possua conhecimentos em relao a tcnicas bsicas de lgica de programao, e tambm conceitos sobre: variveis, constantes, tipos de dados, estruturas condicionais, operadores lgicos, operadores relacionais, laos de repetio, etc...

1.2 UM POUCO DE HISTRIA

Bem! Tudo comeou no ano de 1965 quando foi lanada uma linguagem de programao exclusiva para estudantes denominada BASIC que significa: Begginners All-purpose Symbolic Instruction Code e que podemos ter a seguinte traduo: Cdigo de Instruo simblica para principiantes e todas as finalidades. O principal objetivo dessa linguagem foi o de tornar mais fcil o aprendizado de programao de computadores, o que com certeza aconteceu. Com o passar do tempo o BASIC foi perdendo espao, e outras linguagens de programao foram assumindo o seu lugar, como por exemplo as linguagens PASCAL e C, l por volta dos anos 1970 e 1972, respectivamente. Depois do lanamento do Sistema Operacional Windows, a Microsoft lanou em 1991, a primeira verso da linguagem Visual Basic. Agindo sobre a plataforma do sistema Operacional Windows, o Visual Basic passou a fazer uso de recursos grficos (visuais), alm da estrutura orientada a eventos. Na verso do Visual Basic 3.0, a Microsoft implementou novos recursos linguagem, como por exemplo: acesso banco de dados nativo, como por exemplo, o Access. Logo aps o lanamento do Sistema Operacional Windows 95 (no ano de 1995), seria lanada a verso 4.0 do Visual Basic. Alm de um visual um pouco diferente, esta verso permite o desenvolvimento de aplicativos com

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

suporte a plataforma de 32 bits. Estes aplicativos so compatveis com os ambientes do Sistema Operacional Windows 95 e at mesmo Windows 98 e NT. Lanada no ms de maro de 1997 (Brasil), a verso 5.0 do Visual Basic nos traz novidades no que diz respeito ao desenvolvimento de aplicaes Cliente/Servidor, ou seja, possvel desenvolver de uma maneira mais rpida aplicaes voltadas a plataformas deste tipo. J no ano seguinte (final de 1998), a Microsoft lana o Microsoft Visual Basic 6.0, trazendo muitas novidades entre as quais podemos citar: Acesso a Banco de Dados atravs de objetos ADO (ActiveX Data Objects) o qual suporta acesso a banco de dados superiores. Visual Basic WebClass Designer o qual permite criao de aplicativos para servidores Web. Melhor desempenho, pois utiliza o mesmo ncleo para compilao que o do Visual C++. Help voltado a desenvolvedores profissionais (MSDN Library). Em cima desse breve relato podemos constatar a poderosa ferramenta de desenvolvimento que o Visual Basic. Quando o Sistema Operacional Windows tornou-se o Sistema Operacional da grande maioria dos computadores imaginava-se que a programao para esta plataforma s seria possvel com ferramentas como a linguagem C, sendo assim praticamente impossvel que algum com pouca experincia desenvolvesse um aplicativo, sendo ele o mais simples possvel. Foi ai que surgiu o Visual, com uma estrutura de programao no to confusa como o Basic. O Visual Basic tornou-se uma das ferramentas de desenvolvimento mais utilizada no mundo, fazendo com que hoje em dia exista milhes de programadores em VB no mundo inteiro.

1.3 OBJETIVOS DO DESENVOLVIMENTO DE UM APLICATIVO

Bom galera! Antes de fazermos nosso primeiro contato com o ambiente do Visual Basic, vamos comentar a respeito de um tema super importante que nos auxiliara no bom desenvolvimento de um aplicativo. Quando desenvolvemos um programa temos que ter em mente que o aplicativo ter que: Gerar solues em tecnologia para que, indiferente do local onde o aplicativo desenvolvido seja empregado, o mesmo traga mais organizao e conseqentemente maior produo e competitividade ao estabelecimento informatizado. Lembre-se: Devemos informatizar e no complicar.

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

1.4 VISO GERAL DO VISUAL BASIC 6.0 Podemos ter um conceito geral do Visual Basic como uma linguagem de programao, para o ambiente Windows, orientada a eventos. Voc deve estar pensando, bom, primeiro preciso saber o que um evento pra depois falar mais sobre esse Visual Basic. Um pouquinho s de calma que tudo ficar muito claro. OK? Os objetos (ferramentas utilizadas no desenvolvimento de aplicativos), normalmente possuem vrios eventos, os quais so executados nas determinadas aes exercidas pelo usurio. Complicou mais ainda? Ento tudo bem! Preste ateno na demonstrao a seguir: x

APLICATIVO FORMULRIOS

PROPRIEDADES

MTODOS

EVENTOS

OBJETOS

CLASSES

A demonstrao acima nos d uma idia perfeita de como podemos imaginar o Visual Basic, e a maneira de como devemos proceder para utilizar esta poderosa ferramenta de desenvolvimento a partir da idia de um aplicativo. A explicao da seqncia a seguinte:

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

Aplicativo: Toda e qualquer utilizao do Visual Basic se dar a partir da idia do desenvolvimento de um aplicativo. Formulrios: Os formulrios sero o centro da aplicao grfica, ou seja, sero as janelas de contato com o usurio aps o desenvolvimento do aplicativo. Objetos: Conjunto de controles a serem utilizados junto com o formulrio (inserimos objetos dentro do formulrio), para a criao do aplicativo. Classes: Os objetos so divididos em classes e cada objeto em sua determinada classe possui: Propriedades, Mtodos e Eventos. Propriedades: So as formataes de um objeto, ou seja, o conjunto de caractersticas que define o objeto tanto na aparncia quanto na posio do mesmo no formulrio. Mtodos: Podemos conceituar o mtodo de um objeto como uma funo definida pelo Visual Basic em relao quilo que desejamos que o objeto execute. Eventos: So os procedimentos codificados que sero executados a partir de uma ao do usurio sobre o objeto.

1.5 CONHECENDO O AMBIENTE DO VISUAL BASIC Para ter acesso ao Visual Basic faa o seguinte: 1. Clique no boto Iniciar, 2. Em seguida selecione Programas,

3. Selecione o item Microsoft Visual Studio 6.0, 4. E por ltimo clique no item Microsoft Visual Basic 6.0.

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

A caixa de dilogo a seguir ser apresentada, onde voc poder escolher a tarefa desejada. Entre estas tarefas est a de criar um novo projeto (Standard EXE), criar um controle ActiveX (ActiveX EXE), criar Bibliotecas de Ligao Dinmica ActiveX DLL) entre outros. As trs guias existentes (New, Existing e Recent) se referem ao seguinte: New: Esta guia nos d a opo de selecionar o tipo de projeto desejado e cri-lo NOVO. Existing: Selecione esta guia para abrir um projeto j existente. Recent: Esta guia exibe o caminho dos ltimos projetos trabalhados. Para nossos primeiros exemplos selecione Standard EXE e clique no Boto ABRIR.

A prxima janela a ser exibida o ambiente de programao do Visual Basic. Repare que inicialmente so apresentados cinco componentes. So eles: A janela de Projetos (Project), A janela de Propriedades (Properties), A janela de Layout (Form Layout), A janela do Formulrio (Form) e A janela da Caixa de Ferramentas (General). Observe a janela a seguir:

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

A janela do ambiente de programao do Visual Basic.

A seguir veremos o funcionamento de cada componente do ambiente de programao do Visual Basic, pois cada um tem sua funo super importante no desenvolvimento de um aplicativo. O componente Project Explorer (janela de projetos), exibe todos os arquivos que o projeto atual possui, ou seja, os formulrios, os mdulos, as classes, os grupos, etc.... Esta janela possui uma barra de ferramentas onde se localizam os botes: View Code: Clicando neste boto ser exibida a rea de codificao do programa. View Object: Utilizado para exibir o formulrio selecionado na janela de projetos. Toggle Folders: Exibe e esconde as pastas apresentadas no projeto.

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

Esta janela exibe as propriedades que podemos formatar no objeto inserido no formulrio. Repare na caixa de combinao com o nome: Form1 Form. Clicando no boto desta caixa, voc poder visualizar todos os controles (objetos) que tenham sido inseridos no formulrio, inclusive o prprio formulrio. Abaixo da caixa temos as guias: Alphabetic e Categorized as quais podem ser usadas para ordenar as propriedades dos objetos por ordem alfabtica ou por ordem de categoria.

A janela FormLayout exibe de que maneira ser exibido um formulrio na tela do computador assim que o projeto for executado. Posicione o cursor do mouse sobre a figura Form1 . Clique e arraste a figura para o local onde voc deseja que o formulrio aparea no monitor quando o aplicativo for executado.

A janela General ser a nossa caixa de ferramentas, onde se encontram os componentes que podemos usar para criao de nossos aplicativos. Existem vrios componentes dentro da ToolBox como por exemplo: Boto de Comando, Caixa de Texto, Rtulo, Caixa de Combinao, e tantos outros. Outros componentes podero ser inseridos nesta coleo de objetos, porem, veremos isso mais a frente. OK?

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

A janela do formulrio caracteriza-se como sendo o centro da aplicao grfica, ou seja, nesta janela que vamos criar o LayOut do nosso aplicativo, a maneira como ele se comunicar com o usurio final. Na figura do exemplo a seguir foram inseridos alguns objetos no formulrio. Para voc inserir um objeto no formulrio, faa o seguinte: 1. Selecione com um clique o objeto desejado na caixa de ferramentas ToolBox (General). 2. Posicione o cursor do mouse sobre qualquer lugar da rea pontilhado do formulrio. O cursor do mouse dever esta com o . aspecto de cruz 3. Execute a ao: Clique, Segure e Arraste com o boto de ao do mouse (geralmente o esquerdo), redimensionando o objeto na rea desejada do formulrio. Fcil no mesmo? Voc poder tambm inserir um componente no formulrio dando um duplo clique no objeto desejado na caixa de objetos (ToolBox), porm, existe um pequeno problema nesta maneira. Quando voc executa esta ao, o objeto inserido para dentro do formulrio, e em determinadas situaes, alguns objetos devem ser inseridos (vinculados) a outros objetos (por exemplo o componente FRAME) e no diretamente ao formulrio.

Se voc por acaso fechar alguma janela dos componentes visto anteriormente, no se preocupe. No menu View do Visual Basic voc achar todas as opes para visualizao das janelas novamente.

Agacir Jos Cardoso Assessoria e Consultoria em T.I.

1.6 NOMENCLATURA DE OBJETOS Quando inserimos objetos na janela do formulrio do nosso projeto, extremamente aconselhvel que este objeto possua um nome, pois atravs deste nome que vamos trat-lo durante a programao. Os nomes dos objetos devem ser sempre condizentes com a funo que o mesmo ir executar. O nome do objeto deve ser informado assim que o objeto for inserido ao formulrio, ou seja, antes de codificar algum linha a algum evento do objeto. Existem algumas abreviaes iniciais para cada componente do Visual Basic. Estas abreviaes ou letras iniciais servem para identificar os objetos na hora da programao. Observe o exemplo a seguir: ) a Para os objetos Botes de Comando (CommandButton nomenclatura inicial desse componente : Cmd, ou seja, usaremos a abreviao do objeto CommandButton para criar o nome do nosso objeto. No caso da necessidade de um boto para executar a rotina da gravao de registros poderemos usar o nome deste boto como: CmdGravar. Entendeu? Bem! A seguir veremos as nomenclatura inicias de outros objetos que usaremos freqentemente em nossos projetos. Label (Rtulo) Lbl TextBox (Caixa de Texto) Txt Frame (Agrupamento de objetos) Fra Option Button (Boto de Opo) Opt ComboBox (Caixa de Combinao) Cbo CheckBox (Boto de Checagem) Chk

Form (Formulrio) Frm Muito bem pessoal... Ficamos por aqui. No prximo captulo faremos nosso primeiro contato com o editor de programao do Visual Basic. Valeu e at mais...

Captulo 22.1 FORMATANDO OBJETOS E SALVANDO PROJETO


E ai galera! Prontos para o primeiro contato com a programao em Visual Basic? Bom! Prontos ou no...L vamos ns... Vamos iniciar o Visual Basic e formatar as seguintes propriedades no formulrio que carregado automaticamente quando iniciamos o Visual Basic. Procure as propriedades a seguir na janela de propriedades e configureas da maneira como pede: Name: FrmTeste Caption: Primeiro teste de Visual Basic. MaxButton: False MinButton: False StartUpPosition: 2 - CenterScreen Estas propriedades que formatamos se referem ao seguinte:
Name Nome do objeto formulrio Caption Ttulo da barra de formulrio MaxButton O Valor False indica que no haver boto de maximizar/restaurar janela no formulrio MinButton O Valor False indica que no haver boto minimizar janela no formulrio StartUpPosition O valor formatado centraliza o formulrio quando ele for executado

Com o formulrio formatado, veremos agora como fazer para salvar o nosso primeiro projeto em Visual Basic. Os arquivos que sero pedidos para serem salvos so: O arquivo do formulrio (cuja extenso de arquivo FRM que abreviao de Form). O arquivo do projeto (extenso de arquivo VBP que abreviao de Visual Basic Project).

na barra de ferramentas do Para salvar seu projeto clique no cone Visual Basic. Em seguida ser apresentada a janela de dilogo Save File As para voc indicar em que pasta sero salvos seus arquivos do projeto. Uma dica importante para voc! Salve cada projeto seu em pastas diferentes para que os arquivos de projetos distintos no se misturem e acabe dando algum problema.

Selecione a pasta desejada e em seguida informe o nome do seu arquivo FRM. Voc poder usar o mesmo nome que o Visual Basic sugere, ou seja, o mesmo nome definido na propriedade Name. Clique no boto Salvar para confirmar.

Em seguida a mesma janela de dilogo ser apresentada para voc informar o nome do arquivo VBP (Projeto). Informe e clique novamente no boto Salvar para confirmar.

Pronto! Seu projeto est salvo. Duvida? Ache a pasta que voc informou para salvar o projeto e confirme seus dois arquivos dentro dela.

2.2 COMPILANDO O PROJETO Veremos a seguir a ferramenta que faz que com possamos executar nosso projeto e verificar como o mesmo est ficando. Trata-se do compilador de projeto do Visual Basic. Primeiramente vamos ver como podemos dividir nosso projeto em Visual Basic. O nosso projeto se define em duas partes: 1. Tempo de Projeto e 2. Tempo de Execuo. Quando o aplicativo que est sendo desenvolvido se encontra em tempo de projeto significa que podemos usar as ferramentas a nossa disposio para mexer com o projeto, ou seja, no podemos executar, nem fazer funcionar nada, somente configurar e programar. Para podermos executar e testar como est ficando nosso aplicativo, desde a formatao de objetos at mesmo as linhas de codificao teremos que executar o compilador do Visual Basic e passar do estgio de projeto para o estgio de aplicativo executvel. Tudo o que fazemos em tempo de projeto estamos operando em linguagem humana, porm o computador no entende a linguagem humana. O sistema que o computador entende o sistema binrio, portanto o compilador faz justamente isto. Transforma nosso projeto que desenvolvemos em linguagem humana para linguagem de mquina. Para voc compilar o seu projeto em Visual Basic faa o seguinte: . Na barra de ferramentas clique no boto Start Voc poder usar tambm a tecla de atalho F5, que com certeza ir te economizar um bom tempo. Compilado o projeto, verifique como est o seu formulrio com as formataes realizadas anteriormente.

O formulrio em tempo de execuo.

D pra notar uma diferena bem grande no mesmo? Para finalizar o tempo de execuo faa o seguinte:

Clique no boto

para fechar a janela (formulrio). na barra de ferramentas do Visual

Ou clique no boto End Basic.

Fazendo isto voc estar novamente em tempo de projeto.

2.3 ATRIBUIO DE VALORES A OBJETOS

Dos exemplos que fizemos at agora em relao a propriedades e objetos podemos concluir que toda propriedade est relacionada a um objeto. Define-se como propriedade o fato de uma janela estar maximizada ou minimizada. A janela o objeto e ela estar maximizada ou minimizada a sua propriedade. Usando-se uma sintaxe de atribuio de valores indica-se primeiramente o objeto e depois a sua propriedade. Repare a seguir: Objeto.Propriedade Para que um valor possa ser atribudo a uma propriedade de um objeto utiliza-se a seguinte sintaxe: Objeto.Propriedade = Valor Este valor atribudo poder ser um dado numrico, string (caracteres) ou o valor de uma constante. Podemos tambm passar o valor de um mtodo a um objeto, porem, a atribuio de um mtodo a um objeto se diz exclusivamente a ele e no a propriedade do objeto. Observe a sintaxe: Objeto.Mtodo Se o contedo da matria estiver meio confuso pra voc, fique tranqilo! Na prtica mais fcil que na teoria. OK?

2.4 COMEANDO A PROGRAMAR Agora que j sabemos como atribuir um valor a uma propriedade de um objeto nos resta somente colocar isto em prtica, ou seja, programar. No formulrio que acabamos de formatar voc ir inserir os seguintes componentes (objetos): 01 Caixa de Texto (TextBox). 01 boto de Comando (CommanButton) 01 Rtulo (Label) Formate os objetos da seguinte maneira:

TextBox
Name: TxtNome Text: Selecione o contedo e delete.(para o objeto entrar sem valor nenhum).

CommandButton
Name: CmdOk Caption: &Ok

Label
Name: LblNome BackColor: Verde Claro. (Clique na caixa de combinao desta propriedade e selecione a guia Palette para selecionar a Cor de Fundo do objeto.) Caption: Selecione o contedo e delete.(para o objeto entrar sem valor nenhum)

Repare a propriedade Caption do objeto CommandButton. Existe o EComercial (&) antes do O da palavra Ok. Sabe para que isto serve? Certos objetos possuem teclas de atalho (principalmente os botes) o que favorece o usurio na hora de operar o aplicativo com o teclado. Neste nosso caso especfico a combinao da tecla ALT + O, ter o mesmo efeito do clique sobre o boto, depois que ele estiver programado. O boto ter a letra O sublinhada. Se voc optar pela letra K ser a tecla de atalho ento a propriedade Caption deveria ser formatada dessa maneira: O&K. Entendeu? Salve o seu programa clicando no boto de disquete na barra de ferramentas do Visual Basic. No esquea de salvar o seu aplicativo freqentemente pois pode acontecer algum problema no seu computador e acabar perdendo algumas boas linhas de programao. Da no adianta ficar nervoso. Repare na figura a seguir e observe como deve ficar o seu formulrio:

Bem! A idia desta programao a seguinte: 1. Fornecer um nome na caixa de texto, 2. Clicar no boto Ok e 3. Apresentar este nome no Rtulo.

Para fazer isto precisamos programar o objeto que ir disparar a linha de programao. Voc sabe qual ? Isto mesmo o boto de comando. Ento faa o seguinte: D um duplo clique sobre o boto de comando e em seguida ser exibida a janela de codificao do Visual Basic (Code). Observe a figura a seguir: Nesta caixa de combinao Nesta caixa de combinao esto os objetos existentes esto os eventos relativos neste formulrio. ao objeto selecionado.

Esta a janela de codificao do Visual Basic. Quando voc deu um duplo clique sobre o boto de comando, o Visual Basic abriu esta janela imaginando que a programao ser efetuada no Evento Click do objeto CmdOk. O evento Click responsvel pela ao do usurio com um clique sobre um determinado objeto. As instrues de codificao devero estar entre as palavras reservadas, Private Sub e End Sub. Preste bem ateno! Todo objeto programado possui uma Private Sub e uma End Sub. OK? Insira a linha de codificao abaixo no evento clique do boto OK. LblNome.Caption = TxtNome.Text Isto funciona da seguinte maneira: Est sendo atribudo o contedo da caixa de texto (deve ser inserido um nome), para o contedo vazio do rtulo. Dvidas em relao s propriedades Caption e Text. Muito bem... A propriedade Caption responsvel pelo contedo do objeto Label e a propriedade Text responsvel pelo contedo do objeto TextBox. Simples no? Execute agora o programa e faa o seguinte: Digite um nome qualquer no objeto Caixa de Texto,

Depois do nome digitado, d um clique sobre o Boto de Comando.

A figura a seguir nos mostra como dever ficar o formulrio aps o teste:

Pode finalizar o aplicativo clicando no X do formulrio ou no boto End. Salve o seu projeto. Muito bem! Daqui pra frente o processo de montagem dos nossos programas exemplos ficaro mais fceis. Basta voc seguir as instrues anteriores e tudo andar nas mais perfeitas condies. Beleza? timo......

2.5 CONCATENANDO VALORES

Neste exemplo iremos mostrar no s o nome de uma pessoa mas tambm o seu sobrenome, porem, o nome e o sobrenome sero informados em objetos diferentes (TextBox). Esta juno de Strings recebe op estranho nome de concatenao. Vamos montar nosso formulrio ento? Primeiramente inicie um novo projeto executando os seguintes passos: 1. Clique no Menu File e clique no item New Project, 2. Na janela a seguir selecione a opo Standard EXE e clique no boto OK

A janela New Project.

No formulrio fornecido com o novo projeto, configure-o conforme a seguir: Name: FrmTeste Caption: Primeiro teste de Visual Basic. MaxButton: False MinButton: False StartUpPosition: 2 - CenterScreen Depois de formatar as propriedades iniciais do seu formulrio, salve o seu projeto seguindo os mesmos procedimentos vistos anteriormente. Insira um componente Label ao formulrio e altere as seguintes propriedades do mesmo:

Name: LblNome

Caption: Informe o seu nome:

Observe a figura ao lado e veja como deve ficar inicialmente o seu formulrio:

Proceda da mesma forma e insira um outro objeto Label, abaixo deste que voc j criou e formate as seguintes propriedades: Name: LblSobrenome Caption: Informe o seu Sobrenome: timo! Agora faa o seguinte: Ao lado direito de cada objeto Label ser colocado um componente TextBox, que devero ser formatados da seguinte maneira: 1 TEXTBOX Name: TxtNome Text: Selecione o contedo e delete 2 TEXTBOX Name: TxtSobrenome Text: Selecione o contedo e delete

Insira agora abaixo dos objetos j existentes dois objetos CommandButton (Boto de Comando) um ao lado do outro e formate as propriedades dos mesmos conforme a seguir: 1 BOTO Name: CmdConcatenar Caption: &Concatenar 2 BOTO Name: CmdLimpar Caption: &Limpar

E por ltimo insira um outro objeto Label abaixo dos botes de controle. Este Label ser usado para a juno do nome com o sobrenome que sero informados nas caixas de texto. Formate o Label conforme a seguir. Name: LblResultado BackColor: Amarelo Claro (procure na paleta de cores) Caption: Selecione o contedo e delete (no escreva isso hein?) Se voc quiser usar a nossa grande ferramenta de ajuda de cpias CTRL + C e CTRL + V para facilitar em relao aos objetos, fique a vontade. Porem, no momento que voc for colar o objeto copiado no seu formulrio fique atento para a seguinte mensagem:

You already have a control named nome do objeto sendo copiado. Do you want to create a control array? Esta mensagem informa que voc j tem um controle em seu formulrio com o determinado nome. E a pergunta que faz se voc quer criar um control array. Se voc clicar no boto Sim na mensagem ser criado um objeto com o mesmo nome daquele que voc est copiando, e ser criado um ndice para o nome deste objeto. O que isto muda? Na hora de programar alem de informar aquilo que j vimos at agora (Objeto.Propriedade = Valor), voc ter que informar tambm o ndice do objeto atravs do mtodo Item. Ficaria com a seguinte sintaxe: Objeto.item(ndice do objeto).Propriedade = Valor Se voc quiser uma dica, na hora que for copiar e colar um objeto, na mensagem vista acima clique sempre no boto No. Ficar mais fcil a programao, com certeza! Observe ao lado como deve ficar o seu formulrio aps inserir os objetos e format-los.

pelo . (ponto) ser exibida uma caixa com as propriedades e mtodos que o objeto suporta. Digitando apenas algumas letras e aparecendo a propriedade requerida selecionada, basta voc pressionar a barra de espao do teclado que ser preenchida automaticamente a propriedade frente do objeto. Preste ateno! Se ao informar o nome do objeto no aparecer a caixa de propriedades e mtodos, v at ao formulrio e verifique o nome do objeto (propriedade Name), pois o nome que voc informou no est correto. Observe a figura ao lado:

No esquea de ir salvando o seu projeto! Antes de comear a programar vai ai mais uma dica: Quando voc estiver codificando e informar o nome do objeto seguido

Estando com o formulrio pronto, vamos programar o evento click do boto Concatenar. D um duplo clique sobre o boto concatenar para acessar a janela de codificao do Visual Basic. Digite a linha de codificao conforme a seguir (em negrito): Private Sub CmdConcatenar_Click() LblResultado.Caption = TxtNome.Text + TxtSobrenome.Text End Sub J podemos executar o aplicativo e verificar o efeito da juno dos objetos das caixas de texto. Depois de clicar no boto concatenar notaremos que no ficou muito boa a codificao, pois no demos espao entre o nome e o sobrenome. Para corrigir isto muito simples. Basta adicionar no meio das duas Strings (Caixas de texto) um espao em branco. Faa alterao na sua linha de codificao conforme o exemplo a seguir: Private Sub CmdConcatenar_Click() LblResultado.Caption = TxtNome.Text + " " + TxtSobrenome.Text End Sub Execute o seu aplicativo.

Concateno (juno) entre duas strings.

O espao entre o nome e o sobrenome se deu atravs dos caracteres " ". Repare que existe um espao entre as duas aspas, forando com que se crie um espao em branco entre as duas Strings. Agora vamos programar o boto Limpar. D um duplo clique no boto Limpar e acesse a janela de codificao o Visual Basic. Verifique se voc est no evento Click. Est? Ento OK! Digite a codificao a seguir (negrito): Private Sub CmdLimpar_Click() TxtNome.Text = "" TxtSobrenome.Text = "" LblResultado.Caption = "" End Sub

Repare na codificao: Tanto nos objetos TextBox quanto no objeto Label, est sendo aplicado uma string sem contedo, ou seja, no h espao entre as aspas. Isto far com que os objetos sejam limpos sem haver espao de caractere em branco nos mesmo. O prximo passo agora , alem de limpar os objetos, enviar o Foco para a primeira caixa de texto. Enviar o foco a um determinado objeto significa determinar para onde o cursor ir depois de executar as linhas de codificao. Para executar esta operao usaremos o nosso primeiro Mtodo no Visual Basic. Este mtodo chama-se SetFocus. Atualize a sua programao no boto limpar conforme a seguir: Private Sub CmdLimpar_Click() TxtNome.Text = "" TxtSobrenome.Text = "" LblResultado.Caption = "" TxtNome.SetFocus End Sub O mtodo Setfocus na ltima linha far com que o cursor seja posicionado na caixa de texto TxtNome depois da rotina de limpeza dos objetos. Salve o seu projeto. Teste o mesmo e faa-o funcionar perfeitamente OK? Valeu novamente e at a prxima. Fuiiiiiiiiii.

Captulo 3

3.1 TRABALHANDO COM GRUPOS DE OPES

Este nosso prximo exerccio ser para firmar a compreenso da sintaxe de atribuio de valores a objetos. Objeto.Propriedade = Valor. Neste projeto usaremos outros objetos em nosso formulrio como, por exemplo, objetos de botes de opo (OptionButton) e Frames (objeto usado para definir grupos de objetos) e outros componentes. Vamos iniciar o Visual Basic e formatar o nosso formulrio. Name: FrmFormas Caption: Exemplo Atribuio de Valores Desabilitar botes Maximizar e Minimizar do formulrio Centralizar o formulrio Depois de formatar o formulrio, no esquea, SALVE O SEU PROJETO. Insira agora no formulrio um objeto FRAME e formate as seguintes propriedades: Name: FraFormas Caption: Opes das formas

Observe o formulrio com o Frame.

Como vimos anteriormente o objeto Frame neste exemplo servir para separar um grupo de botes de opo.

3.2 BOTO DE OPO Preste ateno! o objeto onde voc, dentro de O objeto OptionButton um grupo de opes, seleciona a opo desejada e somente uma opo poder ser selecionada. Vamos tomar o seguinte exemplo: Voc est preenchendo um cadastro via computador e de repente voc tem que informar o sexo. No formulrio haver duas opes que podero ser dois botes de opo. Se voc clicar na opo Masculino e estiver marcado o boto com a opo Feminino, este ser desmarcado automaticamente, selecionando aquele que voc clicou e vice-versa. O nosso exerccio funcionar de uma maneira bem parecida. Teremos dois grupos de botes de opes, onde somente um boto em cada grupo poder ser selecionado. Voltando a configurao do formulrio, insira dentro do objeto Frame 03 (trs) objetos OptionButton. S no esquea de confirmar se estes trs objetos realmente esto vinculados ao nosso primeiro frame. Formate as propriedades dos objetos OptionButton conforme a seguir: 1 Objeto Name: OptRetangulo Caption: Retngulo Value: True 2 Objeto Name: OptQuadrado Caption: Quadrado 3 Objeto Name: OptCircunf Caption: Circunferncia

A propriedade Value atribuda como True somente ao primeiro objeto, pois neste grupo de opes, o primeiro objeto entrar selecionado. Observe na figura a seguir:

timo! Agora vamos criar um outro grupo de opes aonde vamos trabalhar com algumas opes de cores. Insira um novo Frame ao formulrio e vincule a ele 06 (seis) objetos boto de opo (OptionButton). Com base na formatao das propriedades efetuada nos objetos vistos anteriormente, formate tambm estes objetos de modo que os mesmos fiquem com a aparncia da figura a seguir:

No esquea de definir a propriedade Valeu como True para o boto de opo da cor branca.

3.3 ALINHANDO OBJETOS NO FORMULRIO

Voc pode tambm utilizar a ferramenta de alinhamento de objetos caso queira alinhar alguns objetos em posio igual um ao outro. Para isso execute os seguintes passos: 1. Selecione os objetos a serem alinhados (Com a tecla Shift pressionada v clicando nos objetos que deseja alinhar). 2. Clique no menu Format no Visual Basic. 3. Selecione o item Align e em seguida a opo de alinhamento desejada. Ser alinhado pelo ltimo objeto selecionado. Lembre-se! As opes de alinhamento estaro habilitadas somente depois de voc selecionar os objetos a serem alinhados.

Agora vamos adicionar ao formulrio outros objetos que faro parte do e nosso exemplo. Localize na caixa de objetos (General) o objeto Shape adicione o mesmo ao formulrio. Este objeto controlar as opes de formas do nosso exemplo. Este objeto inicialmente dever ter a forma de um retngulo. Formate o objeto Shape da seguinte maneira: Name ShpFormas BackStyle 1 - Opaque BorderStyle 0 Transparent BackColor Selecione Cor Branco

A propriedade BackStyle define o estilo de fundo do objeto e a propriedade BorderStyle define o estilo da borda. A propriedade que utilizaremos para programar a forma do objeto a propriedade Shape. Repare os valores da mesma. Na hora da codificao basta voc informar os valores dessa propriedade para que o objeto mude a forma de ser apresentado. Utilizaremos os seguintes valores. 0 Para a forma Retangular. (rectangle) 1 Para a forma Quadrada. (square) 3 para a forma Circunferncia. (circle) Adicione tambm dois botes (objetos CommandButton) e formate-os conforme a seguir:

Boto 1 Name: CmdFechar Caption: &Fechar

Boto 2 Name: CmdMensagem Caption: &Mensagem

O boto Fechar ser programado para finalizar o aplicativo quando clicando, e o boto Mensagem ser usado para DISPARAR uma mensagem atravs de uma funo. Veja a seguir como dever ficar o seu formulrio com todos os objetos necessrios para o exerccio.

3.4 CODIFICAO DOS OBJETOS

Tudo pronto? Ento vamos comear a codificao do nosso formulrio. A nossa primeira programao ser em cima da opo quadrado do primeiro grupo de opes . D um duplo sobre o boto de opo quadrado para acessar a janela de codificao do Visual Basic e insira o seguinte cdigo (em negrito). Private Sub OptQuadrado_Click() ShpFormas.Shape = 1 End Sub Repare que usamos a sintaxe de atribuio de valores a objetos nesta programao, ou seja, atribumos o valor 1 (valor da forma quadrado) para a propriedade Shape (responsvel pela forma do objeto) do objeto Shape cujo

nome ShaFormas (propriedade Name). Execute o seu programa ( ou F5) e faa o teste clicando sobre o objeto programado. Fcil no mesmo? timo. Agora faa o seguinte: Programe agora as opes: Retngulo e Circunferncia. Estando pronto (programado) o primeiro grupo de opes, vamos programar o grupo das cores. Devemos seguir o mesmo conceito da programao anterior, porm no a forma do objeto que vai mudar e sim a cor de fundo (Propriedade BackColor). Para lidar com cores no Visual Basic, podemos usar algumas constantes existentes na prpria linguagem de programao. Para usar estas constantes bem simples. Basta adicionar a frente do nome da cor (o nome da cor em lngua inglesa) a palavra reservada VB. Observe os valores das constantes a seguir: Cor Branco vbWhite Cor Vermelho vbRed Cor Azul vbBlue Cor Preto vbBlack Cor Verde vbGreen Cor Amarelo vbYellow

D um duplo clique sobre o boto da opo de cor vermelha e insira a codificao a seguir (em negrito). Private Sub OptVermelho_Click() ShpFormas.BackColor = vbRed End Sub Execute o seu programa ( ou F5) e faa o teste clicando sobre o objeto programado. Muito bem! Agora, utilizando as constantes das cores, programe o evento Click dos outros botes de opes das cores. Para o boto Fechar utilizaremos o comando no Visual Basic que finaliza uma aplicao. Acesse o evento click do boto fechar e codifique conforme a seguir: (em negrito) Private Sub CmdFechar_Click() End End Sub O comando End utilizado para encerrar um aplicativo em qualquer situao. Teste o programa.

3.5 FUNO MSGBOX

O boto Mensagem ser utilizado para o teste da nossa primeira Funo no Visual Basic. Uma funo no Visual Basic um procedimento que retorna um valor. Por exemplo: Em determinadas situaes dentro de um aplicativo, o programador dever alertar o usurio atravs de mensagens informativas, mensagens de erros, mensagens de escolha de opes, etc sobre alguma situao ocorrida no programa. Para isso ele poder usar a funo MsgBox a qual retornar uma caixa de mensagem sobre a janela ativa. Para usar a funo MsgBox voc dever seguir a seguinte sintaxe. (sintaxe maneira da disposio das palavras envolvidas na codificao).
Msgox Mensagem da caixa de mensagem, cone de informao, Ttulo da caixa de mensagem

Preste bastante ateno nas aspas () e nas virgulas (,), pois as mesmas devem existir exatamente no local informado na sintaxe para a funo MsgBox funcionar. A mensagem da caixa de mensagem a frase que voc deseja que aparea ao usurio. O titulo da mensagem seria o Caption da caixa de mensagem. Em relao ao cone de informao voc poder usar as seguintes constantes: VbIformation VbExclamation VbCritical VbQuestion

Vamos testar a funo MsgBox diretamente no boto mensagem do nosso aplicativo, OK? Bem! Ento acesse o evento click no boto e codifique conforme a seguir: (em negrito). Private Sub CmdMensagem_Click() MgBox " Teste da Funo MsgBox.", vbInformation, "Visual Basic." End Sub Execute o aplicativo e teste, clicando no boto mensagem. Dever ser apresentada a caixa de mensagem a seguir:

Funcionou?... Tenho certeza que sim! Ento parabns e at a prxima!

Captulo 4

4.1 OPERADORES MATEMTICOS

Neste captulo veremos sobre os operadores matemticos, praticando exemplos de programao com a utilizao dos mesmos. Tanto variveis como constantes e objetos podero ser utilizados na elaborao de clculos matemticos com a utilizao dos operadores matemticos. Podemos classificar os operadores matemticos conforme a seguir: Operador + * / ^ Operao Adio Subtrao (e indicao de nmeros negativos) Multiplicao Diviso Exponenciao

Dentro da programao voc ver que ser indispensvel se trabalhar com expresses matemticas, uma vez que, na maioria das vezes, todo trabalho voltado ao computador est relacionado a utilizao de clculos. Para que as expresses aritmticas possam ser executadas no computador, devero ser executadas de modo diferente como as conhecemos na matemtica. Observe o exemplo da expresso a seguir: X = {53 . [65 : (60 + 4)]} Ser escrito como: X = (53 * (65 / (60 + 4))) Note que os colchetes e as chaves no so utilizados. No seu lugar utiliza-se somente os parnteses. Observe este outro exemplo: Para se calcular a rea de um tringulo, cujo calculo se d atravs da multiplicao da base pela altura e depois dividir pela constante 2, ou seja: Area = Base x Altura 2 Na programao dever se codificado da seguinte maneira: rea = (Base * Altura) / 2 Com esta base terica acredito que conseguiremos criar um aplicativo teste e codificarmos algumas operaes matemticas. No mesmo? Ento faa o seguinte: Inicie um novo projeto e formate o formulrio e objetos da maneira conforme a figura a seguir:

Objetos TextBox Definir ropriedades: Name e limpar o contedo da propriedade Text

Objeto Label Definir propriedades: Name, BackColor e limpar o contedo da propriedade Caption

Os nomes dos objetos que sero utilizados como exemplos so: Txt1, Txt2 e Lbl1. Insira tambm um boto de comando e formate-o da maneira como esta sendo apresentado. A idia deste exemplo inserir um valor numrico para cada caixa de texto, som-los e apresentar o resultado no objeto label clicando no boto calcular: Ento, insira a linha de codificao a seguir no evento click do boto calcular (em negrito): Private Sub cmdcalcular_Click() Lbl1.Caption = Txt1.Text + Txt2.Text End Sub Execute o programa e insira o valor 2 na caixa1 e 2 na caixa2. Clique no boto calcular. Qual foi o resultado? Bom, se foi quatro est errado. Como resultado dever aparecer o valor 22. Voc sabe o porque? que o seguinte: Todo valor inserido em uma caixa de texto o programa interpreta como texto (string), e o que ele fez foi simplesmente juntar (concatenar) o valor da caixa1 com o valor da caixa2. Para solucionar este problema utilizaremos outra funo do Visual Basic.chamada Val. A funo Val tem a finalidade de transformar em valor numrico uma seqncia de nmeros armazenados dentro de uma string (neste nosso caso, as caixas de texto). Ento no se esquea...Daqui pra frente quando estiver sendo feito uso de um valor numrico, ser usada a funo Val. Faa a alterao a seguir na sua linha de codificao do boto calcular (em negrito). Private Sub cmdcalcular_Click() Lbl1.Caption = Val(Txt1.Text) + Val(Txt2.Text) End Sub Execute o aplicativo e faa o teste. Agora sim o resultado ser 4. Salve o seu projeto e guarde-o como exemplo para os prximos aplicativos.

4.2 PRATICANDO PROGRAMAO COM CLCULOS

Para demonstrar o uso de todas as operaes matemticas, vamos iniciar um novo projeto e formatar o formulrio com seus objetos conforme exibido na figura a seguir: Formate as propriedades Name e Caption dos objetos Frame. Formate as propriedades Name e Text (limpar o contedo) dos objetos TextBox. Formate as propriedades Name, Caption (limpar o contedo) e BackColor dos objetos Label. Formate as propriedades Name e Caption dos objetos CommandButton (botes de comando)

Para voc definir a ordem de tabulao dos objetos inseridos no formulrio utilize a propriedade TabIndex. (a ordem quando voc pressiona a tecla Tab para se movimentar entre os objetos). Neste nosso exemplo podemos definir esta propriedade para os objetos TextBox e CommandButton. O valor da propriedade TabIndex comea pelo valor 0. Neste exemplo temos dois grupos de opes. O primeiro ser para efetuar o clculo das operaes matemticas: Soma, Subtrao, Multiplicao, Diviso e Exponenciao. O segundo grupo de opo ser para efetuar o clculo da raiz quadrada de um valor informado. Para os cdigos de programao a seguir, sero usados nomes de objetos criados para este exemplo. Preste bastante ateno nos nomes dos objetos que voc informou na propriedade Name dos mesmos para no confundir com os da codificao a seguir. O boto de comando com o caption seguir (em negrito): dever conter o cdigo a

Private Sub CmdSoma_Click() Lbl1.Caption = Val(TXt1.Text) + Val(Txt2.Text) End Sub Execute o aplicativo e teste a operao da soma. Depois do teste e do funcionamento codifique as outras operaes matemticas.

O boto de comando com o caption dever conter o cdigo a seguir (em negrito): Private Sub CmdSub_Click() Lbl1.Caption = Val(TXt1.Text) - Val(Txt2.Text) End Sub O boto de comando com o caption seguir (em negrito): dever conter o cdigo a

Private Sub CmdMulti_Click() Lbl1.Caption = Val(TXt1.Text) * Val(Txt2.Text) End Sub O boto de comando com o caption seguir (em negrito): dever conter o cdigo a

Private Sub CmdDivi_Click() Lbl1.Caption = Val(TXt1.Text) / Val(Txt2.Text) End Sub O boto de comando com o caption seguir (em negrito): dever conter o cdigo a

Private Sub CmdExpo_Click() Lbl1.Caption = Val(TXt1.Text) ^ Val(Txt2.Text) End Sub Em seguida vamos codificar a operao da raiz quadrada. Programe o boto com o seguinte cdigo (em engrito): Private Sub CmdRaiz_Click() Lbl2.Caption = Sqr(Txt3.Text) End Sub Repare a funo Sqr. Esta funo retorna a raiz quadrada de um nmero informado. O que fizemos foi atribuir o valor da terceira caixa de texto (Txt3) juntamente com a funo Sqr para o objeto Label (Lbl2). Execute alguns testes no aplicativo e verifique se tudo est funcionando corretamente. Salve o seu programa, e o guarde bem, pois vamos utiliz-lo nos prximos exemplos.

4.3 VARIVEIS Varivel uma rea reservada na memria do computador para armazenar informaes (valores) temporariamente. Uma varivel se caracteriza por ser uma regio da memria, previamente identificada atravs de um nome, que tem por finalidade armazenar as informaes de um programa. Cada varivel utilizada no programa armazena somente um valor por vez. O contedo armazenado em uma varivel considerado o seu valor. O valor est relacionado com o tipo de dado que uma varivel pode armazenar.

4.4 TIPOS DE VARIVEIS (DADOS) os tipos de variveis (OS DADOS) so representados pelas informaes a serem processadas por uma mquina (computador). A linguagem de programao Visual Basic fornece ao programador um conjunto de tipos de variveis j predefinidos como ser mostrado a seguir: Variveis de dados do TIPO NUMRICO: BYTE : Utilizado para definir tipo de valores inteiros positivos pequenos. Estes valores esto concentrados no intervalo de 0 at 255. Este tipo de varivel utiliza um espao de 1 byte de memria. INTEGER : Define o tipo de valores para nmeros inteiros pequenos. Estes valores se concentram no intervalo de 32.768 (negativos) at 32.767 (positivos). Ocupa um espao de 2 bytes de memria e tem como caractere de declarao (tipo de dado) o sinal % (porcentagem). VarInteger = 10 LONG = Tipo de valores para nmeros inteiros grandes, estando estes valores concentrados no intervalo de 2.147.483.648 (negativo) at 2.147.483.647 (positivos). Ocupa 4 bytes de memria. O caractere de declarao (tipos de dados) o sinal de & (e comercial). VarIntegerLong = 123456789 SINGLE : Utilizada para nmeros de preciso simples, tem como caractere identificador o sinal ! (ponto de exclamao). A varivel deste tipo contem nmeros que so aproximaes. Podemos ter a preciso de apenas sete dgitos. Ocupa espao de 4 bytes de memria, permitindo assim que uma varivel deste tipo consiga trabalhar com valores na faixa de -3,402823Ee38 at -1,401298e-45. Os valores positivos esto na faixa de 1,401298e-45 at 3,402823e38.

DOUBLE : as variveis deste tipo de dado contem nmeros com preciso de 16 dgitos e permitem mais de 300 dgitos. Utiliza como identificador o sinal #. Este tipo de dado ocupa um espao de 8 bytes de memria permitindo assim que essa varivel consiga trabalhar com valores negativos na faixa de -1,79769313486232E308 at 4,94065645841247e-324 (nmeros negativos). Os nmeros positivos aceitos esto na faixa de 4,94065645841247E-324 at 1,79769313486232E308. OUTROS TIPOS DE DADOS STRING : Este tipo de varivel pode armazenar valores alfanumricos como por exemplo: letras, pontos, nmeros e caracteres especiais do teclado. Esta varivel poder ser configurada de forma que aceite at 64K por seqncia de string, e isto ir ocupar um espao de 1 byte por caractere. O sinal identificador o $ (cifro ou dlar). BOOLEAN : Varivel do tipo Lgica, ou seja, define um tipo lgico de dados podendo conter somente os valores True (verdadeiro) ou False (falso). Ocupa espao de memria de 2 bytes. DATE : Este tipo de varivel fornece uma maneira conveniente para armazenar a informao de data e hora para qualquer intervalo de tempo entre meia-noite de 1 de janeiro do ano 0100 at meia-noite de 31 de dezembro de 9999. Este tipo de varivel ocupa 8 bytes de memria. VARIANT : Este tipo de varivel foi acrescentado ao Visual Basic na verso 2.0 e utilizado para armazenar qualquer tipo de dado.

4.5 NOMES DE VARIVEIS Para que possamos utilizar uma varivel ela deve ser declarada, ou seja, antes de atribuir qualquer valor para ela devemos trat-la com um nome. O nome de uma varivel utilizado para identificao e posterior o uso dentro de um programa. Para declarar uma varivel (atribuir um nome) necessrio que sejam estabelecidas algumas regras. Observe: Os nomes de uma varivel podem conter um ou mais caracteres. Os nomes das variveis no Visual Basic podem ter at 255 caracteres;

O primeiro caractere do nome de uma varivel no poder ser nunca um nmero, ou seja, o nome dever comear sempre com uma letra; O nome de uma varivel no poder conter espaos em branco; Tambm no poder ser uma palavra reservada do Visual Basic, seja nome de objeto, nome de funo, nome de procedimento, nome de comandos, etc. No poder ser utilizado nenhum caractere especial para declarao do nome da varivel, como por exemplo: @, #, $, %, &. O nico caractere que sofre esta exceo o underline ( _ ), que poder ser utilizado para simular a separao entre duas palavras, como por exemplo: Valor_1.

4.6 DECLARANDO VARIVEIS

Para a declarao de variveis deve-se utilizar a instruo DIM e informar o nome e o tipo da varivel. O termo tcnico para esta instruo declarao. Observe a sintaxe a seguir: DIM <nome> AS <tipo> Vamos supor que queiramos declarar uma varivel com o nome Valor1 e que a mesma seja do tipo Single. Utilizando a sintaxe de declarao de variveis teramos o seguinte resultado: Dim Vlr1 As Single Voc pode declarar suas variveis uma abaixo da outra. Observe o exemplo:: Dim Vlr1 As Single Dim Vlr2 As Single Poder tambm colocar uma Linha de Comentrio a frente da declarao das variveis utilizando o caractere (aspas simples). Isto servir para voc documentar o seu projeto, ou seja, informar, no caso de variveis, qual o objetivo de declarao das mesmas. Observe o exemplo a seguir: Dim Vlr1 As Single Dim Vlr2 As Single Varivel utilizada para armazenar o valor 1 Varivel utilizada para armazenar o valor 2

As linhas de comentrio ficaro com uma cor diferenciada da declarao das variveis. Voc pode combinar declaraes de variveis (mesmo de tipos diferentes), em uma nica linha, por exemplo:

Dim Vlr1 As Single, Vlr2 As Single, Vlr3 As Currency Um erro comum de se cometer utilizar algo como: Dim Vlr1, Vlr2, as Single Neste caso pressupe-se que as duas variveis sejam do tipo Single, porem a varivel Vlr1 do tipo Variant e somente a varivel Vlr2 o tipo Single. Podemos concluir ento que, todas as vezes precisamos utilizar o identificador de tipo.

4.7 FORANDO A DECLARAO DE VARIVEIS um dos erros mais comuns que podemos constatar em um programa o nome da varivel com erro de ortografia. Se voc cometer um erro ortogrfico com o nome de uma varivel em seu programa o Visual Basic criar uma nova varivel que no tem nada a ver com aquela que voc queria trabalhar, e conseqentemente isto provocar um erro inevitavelmente. Para evitar este tipo de situao devemos fazer com que todas as variveis sejam declaradas. Desta maneira voc ser notificado se houver erro ortogrfico ou at mesmo a no declarao de uma varivel de um procedimento. A instruo necessria para exigir a declarao de variveis chama-se Option Explicit. Para utilizar a instruo Option Explicit execute os seguintes passos: 1. 2. 3. 4. Abra a janela de codificao do Visual Basic (code). Selecione na caixa de objetos (Object) o objeto General. Selecione Declarations na caixa de combinao Procedure. Digite Option Explicit.

Forando a declarao de variveis no Visual Basic.

Depois de processado o comando Option Explicit, o Visual Basic no permitir mais que voc utilize uma varivel sem antes declar-la. Se tentar utiliz-la sem a declarao da mesma, aparecer uma mensagem de erro, alertando que a varivel no est definida. Sem o comando Option Explicit declarando esta mensagem no seria exibida. Observe a figura a seguir:

Se quiser, voc poder selecionar uma opo no Visual Basic que insira automaticamente o comando Option Explicit em seu cdigo conforme seja necessrio: Para esta executar esta opo execute os seguintes passos: 1. Selecione o Menu Tools no Visual Basic. 2. Selecione e clique no item Options... 3. Na janela que ser exibida selecione a guia Editor marque a caixa com a opo: Require Variable Declaration. 4. Por fim, clique no boto OK.

4.8 NVEIS DE DECLARAO DE VARIVEIS Existe trs nveis de declarao de variveis que voc poder escolher para declarar as suas variveis. Voc poder declarar suas variveis nos seguintes nveis: NVEL DE OBJETO : As variveis declaradas neste nvel podero ser usadas somente para o objeto declarado, ou seja, outros objetos no reconhecero a varivel declarada a nvel de objeto. Esta varivel declarada na Procedure do objeto em que ser utilizada. Observe o exemplo a aseguir:

Foi declarado as variveis Vlr1 e Resultado no procedimento do objeto Cmdsoma, isto significa que elas podero ser usadas somente neste objeto. NVEL DE FORMULRIO : As variveis declaradas em nvel de formulrio so aquelas declaradas na seo General Declarations, como visto anteriormente. As variveis declaradas neste local podero ser utilizadas por todos os objetos do formulrio declarado, inclusive o formulrio. Observe o exemplo a seguir:

Bem! J estamos com um grande conhecimento sobre variveis, no ?

NVEL DE PROJETO : As variveis declaradas em nvel de projeto podero ser utilizadas por todos os objetos e todos os formulrios pertencentes ao projeto. S que neste caso a varivel ter que ser declarada em um mdulo e em vez de usar a instruo DIM ter que ser usada a instruo PUBLIC. Estudaremos sobre mdulo mais pra frente, portanto, quando declararmos um varivel de nvel de projeto ser exemplificado da maneira como exemplificamos os outros nveis de declarao. OK?

No prximo captulo vamos ver como podemos efetuar programao utilizando variveis. At l ento....

Captulo 5

4.1 ATRIBUINDO VALORES A VARIVEIS

Depois de termos o primeiro contato com variveis (tipos, declarao, nveis de declarao), chegou hora de executarmos exemplos de programao com variveis. Para isto voc ter que aprender tambm a atribuir valores a variveis. Preste ateno na sintaxe a seguir: <Nome da Varivel> = Valor Repare que a atribuio de valor a uma varivel parecida com a atribuio de valor a um objeto. A diferena que a varivel no tem propriedade. Vamos supor que temos uma varivel declarada com o nome Valor1 e esta varivel do tipo Integer. Vamos atribuir para esta varivel o valor 100. Observe o exemplo a seguir: Valor1 = 100 Simples no mesmo? Pois ! Atribuio de varivel isto mesmo. armazenar um valor em uma varivel declarada para podermos utiliz-la durante a programao do aplicativo. Bem! Vamos ento a um exemplo com variveis. O exemplo a seguir efetuar o clculo do salrio liquido de um profissional que trabalha por hora. Ter que ser informado o valor da hora de trabalho, o nmero de horas trabalhadas e um percentual de desconto. Depois destes valores informados dever ser apresentado: o valor do salrio bruto, o valor do desconto e o valor do salrio lquido. Inicie um novo projeto e formate o formulrio e objetos conforme a seguir: FORMULRIO : Name : FrmSalrio Caption : Clculo de Salrio com Variveis MaxButton : False Minbutton : False StartUpPosition : 2 CenterScreen GRUPO DE OPES : (Frame 2) Name : FraInf FraResult Caption : Informaes Resultados CAIXAS DE TEXTO (TextBox - 3) : Name : TxtHoras TxtValorHora TxtPorcentagem Text : Limpar o contedo das caixas de texto

RTULOS (LABEL - 2) : Name : LblSalBruto LblSalLiquido Alignment : 2-Center (Centraliza o caption no centro do objeto) Caption : Limpar o contedo dos rtulos. BackColor : Definir uma cor diferente a do formulrio. Os objetos Label usados para informao, devero ser formatados a propriedade Caption. Observe na figura do formulrio a seguir o valor da propriedade Caption de cada um deles. BOTES DE COMANDO (CommandButton - 1) Name : CmdCalcular CmdSair Caption : &Calcular &Sair Formate tambm a ordem de tabulao dos objetos atravs da propriedade TabIndex. E no esquea de salvar o seu projeto. A aparncia do formulrio dever ficar conforme a figura a seguir:

4.2 PROGRAMANDO COM VARIVEIS

Vamos programar? As variveis que sero declaradas so as seguintes: HoraTrab (Utilizada para calculo das horas trabalhadas) ValorHora (Utilizada para o valor da hora trabalhada) PercDesc (Utilizada para o percentual do desconto) SalBruto (Utilizada para o Valor do Salrio Bruto) TotDesc (Utilizada para o Total de Descontos)

SalLiq (Utilizada o Salrio Lquido) Estas variveis podero ser declaradas a nvel local, pois sero utilizadas somente no boto calcular. Bem! Ento acesse o evento click do boto calcular e declare as variveis conforme a seguir (em negrito): Private Sub CmdCalcular_Click() Dim HoraTrab As Single 'Utilizada para calculo das horas trabalhadas Dim ValorHora As Single 'Utilizada para o valor da hora trabalhada Dim PercDesc As Single 'Utilizada para o percentual do desconto Dim SalBruto As Single 'Utilizada para o Valor do Salrio Bruto Dim TotDesc As Single 'Utilizada para o Total de Descontos Dim SalLiq As Single 'Utilizada o Salrio Lquido End Sub Repare que foi utilizada a linha de comentrio () aps a declarao das variveis. Isto super importante pra voc no esquecer para que serve cada varivel. Em seguida vamos atribuir valores s variveis. Abaixo das variveis declaradas (neste mesmo objeto) insira a seguinte linha de cdigo: HoraTrab = TxtHoras.Text ValorHora = TxtValorHora.Text PercDesc = TxtPorcentagem.Text Para a varivel HoraTrab atribudo o valor da caixa de texto TxtHoras. Para a varivel ValorHora atribudo o valor da caixa de texto TxtValorHora. Para a varivel PercDesc atribudo o valor da caixa de texto TxtPorcentagem. Depois de atribuir os valores s variveis, sero efetuados os clculos necessrios. Abaixo da codificao efetuada acima, insira a linha de cdigo a seguir: SalBruto = HoraTrab * ValorHora TotDesc = (PercDesc / 100) * SalBruto SalLiq = SalBruto - TotDesc Observe: Na varivel SalBruto armazenado o clculo (multiplicao) entre as variveis HoraTrab e ValorHora. Isto feito pra saber de quanto ser o salrio bruto do profissional. Na varivel TotDesc armazenado o tal desconto. Este total de desconto pode ser por exemplo: a porcentagem de desconto do imposto INSS. Divide-se a porcentagem de desconto (PercDesc) por 100 e em seguida multiplica-se pelo salrio bruto (SalBruto) do profissional. Repare que a operao de diviso est entre parnteses, pois neste calculo existe duas operaes: Diviso e Multiplicao. Na varivel SalLiq armazenado o clculo (Subtrao) das variveis: SalBruto e TotDesc para se obter o valor do salrio liquido do profissional.

Feito isto, agora s exibir os valores armazenados nas variveis nos objetos Label. LblSalBruto (mostra o salrio bruto) e LblSalLiquido (mostra o salrio liquido). Ento, abaixo das linhas de programao relativas aos clculos, insira as seguintes linhas de codificao: LblSalBruto.Caption = SalBruto LblSalLiquido.Caption = SalLiq Execute o seu programa e faa os testes. Perceba que o programa executa todos os clculos e em seguida so exibidos o salrio bruto e o salrio lquido do profissional, cujos valores esto armazenados nas variveis SalBruto e SalLiquido.

O formulrio de calculo de salrio com valores calculados.

Repare que os resultados dos salrios no aparecem na forma de moeda, ou seja, sem o smbolo do Real (R$) e sem pontos e virgulas nas casas decimais. Para resolver este problema podemos utilizar uma funo chamada Format. A funo Format retorna uma expresso devidamente formatada do contedo de um valor. A sintaxe para esta funo a seguinte: Format(Expresso Numrica, Formato) Preste ateno no exemplo: Vamos formatar o valor 2556 para ser apresentado como valor moeda. Format(2556, "R$ ##,##0.00") Repare que o formato deve estar entre aspas dupla (). O caractere # utilizado na funo Format usado para se referenciar a nmeros e os zeros ao final da formatao so referentes a formatao moeda. Outro detalhe que as casas decimais no contem virgula (,) e sim ponto (.). Isto acontece devido a linguagem de programao. Alem de voc poder formatar valores numricos poder formatar tambm a apresentao de datas. Vamos voltar ao aplicativo ento.

Para a formatao dos salrios (Bruto e Lquido) atualize suas duas ultimas linhas de codificao do boto Calcular conforme a seguir: LblSalBruto.Caption = Format(SalBruto, "R$ ###,##0.00") LblSalLiquido.Caption = Format(SalLiq, "R$ ###,##0.00") Execute o aplicativo e faa novamente os testes. Os resultados dos salrios Bruto e Liquido devero ficar com o formato da figura a seguir:

Programe o boto Sair, utilizando o comando End no evento click do mesmo. O comando End ir finalizar a aplicao. SALVE O SEU PROJETO. Gostou de trabalhar com variveis? As variveis possuem uma importncia fundamental dentro de qualquer linguagem de programao no nosso caso o Visual Basic. Elas armazenam os dados que vo para a memria do computador, e sempre que referenciamos a elas, esses dados retornam da memria. E quando esto na memria podem fazer clculos e executar determinadas funes. Isto faz com que todos os procedimentos que executamos utilizando variveis tero um processamento mais rpido e seguro pois estamos lidando com informaes armazenadas diretamente na memria da mquina.

4.3 VARIVEIS NAS OPERAES MATEMTICAS Depois de praticar o uso de variveis no projeto salrio, vamos agora executar mais alguns testes utilizando um projeto j existente. Utilizaremos o projeto codificado no captulo 4, o projeto das operaes matemticas. Toda a programao que fizemos naquele projeto sobre os operadores matemticos e raiz quadrada, foi executada utilizando diretamente os valores das caixas de texto.

A seguir veremos como podemos efetuar os clculos utilizando variveis.

Abra o projeto das operaes matemticas .

O primeiro passo declarar as variveis que sero utilizadas para os clculos. As variveis que utilizaremos aqui sero de nvel de formulrio, pois utilizaremos as mesmas variveis para todas as operaes matemticas. Somente para o calculo da raiz quadrada ser utilizada uma varivel diferenciada. Na seo General Declarations do formulrio crie as seguintes variveis:

Option Explicit Dim Vlr1 As Single 'Varivel para armazenar valor da 1 Cx de Texto (Txt1) Dim vlr2 As Single 'Varivel para armazenar valor da 2 Cx de Texto (Txt2) Dim Result As Single 'Varivel para armazenar Resultado dos Clculos entre Txt1 e Txt2 Dim VlrRaiz As Single 'Varivel para armazenar valor Cx de Texto Raiz Quadrada (Txt3) Dim ResultRaiz As Single 'Varivel para armazenar clculo da Raiz Quadrada.

As variveis so do tipo Single visto a operao de diviso poder possuir um resultado de nmero real, ou seja, com ponto flutuante. Agora faa o seguinte: No boto da operao soma programao no evento click (em negrito): Private Sub CmdSoma_Click() codifique a seguinte linha de

Vlr1 = TXt1.Text vlr2 = Txt2.Text Result = Vlr1 + vlr2 Lbl1.Caption = Result End Sub A linha de codificao acima tem a seguinte explicao: 1. Armazenamos o valor da 1 Caixa de Texto na varivel com o nome Vlr1. 2. Em seguida armazenamos o valor da 2 Caixa de Texto na varivel com o nome Vlr2. 3. Para obter o resultado da soma, armazenamos a soma das variveis Vlr1 e Vlr2 na varivel com o nome Result. 4. E por ltimo exibimos o contedo da varivel Result no objeto Label com o nome Lbl1 Seguindo o exemplo da operao soma, utilize as mesmas variveis e codifique as outras operaes. Lembre-se: A nica coisa que vai mudar o operador matemtico. Voc deve estar pensando: Como vou programar as outras operaes utilizando as mesmas variveis? Bom! Isto simples. Primeiramente as variveis so de nvel de formulrio. (Lembra disso?) Outra coisa. As variveis armazenam valores temporariamente, ou seja, quando voc efetua o calculo da operao soma, as variveis vo receber os valores referentes a esta operao. A partir do momento que voc efetua o calculo de outras operaes (desde que estejam programadas), as variveis assumem os valores e os operadores relativos nova operao. Simples no mesmo? Depois de programar as outras operaes matemticas, programe a operao da raiz quadrada. No evento click do boto da raiz quadrada codifique a seguinte linha de programao (em negrito): Private Sub CmdRaiz_Click() VlrRaiz = Sqr(Txt3.Text) ResultRaiz = VlrRaiz Lbl2.Caption = ResultRaiz End Sub Deu tudo certo! timo Salve o seu trabalho e guarde-o para suas futuras pesquisas.

Captulo 6

6.1 OPERADORES RELACIONAIS

Em determinadas situaes dentro de um aplicativo precisamos de maneiras diferenciadas para verificar algum procedimento alem da condio de igualdade. Para isto utilizaremos os Operadores Relacionais. Estes operadores fazem comparaes entre variveis ou expresses. O retorno desta comparao ser sempre True (Verdadeiro) ou False (Falso). Observe na tabela a seguir os operadores relacionais com seus smbolos e nomenclaturas. Smbolo = > < >= <= <> Descrio Igual Maior Menor Maior ou Igual Menor ou Igual Diferente

Nos exemplos a seguir podemos constatar que todas as comparaes sero verdadeiras.

1<4 6>3 2 <= 5 7 >= 5 10 = 10 7 >= 7 9<=9 6 <> 4 Estes operadores sero de muita utilidade quando comearmos a trabalhar com Estruturas Condicionais alm dos operadores Lgicos, que veremos a seguir:

6.2 OPERADORES LGICOS existem muitas ocasies dentro da codificao de um aplicativo em que necessrio trabalharmos com o relacionamento de duas ou mais condies em uma estrutura condicional. Para estas situaes ser necessrio o uso dos operadores lgicos. Enquanto que os operadores matemticos nos retornam o resultado de um clculo, os operadores lgicos sempre iro retornar o valor True quando a lgica exata, ou o valor False quando a lgica no exata.

Complicou um pouquinho? Calma que a explicao para tudo isto j vem por ai. Os operadores lgicos mais usados sero apresentados a seguir: Operador AND: Ser utilizado quando dois ou mais relacionamentos lgicos de uma determinada condio precisarem ser verdadeiros. Observe a tabela verdade a seguir para este tipo de operador. 2 CONDIO Verdadeira Falsa Falsa Verdadeira SITUAO DO RESULTADO Verdadeira Falsa Falsa Falsa

1 CONDIO Verdadeira Falsa Verdadeira Falsa

30 > 15 And 7 = 7 Este resultado ser verdadeiro (True), pois 30 maior que 15 E 5 igual a 5. 12 > 10 And 7 = 4 Neste caso o resultado ser falso (False). 12 maior que 10 mas 7 no igual a 4. Somente uma das duas expresses da condio eram verdadeiras. Operador OR : Utilizaremos este operador quando precisarmos comparar dois relacionamentos e pelo menos um deles deve ser verdadeiro (ou Um ou o Outro dever ser Verdadeiro). Observe a tabela verdade deste operador: 2 CONDIO Verdadeira Falsa Falsa Verdadeira SITUAO DO RESULTADO Verdadeira Falsa Verdadeira Verdadeira

1 CONDIO Verdadeira Falsa Verdadeira Falsa

30 < 20 Or 7 > 4 O resultado ser verdadeiro (True). 30 no menor que 20, mas 7 maior que 4. 20 < 10 Or 4 > 5 O resultado ser falso (False), pois 20 no menor que 10 e nem 4 maior que 5. Operador NOT: Ser utilizado quando se necessitar determinar que uma condio deve ser Not True (No Verdadeira) ou deve ser Not False (No Falsa). Podemos tambm dizer que um operador que inverte o resultado, passando algo que seria

verdadeiro para falso e de falso para verdadeiro. Observe a Tabela Verdade: CONDIO SITUAO DO RESULTADO Verdadeira Falsa Falsa Verdadeira Not (7 > 3) Resultado falso (False). 7 maior que 3. Esta situao de comparao seria Verdadeira (True), porem, como possui o operador Not, ele inverte o resultado, e o retorno falso (False). Operador XOR: Este operador exige exatido na condio. No pode haver equvoco na comparao dos relacionamentos. Ou uma coisa ou outra. Jamais as duas. 7 > 9 Xor 7 > 5 Retorna um resultado verdadeiro (True), pois o resultado das duas comparaes foram diferentes. A primeira falsa (False) e a segunda verdadeira (True). 8 > 10 Xor 6 > 8 Retorna falso (False), pois o resultado das duas comparaes foram semelhantes. A primeira falsa (False) e a segunda tambm (False). 9 > 7 Xor 7 > 5 Retorna falso (False), pois o resultado das duas comparaes foram semelhantes. A primeira verdadeira (True) e a segunda tambm (True).

6.3 TOMADA DE DECISES - ESTRUTURAS CONDICIONAIS

Como o prprio nome j indica, estes comandos executam determinadas aes desde que algumas condies sejam favorveis (verdadeiras). Para efetuar uma tomada de deciso dentro de um aplicativo, o programador dever utilizar a estrutura condicional da instruo If / End if. Esta instruo tem por objetivo definir uma deciso. Esta deciso fundamentada em uma determinada condio que o programador passa, pelas linhas de cdigo, ao aplicativo que est sendo desenvolvido, e poder efetuar um desvio no processamento do programa, dependendo da condio ter um resultado Verdadeiro (True) ou Falso (False). A seguir ser exibida a maneira de como escrever uma instruo If (simples).

If <Condio> Then <Operao> End if

Traduzindo isto ficaria assim: Se <condio> Ento <Operao> Fim Se

Neste exemplo se a <Condio> for Verdadeira ser executada a <Operao>, que se localiza logo abaixo da instruo If, e em seguida o programa executar as outras linhas de codificao localizadas aps o End If. Se a <Condio> for Falsa ser executada somente a codificao existente aps o End If. Vamos fazer um exemplo prtico para isso? OK! Ento vamos l... Inicie um novo projeto e crie um formulrio com os seus objetos conforme mostrado a seguir. Sero utilizados os seguintes objetos: 1. Um Label 2. Uma textBox 3. Um commandButton Os nomes dos objetos ficar por sua conta, porem, observe bem os nomes (propriedade Name) dos objetos que utilizarei nas linhas de codificao. Salve o seu programa.

Neste exemplo ter que ser informado um numero inteiro na caixa de texto. Se o nmero for maior que 10 ser informado atravs de uma mensagem (Msgbox) que o nmero informado maior que 10. Acesse o evento Click do boto processar e codifique as linhas a seguir (em negrito): Private Sub Command1_Click()
Dim VlrInteiro As Integer VlrInteiro = Txt1.Text If VlrInteiro > 10 Then MsgBox "Nmero digitado maior que 10", vbExclamation, "Aviso" End If

End Sub Foi declarada uma varivel (VlrInteiro) para receber o valor da Cx. De Texto (Txt1). A instruo If est testando o nmero que ser digitado na caixa de texto. Se for maior que 10 exibe a mensagem. Caso for menor ou igual a 10 no ir acontecer nada. Execute o aplicativo e faa o teste. Salve o seu programa.

6.4 ESTRUTURA IF / ELSE / END IF Depois de testar a condicional simples da instruo IF / End If, iremos ver como podemos fazer uso da instruo If / Else / End If. Esta condicional funciona da seguinte maneira: Se a condicional do If for Verdadeira ento ser executada a primeira operao, caso contrrio ser executada a operao posicionada abaixo do Else. Observe como fica a condicional utilizando o Else: If <Condio> Then <Operao> Else <Operao> End if A traduo disto seria: Se <Condio> Ento <Operao> Seno <Operao> Fim Se

Vamos ao exemplo prtico disto. No mesmo projeto que acabamos de programar faremos uma nova codificao para testar esta estrutura condicional. Acesse novamente o evento Click do boto processar e deixe a programao da condicional existente como linhas de comentrio utilizando o caractere aspas simples () ao lado esquerdo das linhas de codificao. A declarao da varivel e a atribuio de valor varivel deixe como est. Logo abaixo da condiconal (que est como linha de comentrio) insira a nova programao (em negrito). Private Sub Command1_Click()
If VlrInteiro > 10 Then Else
MsgBox "Nmero digitado MAIOR que 10", vbExclamation, "Aviso" MsgBox "Nmero digitado MENOR ou IGUAL que 10", vbExclamation,"Aviso"

End If

End Sub A declarao da varivel e a atribuio de valor continua com a mesma rotina do exemplo anterior. A condicional agora funciona da seguinte maneira: Se o valor digitado na Cx. De texto for maior que 10 ento ser exibida uma mensagem informando que o nmero maior que 10. Seno ser exibida uma mensagem informando que o nmero informado menor ou igual a 10. Execute o aplicativo e faa os testes e no esquea de SALVAR o seu projeto.

6.5 ESTRUTURA IF / ELSEIF / ELSE / END IF

Depois de trabalhar com a instruo If / Else / end if ainda temos mais uma opo para trabalharmos com uma estrutura condicional IF. Observe o exemplo a seguir: A traduo disto seria: Se <Condio> Ento If <Condio> Then <Operao> <Operao> SenoSe <Condio> ento Elseif <Condio> Then <Operao> <Operao> Seno Else <Operao> <Operao> Fim Se End if Repare que modificamos comando o Else para ElseIf, que sempre executado quando a condio (primeira) no verdadeira. O Else ser executado dependendo da outra condio (segunda) ser Falsa. Isto poderia ser resumido da seguinte maneira: Se a condio do IF for Verdadeira ento executada a primeira operao. Se a condio do IF for Falsa ser testada a condio do ELSEIF e esta sendo Verdadeira ser executada a sua operao. Caso as condies do IF e do ELSEIF forem falsas ser executada a operao do ELSE, sem haver a necessidade de condio para o ELSE, pois se a primeira e a segunda condicional forem FALSA logicamente que a VERDADEIRA s poder, neste exemplo, ser a ultima. Ento vamos as exemplo. Vamos utilizar o mesmo aplicativo que utilizamos nos dois ltimos exemplos. Acesse o Evento click do boto boto e faa as seguintes modificaes: Mantenha a declarao da varivel e atribuio de valor ela e nas outras linhas de programao utilize o caractere aspas simples () para deixlas como linhas de comentrio, como feito no exemplo anterior. Agora insira as novas linhas de codificao que so mostradas a seguir (em negrito) Private Sub Command1_Click()
If VlrInteiro > 10 Then MsgBox "Nmero digitado MAIOR que 10", vbExclamation, "Aviso" ElseIf VlrInteiro < 10 Then MsgBox "Nmero digitado MENOR que 10", vbExclamation, "Aviso" Else MsgBox "Nmero digitado IGUAL a 10", vbExclamation, "Aviso" End If

End Sub Esta condio funciona da seguinte maneira:

Se o valor digitado for maior que 10 ento ser exibida uma mensagem informando que o numero maior que 10. Seno se o nmero informado for menor que 10 a mensagem exibida informar que o numero menor que 10. Seno a mensagem informar que o nmero igual a 10. Legal isto no? Execute o seu aplicativo e teste. Salve o seu programa pois ele ser de grande utilidade pra voc quando precisar pesquisar sobre estruturas condicionais IF.

6.6 ESTRUTURA SELECT CASE

Quando trabalhamos com uma seqncia grande de condies, podemos deixar o programa um tanto meio difcil de ser interpretado. A estrutura SELECT CASE uma forma eficiente de atender este tipo de situao, ou seja, tornar mais enxuto o nosso cdigo. SELECT CASE significa Seleo de Casos. Em outros palavras colocamos vrias possibilidades (vrios casos) para o Visual Basic e ele escolhe um. A sintaxe da instruo Select Case a seguinte: Select Case <varivel> Case <Valor1> <operaoValor1> Case <Valor2> <operaoValor2> Case <Valor3> <operaoValor3> Case Else <OutraOperao> End Select A instruo Case Else no obrigatria dentro da instruo Select Case, porem, utilizada para caso nenhum dos valores Case serem verdadeiros. Para poder mostrar como funciona o Select Case, Inicie um novo projeto e formate o seu formulrio conforme exibido na figura a seguir: Sero utilizados os seguintes objetos: 1. 3 objetos Label (2 informativos e 1 para exibir um resultado) 2. 1 objeto textBox (para informar um valor) 3. 1 objeto commandButton (para executar a operao) Fique atento para os nomes dos objetos (Propriedade Name) que sero utilizados na programao. Seu formulrio dever ser configurado conforme ser exibido na figura a seguir:

Este nosso exemplo funcionar da seguinte maneira> 1. Ser informado um nmero inteiro; 2. Este nmero dever ser verificado para ver se corresponde a um ms vlido. 3. Se for um ms vlido dever ser exibido o nome do ms. 4. Caso o ms no seja vlido dever ser notificado atravs de uma mensagem (MsgBox) Vamos programar ento? Acesse o evento Clock do boto Executar e insira a seguinte codificao (em negrito): Private Sub CmdExecutar_Click() Dim Valor As Byte Valor = Txt1.Text Select Case Valor Case 1 Lbl1.Caption = "Janeiro" Case 2 Lbl1.Caption = "Fevereiro" Case 3 Lbl1.Caption = "Maro" Case 4 Lbl1.Caption = "Abril" Case 5 Lbl1.Caption = "Maio" Case 6 Lbl1.Caption = "Junho" Case 7 Lbl1.Caption = "Julho" Case 8 Lbl1.Caption = "Agosto" Case 9 Lbl1.Caption = "Setembro" Case 10 Lbl1.Caption = "Outubro" Case 11 Lbl1.Caption = "Novembro"

Case 12 Lbl1.Caption = "Dezembro" Case Else Txt1.SetFocus End Select End Sub

MsgBox "Ms inexistente. Informe um valor >= 1 ou <= 12.", vbInformation, "Ateno."

Execute o seu aplicativo e faa os devidos testes. Neste exemplo declaramos uma varivel de nvel de objeto do tipo Byte e atribumos a ela o valor do objeto TextBox (Txt1). Em seguida pedimos ao Visual Basic fazer uma seleo de casos atravs da estrutura condicional Select Case em cima da varivel Valor. Utilizamos um Case para todos os meses do calendrio (1 at 12). Se o usurio digitar um ms que no se encontra nesta seleo a mesma ser desviada para o Case Else informando, atravs de uma mensagem (MsgBox), que o ms informado no existe. Depois da mensagem o foco do cursor enviado para a caixa de texto Txt1 atravs do mtodo SetFocus. E por fim fecha-se a estrutura Select Case com o End Select. A estrutura Select Case ser de grande utilidade para voc dentro da programao. No esquea de salvar o seu programa. Ficamos por aqui. No prximo captulo executaremos mais alguns exemplos com condicionais para firmarmos bem isto. Valeu...e at mais!

Captulo 7

7.1 CONDICIONANDO OBJETOS

Ola pessoal! Depois do contedo sobre estruturas condicionais que foi passado no captulo anterior, acredito que voc esteja apto a fazer alguns testes mais aprofundados. Certo? Neste nosso prximo exemplo utilizaremos nosso projeto de operaes matemticas para aplicao de algumas estruturas condicionais IF. Ento abra o projeto de operaes matemticas.

Formulrio de Operaes Matemticas.

As ltimas codificaes em cima deste aplicativo foi a implementao dos clculos com variveis. Tudo funcionou corretamente, porem, pode acontecer um erro gravssimo. As variveis que foram declarados foram do tipo numrica (Single), lembra-se? Pois ! Na hora de efetuar os clculos, se o usurio informar algum valor nas caixas de texto que no seja valor numrico o aplicativo retornar um erro. Vamos fazer este teste? , sem Ok! Ento execute o aplicativo e clique no boto soma informar nenhum valor nas caixas de texto. Com certeza a programa retornar um erro com a seguinte mensagem:

A mensagem deste erro significa que no houve combinao de valores, ou seja, o tipo de valor que voc esta querendo atribuir a varivel incompatvel com o tipo dela. Quando voc clicou no boto da soma (depois de ter executado o aplicativo), a primeira cx. de texto (Txt1) estava vazia, ou seja, o contedo que havia na caixa era vazio. (). Quando o programa foi atribuir este valor varivel gerou o erro porque a varivel numrica. Entendeu. Esperto este Visual Basic no? No esquea! No s valor vazio que no pode ser atribudo para uma varivel numrica. Nenhum outro tipo de valor (letras, caracteres especiais) pode ser atribudo para uma varivel numrica. Somente nmeros. ai que entra os testes das condicionais, porque antes de atribuir valor a uma varivel voc deve sempre verificar que valor este que est sendo atribudo.

7.2 O DEBUG

Em relao janela do erro, ela sempre vai ser muito til durante a programao. Ela pode nos ajudar a capturar a linha onde o erro aconteceu se voc clicar no boto Debug. O Debug acionado quando o compilador verifica a existncia de erros dentro da aplicao. Ele responsvel por avaliar os erros dentro do programa. S tome cuidado com o seguinte: Neste processo verificado somente os erros de sintaxe, pois os erros de lgica que possam existir sero compilados normalmente. Nunca esquea que a lgica da programao responsabilidade do programador e no da ferramenta de desenvolvimento. Clique ento no boto Debug e veja em qual linha o erro foi gerado. A linha onde contem o erro estar marcada com a cor amarela. Observe a demonstrao a seguir:

Se voc posicionar o cursor do mouse sobre a cx. de texto (Txt1) ir aparecer (atravs de um Hint pequena mensagem) o contedo dela. E repare que o contedo vazio (duas aspas duplas sem espao). Ento o erro esta ai. No podemos atribuir um valor vazio para uma varivel numrica. O boto End na mensagem de erro simplesmente finaliza o aplicativo e o boto Help ir abrir o arquivo de ajuda para informar sobre o erro gerado (esta opo estar habilitada desde que voc tenha o arquivo de ajuda do

Visual Basic instalado na sua mquina). Caso voc no tenha o arquivo de ajuda instalado ser exibida a seguinte mensagem:

Importante esta ferramenta Debug, no mesmo?

7.3 APLICANDO CONDICIONAIS

Tudo explicado ento? timo! Vamos ver ento o que podemos fazer para que isto possa ser tratado e no gere o erro que acabamos de ver. Aplicaremos as seguintes condicionais: Se o contedo das caixas de texto for vazio ento,exibiremos uma mensagem informando que para efetuar o calculo dever ser preenchida as caixas de texto. Depois de testar se o contedo vazio, precisamos testar se o valor que o usurio informou numrico. Sim porque se ele colocar uma letra ou outro caractere que no seja numrico nas caixas de texto, tambm vai gerar erro. A outro condicional dever testar o seguinte: Se o contedo informado no for numrico ento, exibiremos uma mensagem informando que para efetuar o clculo o contedo das caixas de texto devero ser numrico. Para esta condio usaremos uma outra funo do Visual Basic chamada IsNumeric. Esta funo testa se o resultado de uma expresso numrico. Depois de testar estas duas condicionais podemos fazer a atribuio de valores as variveis e em seguida o clculo. Vamos Programar ento? Acesse o evento Click do boto soma e deixe as linhas de programao existentes como linha de comentrio ( ao lado esquerdo das linhas de programao) e atualize com as linhas de codificao conforme mostrado a seguir (em negrito):

Private Sub CmdSoma_Click() If TXt1.Text = "" Or Txt2.Text = "" Then MsgBox "Para efetuar o clculo da soma informe os valores." _ , vbInformation, "Ateno." Exit Sub ElseIf Not IsNumeric(TXt1.Text) Or Not IsNumeric(Txt2.Text) Then MsgBox "Para efetuar a soma informe somente valores numricos." _ , vbInformation, "Ateno." Exit Sub Else Vlr1 = TXt1.Text vlr2 = Txt2.Text Result = Vlr1 + vlr2 Lbl1.Caption = Result End If End Sub Bom! Aqui tem coisa nova no mesmo? Vamos a explicao ento... 1. A primeira condio (IF) verifica Se o contedo da TXt1 OU da Txt2 vazio. Caso a condicional seja verdadeira Ento exibida uma mensagem. Repare que a funo MsgBox est codificada em duas linhas. Isto foi possvel utilizando o caractere underline ( _ ) aps a primeira parte da sintaxe da funo. Observe na linha de programao. Depois da mensagem utilizamos o comando Exit Sub. O comando Exit Sub fora a sada do procedimento (Private Sub), ou seja, o Visual Basic transfere o controle do programa para a linha seguinte a aquela que chamou a rotina. Com o uso do Exit Sub o programa na executar as outras linhas de codificao deste objeto at que esta condicional seja falsa. 2. A segunda condicional (ElseIf) verifica o contedo informado nas caixas de texto. Caso no seja numrico o contedo informado na Txt1 OU na Txt2 Ento exibida uma outra mensagem seguida pelo comando Exit Sub. 3. Se as condies do IF e do ELSEIF forem FALSAS ento ser executado o ELSE, onde atribudo o valor as variveis, efetuado o calculo e apresentado o resultado no objeto. Execute ento o seu aplicativo e faa os testes. E no esquea de salvar o seu programa. A programao dos outros botes de operaes matemtica seguem praticamente a mesma lgica do boto Somar. Somente o boto da diviso ter uma condio a mais. Voc sabe o porque?

Bem! Se voc tentar efetuar uma diviso por 0 (zero) o programa ir retornar um erro, pois no existe diviso por 0 (zero).

Mensagem de erro ao tentar executar uma operao de diviso por 0 (zero).

O que teremos que fazer ento testar o valor da segunda cx. de texto na operao diviso. Ento faa Multiplicao Diviso o seguinte: Programe os botes Subtrao , e Exponenciao a seguir (em negrito): e observe a programao do boto

Private Sub CmdDivi_Click() If TXt1.Text = "" Or Txt2.Text = "" Then


MsgBox "Para efetuar o clculo da diviso informe os valores." _ , vbInformation, "Ateno."

Exit Sub ElseIf Not IsNumeric(TXt1.Text) Or Not IsNumeric(Txt2.Text) Then Exit Sub ElseIf Val(Txt2.Text) = 0 Then Exit Sub Else Vlr1 = TXt1.Text vlr2 = Txt2.Text Result = Vlr1 / vlr2 Lbl1.Caption = Result End If End Sub

MsgBox "Para efetuar o clculo da diviso informe somente valores numricos." _ , vbInformation, "Ateno."

MsgBox "a diviso no pode ser efetuada, pois no existe diviso por 0 (zero)." _ , vbInformation, "Ateno."

Observe o segundo ElseIf. Esta a outra condicional que atualizamos para o boto Diviso. Execute o programa e faa os testes.

A seguir ser exibida a codificao do boto Raiz Quadrada . Neste boto teremos uma nova condicional tambm. Para poder efetuar este calculo no poder ser informado valores negativos, pois seno o programa retornar um erro informando que a chamada do procedimento, ou o argumento invlido. Observe a janela deste erro a seguir:

Atualize ento a codificao do boto Raiz Quadrada conforme o exemplo exibido a seguir (em negrito): Private Sub CmdRaiz_Click() If Txt3.Text = "" Then
MsgBox "Para efetuar o clculo da raiz quadrada informe um valor." _ , vbInformation, "Ateno."

Exit Sub ElseIf Not IsNumeric(Txt3.Text) Then Exit Sub ElseIf Val(Txt3.Text) < 0 Then

MsgBox "Para efetuar o clculo da raiz quadrada informe somente valor numrico." _ , vbInformation, "Ateno."

MsgBox "O clculo no poder ser efetuado pois foi informado um valor negativo." _ , vbInformation, "Ateno."

Exit Sub Else Lbl2.Caption = Sqr(Txt3.Text) End If End Sub Muito bem execute novamente o seu aplicativo e faa os teste relativos s novas programaes. Tudo funcionando? OK! Se ainda existe alguma dvida, no hesite em perguntar e esclarea suas incertezas. 7.4 ESTRUTURAS IF ENCADEADAS Nestes exemplos de condicionais que acabamos de programar (dos operadores matemticos), estamos testando sempre as duas caixas de texto

juntas, ou seja, no podemos interceptar em qual caixa de texto existe o erro (valor vazio ou no numrico). Se na Txt1 ou na Txt2. Para interromper o erro no exato momento em que ele acontece, temos que executar uma condio para cada caixa de texto, gerando assim, uma estrutura condicional bem mais encadeada. Vamos ver ento como podemos executar isto em nosso aplicativo das operaes matemticas. Acesse o evento Click do boto diviso e deixe todas as linhas de programao existentes como linhas de comentrio, e em seguida, insira a nova programao conforme mostrado a seguir: Private Sub CmdDivi_Click() If TXt1.Text <> "" Then If Txt2.Text <> "" Then If IsNumeric(TXt1.Text) Then If IsNumeric(Txt2.Text) Then If Val(Txt2.Text) <> 0 Then Vlr1 = TXt1.Text vlr2 = Txt2.Text Result = Vlr1 / vlr2 Lbl1.Caption = Result Else Exit Sub End If Else Exit Sub End If Else Exit Sub End If Else Exit Sub End If Else End If

MsgBox "Informe um nmero diferente de 0 (zero) na segunda caixa." _ , vbInformation, "Ateno."

MsgBox "Informe somente valor numrico na segunda caixa." _ , vbInformation, "Ateno."

MsgBox "Informe somente valor numrico na primeira caixa." _ , vbInformation, "Ateno."

MsgBox "Para efetuar o clculo da diviso informe o valor da segunda caixa." _ , vbInformation, "Ateno."

MsgBox "Para efetuar o clculo da diviso informe o valor da primeira caixa." _ , vbInformation, "Ateno."

End Sub Reparem que a lgica que usamos foi diferente da usada nos exemplos anteriores das condicionais dos operadores matemticos. Mudamos o modo de comparao dos valores. Preste bastante ateno e veja as diferenas entre a estrutura condicional dos primeiros exemplos e deste exemplo agora.

Execute o seu aplicativo e faa os teste com esta nova programao. Depois dos testes, aplique este novo exemplo de condicionais para as outras operaes matemticas (Soma, Subtrao, Multiplicao e Exponenciao). No esquea de ir salvando o seu projeto. 7.5 ENDENTAO Neste ultimo exemplo das condicionais, no sei se voc reparou, existe algumas linhas ligando um If com seu ELSE e com seu END IF. Eu fiz este exemplo para falar de uma palavra no to comum para ns chamada Endentao. Endentar, para ns programadores, nada mais do que desenhar a nossa programao, principalmente nossas estruturas condicionais de deciso. O recuo das linhas frente das instrues nos mostra a estrutura das condicionais mais clara para a visualizao das mesmas. Se numa situao como a do exemplo da ultima condicional, ns deixarmos todas as linhas uma abaixo da outra, isto pode nos trazer um pouco de dor de cabea, pois se acontecer algum erro durante a compilao, dentro da estrutura no endentada, ficar difcil saber onde esta o erro, pois no podemos distinguir qual ENDIF de qual IF, qual ELSEIF de qual IF, qual ELSE de qual IF, e assim por diante. Nossa que confuso... Observe os exemplos a seguir: Primeiro vou apresentar um pedao de endentado. Olha s! linhas de codificao no-

If TXt1.Text <> "" Then If Txt2.Text <> "" Then Vlr1 = TXt1.Text Vlr2 = Txt2.Text Result = Vlr1 + Vlr2 Lbl1.Caption = Vlr1 + Vlr2 Else MsgBox "Insira valor na caixa 2", vbInformation, "Aviso." Exit Sub End If Else MsgBox "Insira valor na caixa 1", vbInformation, "Aviso." End If Complicado no mesmo? E pe complicado nisso... Repare a seguir o mesmo exemplo com endentao.

If TXt1.Text <> "" Then If Txt2.Text <> "" Then Vlr1 = TXt1.Text Vlr2 = Txt2.Text Result = Vlr1 + Vlr2 Lbl1.Caption = Vlr1 + Vlr2 Else MsgBox "Insira valor na caixa 2", vbInformation, "Aviso." Exit Sub End If Else MsgBox "Insira valor na caixa 1", vbInformation, "Aviso." End If Bem melhor para visualizar no ? Na condicional acima difcil determinar quais instrues vo a cada instruo IF. Se endentarmos cada bloco lgico do cdigo com alguns espaos o cdigo torna-se mais legvel e compreensvel. No Visual Basic, quando voc quiser endentar, basta voc pressionar a tecla TAB que ser criado automaticamente uma tabulao de 4 espaos. Se bem que esta quantidade de espaos pode ser alterada nas opes do Visual Basic. Esse contedo sobre estruturas condicionais muito rico no mesmo? Ns vamos ficando por aqui. Valeu mais uma vez e at o prximo captulo... Fui....

Captulo 8

8.1 FUNES NO VISUAL BASIC

Atravs das funes utilizadas at aqui em nossos exemplos (MsgBox, Val, Sqr, format, IsNumeric ,etc) constatamos a importncia da utilizao de funes no Visual Basic. Uma funo uma rotina pronta para executar determinadas aes. O Visual Basic nos fornece diversos tipos de funes que nos auxiliam na programao em todos os aspectos. So funes que fazem clculos, funes que exibem resultados, etc. Algumas funes precisam de um argumento para executar uma tarefa, outras funes retornam somente algum valor sem necessidade da aplicao de um argumento. A seguir veremos algumas dessas funes e com isto descobriremos o poder que elas exercem dentro da linguagem e qual a sua utilidade.

8.2 FUNES MATEMTICAS

ABS : Retorna sempre um valor absoluto (positivo) de um numero ou varivel informado. MsgBox Abs (-45) O valor retornado ser 45 (positivo) ATN : Retorna o arco-tangente de um nmero. Msgbox Atn (Expresso Numrica) COS : Calcula o cosseno de um ngulo msgBox = Cos (expresso Numrica) FIX : Retorna a parte inteira de um nmero Se houver casas decimais, ser ignorado. No faz arredondamento MsgBox Fix (167.57) O valor retornado ser 167 MsgBox Fix (-167.57) O valor retornado ser -167 HEX : Retorna um valor hexadecimal de um nmero decimal. MsgBox Hex (Expresso Numrica) INT : Esta funo retorna a parte inteira de um nmero, ignorando as casas decimais, quando houver. No executa arredondamento para nmeros positivos. Se o valor for um nmero negativo ser incrementado em um. MsgBox INT (175.77) O valor retornado ser 175

MsgBox INT (-175.77) O valor retornado ser 176 LOG: Retorna o logaritmo natural de um nmero MsgBox Log (Expresso Numrica) RND: Retorna nmeros aleatrios (randmicos) para um valor informado. MsgBox Rnd (Expresso Numrica) SGN: Retorna 1 se o valor informado for maior que 0 (zero), -1 se for menor que 0 (zero) e 0 (zero) se for igual a 0 (zero). MsgBox Sgn (Expresso Numrica) SIN: Retorna o seno de um ngulo. MsgBox Sin (Expresso Numrica) SQR: Retorna a raiz quadrada de um nmero. MsgBox Sqr (Expresso Numrica) TAN: Retorna a tangente de um ngulo. MsgBox Tan (Expresso Numrica) Para executar o teste de algumas funes, faa o seguinte: Inicie um novo projeto no Visual Basic e formate o formulrio e objetos conforme exibido a seguir: FORMULRIO: Name: FrmFunes Caption: Exemplo de funes Matemticas Desabilite os botes maximizar e minimizar Centralize o formulrio LABEL: Name : Defina o nome como Lbl1 at Lbl5 BackColor : Cor Branca Caption : Deixe vazio o valor desta propriedade (menos para o Label informativo) TEXTBOX: Name : TxtValor Text : Deixe o valor desta propriedade vazio TabIndex : 0 COMMANDBUTTON: Name : Cmdexecutar Caption : &Executar

Neste aplicativo executaremos os exemplos das seguintes funes: Funo ABS Funo FIX Funo INT Funo RND Funo SGN Acesse o evento Click do boto de comando Executar e codifique conforme a programao a seguir:

Para testar as funes ter que ser informado um valor na caixa de texto (TxtValor). Para isso foi implementada uma condicional onde testamos se o valor da cx. de texto diferente de vazio (<> ) e se o valor numrico. (IsNumeric). Em seguida codificamos as funes, porem repare que utilizamos o caractere & (e comercial) para concatenar os dois valores que sero

atribudos aos objetos Label e no o caractere + (mais), que utilizamos nos exerccios anteriores de concatenao. Sabe o porque? Se usarmos o caractere + (mais) juntamente com uma String: Funo ABS: e um valor matemtico (numrico) Abs(TxtValor) o programa retornar um erro de combinao de valores (Type Mismatch). Voc at pode usar o caractere + para a concatenao, porem, ter que utilizar tambm uma funo chama STR. Este funo transforma o valor numrico para um valor texto (String). Observe a utilizao da funo Str. na codificao a seguir:

Execute o seu aplicativo e faa os testes para a verificao da utilizao das funes e no esquea de salvar o seu projeto para futuras consultas sobre a utilizao das funes matemticas.

8.3 FUNES DE CONVERSO DE VALORES

CBOOL: Converte uma expresso para uma varivel Booleana (valor lgico - True ou False). Se o argumento for 0 (zero), retornar False, caso contrrio True. MsgBox CBool (Expresso) MsgBox CBool (10) Retornar o valor lgico True MsgBox CBool (0) Retornar o valor lgico False Msgbox CBool (7 =5) Retornar valor lgico False, pois o resultado da comparao no verdadeira. CBYTE: Converte uma expresso para um tipo Byte. MsgBox CByte (Expresso)

MsgBox CByte (176.51) O valor retornado ser : 177 Se o valor for maior que 255 ser retornado um erro (OverFlow) pelo programa, pois expresses do tipo Byte no podem ser maior que 255. CCUR: Converte uma expresso numrica para o tipo Currency (moeda). MsgBox CCur (Expresso Numrica) MsgBox CCur (127.35) O valor retornado ser: 127,35 CDATE: Converte uma expresso para um tipo Data (Data Vlida). Esta converso ser vlida desde que a expresso usada como argumento seja mesmo no formato de uma data, ou seja, dd/mm/yy (dia/ms/Ano). Se tentar retornar um valor String (Valor), ser gerado um erro de tipo incompatvel de dados. MsgBox CDate (Expresso) MsgBox CDate (18/03/85) Retornar a data vlida 18/03/1985 MsgBox CDate (180385) Retornar uma data invlida pois no foi formatado com valor vlido para datas. Se voc tentar converter um valor de data do tipo 30/02/85 o programa retornar um erro, pois o valor trata-se de uma data inexistente.Uma coisa tem que ficar bem clara: Essa converso necessria principalmente quando for informada uma data e esta data vai ser objeto de clculo, pois no podemos efetuar clculos entre datas com os valores em formato String. CDBL: Converte uma expresso numrica em um nmero de ponto flutuante de preciso dupla. MsgBox CDbl (Expresso Numrica) CINT: Converte uma expresso numrica em um valor do tipo nmero inteiroe eftua o arredondamento. MsgBox CInt (Expresso Numrica) MsgBox CInt (67.40) O valor retornado ser 67 MsgBox CInt (67.65) O valor retornado ser 68

CLNG: Converte uma expresso numrica em um valor do tipo nmero inteiro longo. MsgBox CLng (Expresso) A diferena entre esta funo e a funo CInt a abrangncia de nmeros que a varivel suporta. CSNG: Converte uma expresso numrica em um tipo de nmero de ponto flutuante de preciso simples. MsgBox CSng (Expresso) CSTR: Converte uma expresso numrica em um valor do tipo String (texto). MsgBox CStr (Expresso) MsgBox Cstr (123) Retornar o valor 123 em formato do tipo String (Texto). CVAR: Converte uma expresso de qualquer tipo para o tipo variante. MsgBox CVar (Expresso) STR: Converte um valor numrico para o tipo String (texto). Esta funo vlida somente para argumentos numricos. MsgBox Str (Expresso Numrica) Msgbox Str (123) Retornar o valor 123 em formato do tipo String. ASC: Retorna o cdigo ANSI String. MsgBox Asc (Valor String) do primeiro caractere de uma

MsgBox Asc("A") O valor retornado ser: 65, pois este valor o nmero correspondente na tabela ASCII da letra A. CHR: Funo inversa a funo ASC, ou seja, retorna o caractere correspondente ao cdigo na tabela ASCII. MsgBox Chr (Cdigo Caractere) MsgBox Chr (65) O valor retornado ser A. VAL: Esta funo j bem conhecida nossa. Ela converte um valor String com caracteres numricos em uma varivel do tipo numrica. MsgBox Val (Valor String Numrico) MsgBox Var (010) Retornar o valor 10

LCASE: Converte as letras maisculas para letras minsculas. MsgBox LCase(OL) Retornar o valor ol. UCASE: converte as letras minsculas para letras maisculas. MsgBox UCase(ol) Retornar o valor OL

8.4 FUNES STRINGS

MID: Retorna parte do contedo de um valor String. MsgBox Mid("Exemplo Funes do Vb", 9, 13) O valor retornado ser Funes do Vb TRIM: Retira os espaos em branco tanto esquerda quanto direita de um valor. MsgBox Trim (Valor) LTRIM: Retira os espaos em branco esquerda de um valor. MsgBox LTrim (Valor) RTRIM: Retira os espaos em branco direita de um valor. MsgBox RTrim (Valor) FORMAT: Retorna uma expresso devidamente formatada. Por exemplo: vamos supor que voc queira retornar um valor moeda e exibi-lo no aplicativo. Voc ir usar a funo format da seguinte maneira: Dim Valor As Currency Valor = 1000 MsgBox Format(Valor, "R$ ##,##0.00") O valor retornado ser R$ 1,000,00 O caractere # nesta formatao representa valor numrico. Podemos utilizar a funo format tambm para formatar uma data. Observe o exemplo: Dim Valor As Date Valor = "18/3/85" MsgBox Format(Valor, "dd/mmm/yyyy") O valor retornado ser 18/Mar/1985 LEFT: Retorna n caracteres a partir da esquerda de um valor informado.

MsgBox Left(Valor,n Caracteres) Dim Valor As String Valor = "Tcnico em Informtica" MsgBox Left(Valor, 7) O valor retornado ser Tcnico RIGHT: Retorna n caracteres a partir da direita de um valor informado. MsgBox Right(Valor,n Caracteres) Dim Valor As String Valor = "Tcnico em Informtica" MsgBox Right(Valor, 11) O valor retornado ser Informtica LEN: Retorna o nmero de caracteres de uma expresso String ou nmero de bytes requerido para armazenar uma varivel. MsgBox Len (Expresso de Caractere) MsgBox Len("Tcnico em Informtica") Valor retornado: 22

8.5 FUNES PARA TRATAMENTO DE DATA E HORA

DATE: Retorna a Data do Sistema Operacional. MsgBox Date Retornar a data que est configurada no sistema Operacional. ISDATE: Retorna um valor Verdadeiro (True) ou Falso (False) caso a expresso seja uma data vlida. MsgBox IsDate("31/3/85") Retornar um valor verdadeiro, pois a data informada vlida. MsgBox IsDate("32/3/85") Retornar um valor Falso, pois no existe a data informada. DATEADD: Soma um nmero a uma determinada data. Esta funo ideal para clculos de datas de vencimentos. MsgBox DateAdd(Intervalo, Nmero de incremento, Expresso de Data) Intervalo a Expresso de seqncia de caracteres que o intervalo de tempo que voc quer adicionar. TIPOS DE CARACTERES Ano Trimestre Ms

yyyy q m

y d w ww h n s

Dia do Ano Dia Dia da Semana Semana Hora Minuto Segundo

Nmero de Incremento uma expresso numrica que contem o nmero a ser adicionado na data informada. Este nmero pode ser positivo (para obter soma de datas) ou negativo (para obter subtrao entre datas). Expresso de Data a data que est sendo adicionada. MsgBox DateAdd("d", 10, "18/03/85") Retornar o valor 28/03/1985. Neste exemplo foi pedido para adicionar 10 dias (d) na data informada (18/03/85). Muito bom no mesmo? Vamos testar isto na prtica... Inicie um novo projeto e formate seu formulrio conforme a seguir: Formulrio Name: FrmDateAdd Caption: Funo DateAdd TextBox Name: Txt1 e Txt2 Text: Limpar o contedo da propriedade Label Name: Lbl1 BackColor: Branco Caption: Limpar o contedo da propriedade CommandButton Name: CmdCalcular Caption: &Calcular Monte os objetos no seu formulrio conforme o exemplo da figura a seguir: Para testar este aplicativo voc ter que: 1. informar uma data vlida na data da compra. 2. Informar os dias de prazo para pagamento.

No evento Click do boto Calcular insira a programao a seguir:

Foram declaradas duas variveis: Uma para armazenar a data da compra (DataCompra) e outra para armazenar os dias de prazo (DiasPrazo). Antes da atribuio de valores s variveis foi efetuado o teste atravs de uma condicional IF das caixas de texto para verificao do contedo informada. Para verificao da data utilizamos a funo IsDate que verifica se a data informada uma data vlida. Na mesma condicional foi testado tambm o contedo dos dias de prazo, pois dever haver um valor e este valor dever ser numrico (IsNumeric). Depois destas verificaes atribumos ao objeto Label (Lbl1) os valores informados as variveis. Foi utilizado o intervalo d, que representa funo DateAdd uma quantidade de dias a ser adicionado ou subtrado. Muito bem! Execute o seu programa e faa os testes necessrios para verificar o funcionamento dele. No esquea de salvar o seu projeto. DATEDIFF: Calcula o intervalo de dias entre duas datas. Ideal para calcular, por exemplo, o nmero de dias de atraso de uma conta vencida. Msgbox DateDiff(Intervalo, Data1, Data2) Intervalo a expresso de seqncia de caracteres, que o intervalo de tempo que ser usado para calcular a diferena entre a data inicial e a data final. O argumento intervalo tem as mesmas configuraes da funo DateAdd. Dim DataInicial As Date Dim DataFinal As Date DataInicial = "18/03/03" DataFinal = "31/03/03" MsgBox DateDiff("d", DataInicial, DataFinal) final. Retornar o valor 13 que a diferena entre a data inicial e a data Vamos fazer um exemplo prtico para isso... Inicie um novo projeto e formate conforme mostrado a seguir: Formulrio Name: FrmDateDiff Caption: Exemplo Funo DateDiff

TextBox Name: Txt1 e Txt2 Text: Limpar o contedo da propriedade Label Name: Lbl1 BackColor: Branco Caption: Limpar o contedo da propriedade CommandButton Name: CmdProcessar Caption: &Processar Configure o seu formulrio conforme o exemplo da figura a seguir: Para testar o aplicativo, faa o seguinte: 1. Informe a Data Inicial. 2. Informe a Data Final. Insira a codificao a seguir no evento Click do boto Processar:

Para fazer o teste da funo DateDiff foram declaradas duas variveis. Em seguida est sendo testado o contedo das caixas de texto (Txt1 e Txt2), atravs de uma condicional IF. O teste realizado utilizando a funo IsDate, pois somente poder ser efetuado o calculo entre datas se for informado datas vlidas. Depois da condicional so atribudos valores s variveis e em seguida atribudo o valor do calculo (funo DateDiff) ao objeto Label (Lbl1). Execute o aplicativo e veja o funcionamento do mesmo. Salve o seu projeto.

DATEPART: Retorna parte de uma determinada data, relativo a dia, ms, semana, quinzena, etc. MsgBox DatePart(intervalo, Expresso de Data) O argumento intervalo tem as mesmas configuraes das funes vistas anteriormente (DateAdd e DateDiff). Dim Data As Date Data = "18/03/85" MsgBox DatePart("w", Data) O valor retornado ser 2., pois o dia 18/03/85 caiu numa segundafeira. O valor 2 o nmero correspondente da segunda-feira em uma escala de 1 para o Domingo at 7 para o Sbado. DATEVALUE: Retorna uma data especificada como string para uma data vlida do tipo date. MsgBox DateValue(<Valor String de Data>) MsgBox DateValue("18/03/85") Retornar o valor: 18/03/1985 (com valor do tipo Date) DAY: Retorna o dia de uma data. MsgBox Day(Valor da Data) MsgBox Day(18/03/85) Retornar o valor 18. HOUR: Retorna a hora de uma expresso Data Hora. MsgBox Hour(Valor Hora) MsgBox Hour("15:35:30") Retornar o valor 15. MINUTE: Retorna o minuto de expresso Data e Hora. MsgBox Minute(Valor Hora) MsgBox Minute("15:35:30") Retornar o valor 35. MONTH: Retorna o nmero do ms de uma data. MsgBox Month(Valor Data) MsgBox Month("18/03/85") Retornar o valor 3. NOW: Retorna a data e a hora do Sistema Operacional. MsgBox Now Retornar o valor conforme a figura da mensagem ao lado, pois era esta a data e a hora do Sistema quando foi efetuado este teste:

SECOND: Retorna os segundos de uma expresso Data e Hora. MsgBox Second(Valor Hora) MsgBox Second("15:35:30") Retornar o valor 30. TIME: Retorna a hora do Sistema Operacional. MsgBox Time Retornar o valor conforme a figura a seguir:

TIMEVALUE: Retorna a hora definida como string para um valor de hora vlida do tipo Data Hora. MsgBox TimeValue(Valor String de Hora) MsgBox TimeValue("17:25:32") Retornar o valor: 17:25:32 (com valor do tipo Data Hora) WEEKDAY: Retorna um nmero correspondente ao dia da semana em uma escala de: 1 para Domingo at 7 para Sbado. MsgBox WeekDay(Valor Data) MsgBox Weekday(Date) Retornar o dia da semana relative a data do Sistema Operacional. WEEKDAYNAME: Retorna o nome do dia da semana. MsgBox WeekdayName(dia da semana,True ou False)

Exemplo Valor True


MsgBox WeekdayName(Weekday(Date), True) _ , vbInformation, "Funo WeekdayName - TRUE"

Exemplo Valor False


MsgBox WeekdayName(Weekday(Date), False) _ , vbInformation, "Funo WeekdayName - FALSE"

Repare que foi usado a funo WeekDay juntamente com a funo Date para retornar o dia da semana da data do Sistema Operacional.

YEAR: Retorna o ano de uma data. MsgBox Year(Valor Data) MsgBox Year(18/03/85) Retornar o valor 1985. Bom pessoal! Com o conhecimento de todas essas funes poderemos programar muita coisa no Visual Basic. Resta apenas buscar utilidade para elas dentro do desenvolvimento de um aplicativo. Ficaremos por aqui ento. At Breve!!!

Captulo 9

9.1 LAOS DE REPETIO (LOOPINGS)

Falaremos agora de uma rotina super importante dentro de uma linguagem de programao. So os Loopings, tambm conhecidos como Laos de Repetio. Determinadas situaes no desenvolvimento de um aplicativo requer que seja repetido um pedao do programa um determinado nmero de vezes, e os Loopings esto ai justamente para nos ajudar nesta tarefa. A finalidade de usar os laos de repetio, alem da sua fora no que se diz respeito ao processamento do aplicativo, deixar os programas com um tamanho reduzido em relao quantidade de linhas de programao. Imagine se no houvesse os Loopings. A repetio de um determinado trecho do programa teria que ser escrito tantas vezes fosse necessrio para executar a rotina de repetio. Isso d um trabalho que voc nem imagina. Com a opo dos Laos de Repetio podemos determinar repeties de uma rotina com nmeros variados de vezes, desde Loopings que sabemos quando acaba at Loopings indefinidos (so os Laos de Repetio que no sabemos quantos vezes os mesmos sero executados). Podemos dizer que um Loopig uma estrutura condicional que se repete at a que uma determinada condio seja satisfeita. Bem! Ta achando meio complicado este assunto? Na realidade isto na prtica mais fcil do que na teoria. Ento vamos testar alguns tipos de Loopings que o Visual Basic nos proporciona. 9.2 O LAO - DO WHILE / LOOP

Esse tipo de Looping executa todos os comandos que existem entre DO WHILE (Faa Enquanto) e o LOOP (Lao). Quando a execuo do programa encontra o comando LOOP, o DO WHILE reavaliado e a rotina continua at que a condio estabelecida esteja satisfeita, ou seja, at que a mesma seja verdadeira. Do While <Condio> <Instrues enquanto a condio for verdadeira> [Exit Do] Loop Para demonstrar a utilizao deste lao de repetio, vamos criar um novo projeto no Visual Basic e desenvolver um aplicativo utilizando o Do While / Loop. Formate ento o seu formulrio e os objetos conforme as informaes das propriedades a seguir:

Formulrio: Name: FrmLao Caption: Laos de repetio Desabilite os boto Maximizar e Minimizar Centralize o formulrio Label: Label informativo com o Caption: Digite um valor para efetuar a operao. TextBox: Name Txt1 Text: Limpe o contedo da propriedade TabIndex: 0 CommandButton: Name: CmdOk Caption: &Ok TabIndex = 1 Se voc quiser inserir uma figura no boto, faa o seguinte: Defina a propriedade Style como: 1 Graphical Selecione a propriedade Picture e clique no boto para inserir uma figura para o boto. Cuidado para no inserir uma figura grande seno voc ter que redimensionar o boto, e conseqentemente, ele ficar grande tambm. ListBox: Name: Lst1 Este objeto ser utilizado para exibir um conjunto (Lista) de valores. Observe a aparncia do formulrio.

Bem! A finalidade deste aplicativo ler o valor de uma tabuada. Uma varivel ser definida para ser utilizada como contador e ter o valor inicial de 1. Ser criada uma condio dentro de um lao de repetio para ser executada enquanto o valor da varivel (contador) for menor ou igual a 10. No evento Click do boto Ok insira as linhas de codificao a seguir:

Com a aplicao deste Lao de Repetio, o programa ir executar o Looping (Do while / Loop) enquanto a condio for verdadeira. Com a utilizao da instruo EXIT DO, (observe a sintaxe), podemos suspender a execuo do Lao de Repetio, ou seja, antes de efetuar o Loop, o Lao cancelado. A instruo Exit Do opcional neste tipo de Looping. Vamos ver ento como funciona o lao de repetio Do While / Loop nesta programao: 1. Foram definidas 3 variveis do tipo Integer. A varivel VlrCx ser utilizada para armazenar o valor informado na caixa de texto. A varivel Contador ser utilizada para ser o prrpio contador do nosso lao de repetio, e a varivel Resultado, ser utilizada para armazenar o valor informado na caixa de texto multiplicando com o valor atual da varivel Contador. 2. Utilizamos o mtodo Clear no objeto ListBox para efetuar a limpeza do objeto. Desta maneira, todo novo calculo de uma tabuada ser realizado em uma ListBox limpa (sem nenhum valor). 3. Aplicamos a condicional (If) para verificar se existe algum valor informado na caixa de texto e se o valor numrico. 4. Atribumos o valor da caixa de texto (TXt1) varivel VlrCx.

5. Atribumos o valor inicial 1 varivel Contador, pois o calculo de uma tabuada comea sempre pelo valor 1. 6. Iniciamos o Lao de Repetio Do While (Faa enquanto) com a condio de que a varivel Contador dever ser executada enquanto o valor dela for Menor ou Igual a 10. (Ento esta a nossa condio ao Lao de Repetio). 7. A varivel Resultado vai receber o valor da caixa de texto multiplicado pelo valor atual da varivel Contador. 8. O primeiro valor do calculo (armazenado na varivel Resultado) da tabuada adicionado ao objeto ListBox atravs do mtodo AddItem. 9. A prxima linha de programao a atribuio de valor de + 1 varivel Contador. O valor inicial desta varivel era 1. Depois que feito o calculo da tabuada com o valor 1 naturalmente ter que ser efetuado tambm com o valor 2 e assim consecutivamente at o valor 10. (que a nossa condio <=10). 10.O programa chega at a linha onde contem o Loop. A rotina retornada at o lao Do While e testa novamente a condio. Se for Verdadeira ser executado todo processo novamente at que ela seja Falsa. A partir do momento que a condio no seja mais Verdadeira quebrado o Lao de Repetio. Execute o seu aplicativo e veja o funcionamento do Lao de Repetio Do While / Loop. Repare como isto super til dentro da programao. Salve o seu programa e no esquea: Se tiver dvidas, PERGUNTE.

O formulrio com o teste da tabuada do 7

Este nosso formulrio pode dar uma melhorada em relao apresentao do resultado certo? Qual tal algo assim: 7X1=7 7 X 2 = 14 E assim por diante...

Para isso teremos que fazer uma pequena alterao em nosso cdigo de programao. Mas fique tranqilo que no nada difcil, OK Teremos que fazer uma alterao no momento em que adicionamos o valor da varivel Resultado ao objeto ListBox atravs do mtodo AddItem. Vamos programar ento? Na programao existente no exerccio anterior, altere a linha em destaque conforme mostrado na figura a seguir:

Repare que a alterao efetuada est fazendo uso da concatenao (juno) para simular o estilo prprio de uma tabuada. Foi utilizada tambm a funo Str, para transformar o contedo das variveis numricas (VlrCx, Contador e Resultado) para valor do tipo String, pois o objeto ListBox, atravs do seu mtodo AddItem, aceita somente valores do tipo String. Execute o seu aplicativo e faa o teste. A aparncia do seu formulrio dever ficar conforme exibido na figura a seguir:

Salve o seu projeto.

9.3 O LAO - WHILE / WEND O Lao de Repetio do tipo While / Wend tem suas funes controladas tambm atravs de uma condio. semelhante estrutura Do while / Loop, porem a instruo Exit Do no pode ser utilizada neste tipo de Looping. While <Condio> <Instrues enquanto a condio for verdadeira> Wend Inicie um novo aplicativo com as mesmas configuraes dos objetos do exemplo anterior para executarmos os testes com o Lao de Repetio While / Wend.

A lgica de programao utilizada a mesma do exerccio anterior, porem neste caso, no podemos utilizar a instruo Exit Do. Execute o programa e faa os testes. Voc ver que o resultado ser o mesmo do exerccio feito com a utilizao do Lao Do While / Loop. No esquea de salvar seus exerccios de exemplo, pois tero grande utilidade para voc executar laos de repetio em seus futuros projetos.

Exerccio executado e testado com a utilizao do Lao de Repetio While / Wend

9.4 O LAO - DO / LOOP WHILE Neste Lao de Repetio o Comando Do abre a seqncia de repetio, mas no faz nenhum teste de condio. Este teste feito no final da estrutura com o comando LOOP WHILE, ou seja, obrigatoriamente as instrues contidas aps o comando DO sero executadas. Do <Instrues enquanto a condio for verdadeira> [Exit Do] Loop While <Condio> Para os testes deste Lao, inicie um novo aplicativo e considere o exemplo do programa da tabuada. Formate os objetos e Salve o seu aplicativo. No evento Click do boto Ok codifique as linhas de programao a seguir:

A instruo Exit Do tambm opcional neste tipo de Looping. Execute o seu aplicativo e execute os testes.

9.5 O LAO - DO UNTIL / LOOP Aqui neste Lao de Repetio so executados todos os comandos que existem entre DO UNTIL e o LOOP. Quando a execuo do programa encontra o comando LOOP, o DO UNTIL reavaliado e a rotina continua at que a condio estabelecida esteja satisfeita Faa at que. Observe: Do Until <Condio> <Instrues enquanto a condio for verdadeira> [Exit Do] Loop

Para testar este Lao, inicie um novo projeto e formate o formulrio e os objetos conforme os exemplos criados at aqui. Vamos considerar o exemplo do programa da tabuada. Salve o seu projeto o programe o boto Ok conforme as linhas de codificao a seguir:

Observe que o programa executar um Looping at que a condio (contador > 10) se torne verdadeira. Voc pode interromper este Looping tambm com a Instruo Exit Do, porem a mesma no obrigatria. Aqui a condio verificada antes de ser executado o Looping (Loop). Repare que neste tipo de Lao, a condio est invertida em relao ao Looping Do While / Loop. Interessante no mesmo? Salve o seu programa.

9.6 O LAO - DO / LOOP UNTIL O Lao de Repetio Do / Loop Until funciona da seguinte maneira: O Comando DO abre a seqncia de repetio, mas no faz nenhum teste de condio. Este teste feito no final da estrutura com o comando LOOP UNTIL (Repita at que) , ou seja, ser necessrio que as instrues contidas aps o comando DO sejam executadas. Do <Instrues enquanto a condio for verdadeira> [Exit Do] Loop Until <Condio> Vamos utilizar o mesmo programa da tabuada para executar os testes deste Lao de Repetio. Formate seu formulrio e objetos de um novo projeto e salve o seu programa. Codifique o boto Ok conforme a seguir:

Aqui o programa estar executando um Looping at que a situao da condio se torne verdadeira. Neste caso o Looping tambm poder ser interrompido atravs da instruo Exit Do.

9.7 O LAO - FOR / NEXT Neste Lao o comando FOR faz uma contagem de um determinado intervalo de nmeros. Toda vez que esta contagem se defronta com o comando NEXT (prximo) a execuo do programa retorna ao comando FOR at que o nmero final informado seja alcanado. Exemplo: For <Valor> = <Valor Inicial> To <Valor Final> [Step <Passo>] <Instruo> [Exit For] Next <Valor> Usamos a instruo STEP simultaneamente com o comando FOR para fazer com que a contagem seja incrementada. Por exemplo: Se queremos que o comando conte de 2 em 2 deveremos informar da seguinte maneira: FOR Valor = 1 TO 10 STEP 2 A instruo Step opcional. Se for omitida no Lao o contador ser acrescido de 1 em 1. Aqui o Exit For igual ao Exit Do, ou seja, eles permitem interromper um Looping.

Para demonstrar a utilizao do Forn / Next inicie um novo projeto e considere as formataes do formulrio e objetos do projeto de tabuada. Salve o seu projeto. A seguir ser apresentada a codificao do boto Ok com o lao For / Next.

Quando o programa for executado a instruo aps a instruo For ser executadas 10 vezes (1 To 10). A varivel Contador j tem o seu valor inicial de 1 e ser incrementada com valor mais 1 toda vez que o Instruo For, for processada. Voc poder utilizar este tipo de Lao de Repetio sempre que conhecer o valor inicial e o valor final de um valor (varivel) do tipo contador. A instruo Step poderia ser omitida no exemplo acima, pois o nosso incremento de um em um. Depois de todos estes exemplos estamos aptos e encarar qualquer tipo de rotina de Laos de Repetio dentro de nossos futuros projetos, no mesmo? timo! Ento vamos ento ficando por aqui. At a prxima...

Captulo 10

10.1 MATRIZES

Voltando um pouco ao assunto sobre variveis, precisamos falar um pouco a respeito uma maneira muito importante de se trabalhar com armazenamento de informaes em variveis. Existe uma tcnica de programao que nos d a possibilidade de trabalharmos com a reunio de vrias informaes dentro de uma mesma varivel. Esta tcnica chama-se Matriz. Mas preste ateno! Deve-se obedecer regra de que os dados armazenados nesta varivel tero que ser do mesmo tipo. As Matrizes, tambm conhecidas como: vetores, arrays, tabelas em memrias, etc so tipos de dados que podem ser definidos no momento em que se ache necessrio. Podemos definir os nomes das matrizes seguindo as mesmas regras utilizadas na criao de variveis simples. Acho que a coisa est ficando meio complicada no mesmo? Bem! Fique calmo pois vamos partir para a parte prtica, ou seja, vamos ver o funcionamento de uma Matriz utilizando esta tcnica no desenvolvimento de um aplicativo. Analise a seguinte idia: Preciso de um aplicativo onde eu possa controlar a mdia anual de um aluno informando as notas dos 4 bimestres do mesmo e dividindo as mesmas por 4. Ento inicie um novo projeto e configure o seu formulrio e objetos conforme as informaes a seguir: Formulrio: Name: FrmMatriz Caption: Exemplo de Matrizes Desabilitar os botes Maximizar e Minimizar Centralize o formulrio Frame: Name: FraNotas Caption: Informe as notas bimestrais TextBox: Name: TxtB1 at TxtB4 Text: Apagar o contedo da propriedade Label: Name: LblMedia Alignment: 2 - Center Backcolor: Branco Caption: Apagar o contedo da propriedade CommandButton: Name: CmdCalcular Caption: &Calcular

Formate a ordem de tabulao dos objetos atravs da propriedade TabIndex. Observe como dever ficar a aparncia do seu formulrio na figura a seguir:

Primeiramente vamos fazer o exemplo com a utilizao de variveis simples, ou seja, vamos declarar as variveis para armazenar as notas dos 4 bimestres e uma varivel para armazenar o resultado da mdia anual. No evento Click do boto Calcular programe conforme a seguir:

Ai est a codificao utilizando as variveis normais. Foram declaradas 5 variveis conforme visto anteriormente. Em seguida executamos as condicionais para verificao do contedo das caixas de texto para verificao do contedo diferente de vazio e do contedo numrico. Aps as condicionais fizemos a atribuio de valores as variveis e logo em seguida o calculo relativo as notas bimestrais dividindo as mesmas por 4.

Acredito que depois de tantos exemplos exercitados sobre: Condicionais, variveis, operadores e funes voc no teria maiores dificuldades em obter o resultado de programao que acabamos de codificar, no mesmo? Pois muito bem! A utilizao da Matriz nos ajudar no que se diz respeito utilizao de variveis Perceba no exerccio que acabamos de fazer que para obter a mdia foram utilizadas 4 variveis. Com esta nova tcnica (Matrizes) poderemos utilizar apenas uma varivel com a capacidade de armazenar os 4 valores que precisamos neste exerccio. No se espante! isto mesmo que voc acabou de ler. Bastar uma varivel para o armazenamento das 4 notas bimestrais. Est ansioso para ver como isto funciona? Ok! Vamos l ento...

10.2 UTILIZANDO MATRIZES

A representao de uma matriz se d da seguinte maneira: 1. pelo seu nome, 2. pelo seu tamanho (dimenso) 3. e pelo seu tipo A sintaxe atribuda ser a seguinte: Dim Nome[(Dimenso)] As <Tipo> As palavras reservadas Dim e As j so bem conhecidas pra voc no mesmo.? Na sintaxe acima a palavra Nome ser relativa ao nome que representar a matriz. Dimenso se diz respeito ao tamanho da matriz, ou seja, o tamanho do numero de elementos que faro parte da matriz. O Tipo o tipo de dados que ser armazenado nos elementos definidos na matriz. O exemplo do exerccio anterior poderia ser representado por uma matriz da seguinte forma: Nota(1) = 7 Nota(2) = 8 Nota(3) = 10 Nota(4) = 6 Repare que o nome da varivel um s, porem, o que muda, o ndice informado dentro dos parnteses. Vamos programar ento? Utilizando o mesmo exerccio que acabamos de fazer, vamos ver como ficaria a codificao para obteno da mdia anual em relao s notas bimestrais.

Altere a sua programao existente no boto Calcular conforme mostrado a seguir:

Repare a diferena nas declaraes das variveis. Definimos a varivel Notas, que ser a nossa matriz, e atribumos a ela o ndice 4. Este ndice relativo a quantidade de notas dos bimestres (4 bimestres). A prxima varivel definida a SomaNotas que dentro de um Lao de Repetio (For) ser responsvel por armazenar as notas bimestrais. A outra varivel j existia no exemplo anterior (Media) a qual utilizamos para armazenar a mdia das notas bimestrais. Por ultimo temos a varivel ContaNotas que foi utilizada para como contador em nosso Lao de Repetio. Depois das declaraes das variveis tem os testes das caixas de textos, como no outro exemplo anterior. No prximo passo a nossa matriz (Notas) entra em ao. Observe que os valores das caixas de texto so atribudos varivel Notas atravs dos ndices: 1, 2, 3, 4., ou seja varivel com o mesmo nome porem com ndices diferenciados. Depois das atribuies de valores foi implementado o Lao de Repetio For, o qual repete uma rotina 4 vezes (quantidade de notas bimestrais) para que a varivel SomaNotas possa armazenar o total de notas dos bimestres. Sendo executado o Lao For, armazenado o calculo das notas bimestrais na varivel Media que em seguida exibida no objeto Label (LblMedia). Execute o seu aplicativo e faa os testes. Voc vai perceber que o resultado o mesmo, porem, com a economia de algumas variveis. Muito bom isto no mesmo? No esquea de salvar o seu aplicativo.

10.3 FUNES EM MATRIZES Alem da utilizao das matrizes nos exemplos que acabamos de executar tambm temos as funes voltadas manipulao de matrizes. A aplicao destas funes de matrizes retornam valores contidos nas mesmas. A seguir veremos estas funes e os exemplos de aplicao das mesmas. ARRAY: Esta funo retorna um Elemento de uma lista de argumentos definida. O s tipos de dados destes argumentos tero que ser do tipo Variant. MsgBox Array (Argumentos) Os Argumentos consistem em uma lista delimitada por vrgula de um nmero arbitrrio de valores que so atribudos aos elementos da matriz contidos em um tipo de dados Variant. Se nenhum argumento for especificado, ser criada uma matriz de comprimento zero. O modo como so acessados os argumentos da funo Array o mesmo modo de como so acessados os valores de uma matriz. A notao usada para se referir a um elemento de uma matriz consiste no nome da varivel seguido por parnteses que contm um nmero do ndice que indica o elemento desejado. O limite inferior de uma matriz criada com a funo Array determinado pelo limite inferior especificado com a instruo Option Base. Dim Dias as Variant Dim DiaSemana as String Dias = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") DiaSemana = Dias(5) Msgbox DiaSemana O valor retornado ser: Sex Option Base 1 Declarao definida em General - Declarations Msgbox DiaSemana O valor retornado ser: Qui LBOUND: Retorna o menor ndice dos argumentos de uma matriz. MsgBox LBound(ValorMatriz)
Dim DiaSemana As Variant DiaSemana = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") MsgBox LBound(DiaSemana)

O valor retornado ser 0 (Zero). Este o valor de Dom na lista de argumentos da funo Array.

UBOUND: Retorna o maior ndice dos argumentos de uma matriz. MsgBox UBound(ValorMatriz)
Dim DiaSemana As Variant DiaSemana = Array("Dom", "Seg", "Ter", "Qua", "Qui", "Sex", "Sb") MsgBox UBound(DiaSemana)

O valor retornado ser 6 (Seis). Este o valor de Sb na lista de argumentos da funo Array. Depois de todo o aprendizado que tivemos e os exemplos desenvolvidos sobre os contedos vistos, creio que voc esteja apto para aplicar tudo isto em cima do desenvolvimento de um projeto. OK? No prximo capitulo iniciaremos os estudos voltados diretamente aos objetos do Visual Basic, inclusive o desenvolvimento de um aplicativo voltado a Banco de Dados. At l ento...

Captulo 11

11.1 BARRA DE MENUS

Podemos observar que em qualquer aplicativo, voltado ao Sistema Operacional Windows, sempre na janela principal do programa, est disponvel uma Barra de Menus do tipo DropDown. A Barra de Menus, juntamente com os seus itens de Menu, nos fornece todas as opes que podemos executar dentro de um aplicativo, ou seja, todas as opes do aplicativo se encontram nos menus e nos seus sub-menus. Todas as Barras de Menus em seus aplicativos, para operar no Windows, seguem um padro de desenvolvimento.

A figura a lado nos mostra a estrutura da Barra de Menus do aplicativo Word.

Barra de Menu do Microsoft Word exibindo os itens de Menu do menu Exibir.

As opes de Menus e sub-menus podem ser acessados com o mouse ou tambm atravs das teclas de atalho. Por exemplo: Na barra de menu do Word, para acessar o menu Arquivo atravs de teclas de atalho, usaramos a combinao das teclas Alt + A e os itens do menu arquivo seriam exibidos. Porque Alt + A? Repare que no menu arquivo a letra A est sublinhada informando que a letra A a tecla de atalho. Nos itens de menu a coisa funciona um pouquinho diferente. Observe que dentro do menu arquivo do Word existe o item de menu Abrir. O acesso a esta opo no se d atravs da combinao de teclas de atalho Alt + A e sim, somente, atravs do pressionamento da letra A.

Outro detalhe nas opes de menu so as Teclas de Atalho Rpido tambm conhecidas como ShortCut. Somente os itens de menu podem ter a opo de ShortCut. Nem todos os itens de menu possuem estas opes, pois teclas de atalho rpido so definidas somente para aquelas opes, geralmente, mais usadas pelo usurio. No menu Arquivo do Word temos tambm a opo Salvar nos seus itens de menu. Repare que ao lado do item Salvar temos a combinao das teclas Ctrl + B. Esta a tecla de atalho rpido para esta opo. Mesmo sem o menu Arquivo estar ativo, se voc pressionar Ctrl + B voc estar acessando a opo deste item. Creio que depois de todas estas informaes sobre a Barra de Menus voc chegou concluso da importncia de um menu bem estruturado dentro de um aplicativo, no mesmo?

11.2 O EDITOR DE MENUS o Visual Basic, em seu ambiente de desenvolvimento, traz um utilitrio bem legal para voc criar, sem maiores dificuldades, as estruturas de seus menus, isso sem a necessidade da aplicao de nenhum tipo de programao. Para acessar a ferramenta do Editor de Menu do Visual Basic faa o seguinte:

Selecione o menu Tools e em seguida clique no item Menu Editor..., ou simplesmente, utilize a tecla de atalho rpido Ctrl + E.

Observe o Editor de Menu do Visual Basic na figura a seguir:

O Editor de Menu do Visual Basic.

11.3 PROPRIEDADES DO EDITOR DE MENUS Para comearmos a configurar nossa primeira barra de menu no Visual Basic, precisamos primeiramente conhecer as principais propriedades do nosso Editor de Menus. Propriedade Caption : Nesta propriedade ser definido o titulo do item que ir aparecer no menu. Ser utilizado o caractere com o smbolo &(E-Comercial) frente da letra que definiremos como tecla de atalho (Alt + Letra) e assim, desta maneira, o Visual Basic ir destacar a letra com um underline. Name : Esta propriedade ser usada para definirmos o identificador para o item. Nomeamos cada item de menu para podemos manipul-los atravs de codificaa. Para menus a nomenclatura inicial ser a abreviao Mnu.

Index : Permite criar uma matriz para identificar os itens do menu. Para que a matriz seja estabelecida, a propriedade Name dever ser igual para os menus que iro compor a matriz. ShortCut : Lembra-se do ShortCut? Ser determinada uma combinao de tecla para que o menu seja acessado de forma mais rpida. WindowList : Se voc selecionar esta propriedade, numa aplicao com vrias janelas MDI nos prximos captulos veremos o que uma Janela Mdi - , o Visual Basic cria uma lista das janelas abertas no aplicativo, selecionando com um sinal de check ( )a janela ativa.

Checked : Esta propriedade ser utilizada quando queremos mostrar para o usurio o estado marcado ( ) ou Desmarcado (sem a marca Check) de algum item do menu. Enabled: Esta propriedade habilita ( ) ou desabilita (sem a marca Check) um item do menu. Se a propriedade estiver desmarcada para algum menu o Visual Basic exibir o texto do da propriedade Caption com um tom acinzentado.

Visible : esta propriedade nos S a possibilidade de deixar Visvel ou Invisvel um Menu. Mesmo com um Menu definido, porem com a propriedade Visible no habilitada, este Menu estar agindo no programa. Os botes de setas sero utilizados para o seguinte: O boto com a seta indicadora para Baixo e o boto com a

seta indicadora para Cima sero utilizados para movermos um item de lugar depois do mesmo ser criado. O boto com a seta indicadora para Direita converte o item selecionado em sub-menu do item imediatamente acima dele. O boto com seta indicadora para esquerda selecionado um nvel. volta o item

O boto Next o boto padro no Editor de Menu, ou seja, ele acionado sempre que pressionarmos a tecla ENTER.

Ele passa para o prximo item de menu a ser digitado ou na seqncia. O boto Insert ser utilizado para adicionar um item de menu entre os menus j criados. O boto Delete exclui o item de menu selecionado. 11.4 CRIANDO MENUS Depois de conhecer as propriedades de formatao que o Editor de Menus nos fornece, est na hora de ver como esta ferramenta funciona. Vamos criar uma barra de menu com seus itens, definir teclas de atalho e atalhos rpidos (ShortCut). Vamos pegar o seguinte exemplo: Temos um aplicativo a ser desenvolvido e dever conter a seguinte Barra de Menu:

Inicie um novo aplicativo e defina as propriedades Name e Caption do formulrio. Para criar a Barra de Menus, inicie o Editor de Menus (Ctrl + E), e execute as formataes conforme exibido na figura a seguir:

Observe o & (E-Comercial) frente do menu Arquivo (&Arquivo) na propriedade Caption. Este caractere o responsvel pela tecla de atalho, que deixar o A sublinhado. Defina um nome atravs da propriedade Name, iniciando com a nomenclatura Mnu. Para criar os prximos componentes da Barra de Menus, s clicar no boto Next. Depois de criado a Barra de Menus, execute o seu aplicativo e veja o resultado. timo no mesmo? Muito Bem! Salve o seu aplicativo e vamos partir para o prximo passo. Criado os componentes da Barra de Menus resta criar os Itens de Menu. Cada Menu dever conter os seguintes itens: Menu Arquivo:

Menu Movimentao:

Menu Financeiro:

Menu Relatrios:

Menu Sobre:

Para criar os itens do Menu Arquivo faa o seguinte: Selecione o Menu Movimentao e clique no boto Insert Em seguida clique no boto com a setinha para a direita . .

Observe que criado um conjunto de 4 pontos no espao definido para a criao do item de menu. Estes pontos indicam que o valor inserido neste local ser um item de menu do primeiro Menu (sem pontos) acima dele. Utilizando as propriedades Caption e Name, insira is itens: Clientes, fornecedores, Linha Separadora e Sair, seguindo a mesma regra do boto Insert e o boto setinha para a direita. Para criar a Linha Separadora bem simples . Basta voc inserir na propriedade Caption o caractere (hfen). No esquea de definir tambm a propriedade Name para a Linha Separadora.

. Observe na figura ao lado como dever ficar a configurao dos Itens de Menu do Menu Arquivo.

Ah! Um detalhe muito importante... No esquea de definir as teclas de atalho rpido atravs da configurao da propriedade ShortCur. Execute o seu aplicativo e veja como est ficando. Se tiver alguma dvida, no peca tempo e PERGUNTE!

Seguindo os mesmos passos para a criao dos itens do menu Arquivo, defina agora os Itens de Menus das outras opes de Menu, e no esquea de ir salvando o seu aplicativo, OK?

Observe como deve ficar a estrutura da sua Barra de Menu com seus Itens de Menu no Editor de Menus.

11.5 PROGRAMANDO ITENS DE MENU Com a ferramenta de Editor de Menu fica muito simples criar nossos menus no Visual Basic, voc no acha? O nico evento associado aos menus o evento Click que exatamente igual ao evento Click usado para o objeto CommandButton. Para programar o evento click do menu super simples. Basta, em tempo de projeto, darmos um click no item de menu desejado, que o Visual Basic abrir a janela de codificao para que possamos inserir a codificao desejada. Vamos fazer um teste ento? Faa o seguinte: Utilizando o nosso aplicativo do exemplo de Menus, em tempo de projeto, selecione o menu arquivo e depois que abrir as opes dos itens de menu, clique no item Clientes. Com a janela de codificao acessada, insira a programao a seguir:

Execute o aplicativo e clique no Item de Menu Clientes. Para o Item de Menu Sair, insira a programao a seguir:

Faa o teste novamente. Tudo funcionando? Muito bem. Salve o seu aplicativo.

11.6 MENUS POPUP O Sistema Operacional Windows, a partir da verso Windows 95, usa com muita freqncia este tipo de menu. Esses tipos de menus so aqueles que so habilitados quando pressionamos o boto direito do mouse sobre algum objeto. Para fazer uso desta opo usaremos o comando PopupMenu associado ao evento MouseUp de qualquer objeto. Observe como o comando PopupMenu dever ser usado. PopupMenu : Neste comando especificamos o nome dado ao componente da Barra de Menu que contm os Itens de Menu que iro aparecer ao executar este comando. Utilizando o nosso aplicativo do exemplo de menu, observe a seguir a programao utilizando a opo do menu Arquivo cujo nome MnuArq. Esta programao dever ser inserida no Evento MouseUp do Objeto Formulrio. O evento MouseUp acionado no no pressionamento do boto do mouse e sim quando o boto solto depois do pressionamento.

Execute novamente o aplicativo e de um clique com o mouse (Qualquer Boto) na rea do formulrio. Observe que, indiferente do boto do mouse que voc pressionar, Iro aparecer os Itens de Menu do Menu Arquivo. Podemos especificar se algum boto do mouse ter prioridade em disparar o Menu Popup programado. Para isso teremos que utilizar valores de

constantes da palavra reservada Button que aparece nos parmetros do Evento MouseUp. Button : Ir retornar um nmero inteiro que informa qual dos botes do mouse foram pressionados. Observe: Valor 1: Pressionamento do Boto Esquerdo do mouse. (Constante = vbLeftButton) Valor 2: Pressionamento do Boto Direito do mouse. (Constante = vbRightButton) Valor 4: Pressionamento do Boto Central do mouse. (Constante = vbMiddleButton) No exemplo que fizemos anteriormente no evento MouseUp do formulrio, iremos agora codificar para que o Menu Popup ser exibido somente se for usado o boto Esquerdo do mouse. Para reconhecer o pressionamento do boto voc poder usar as constantes ou o valor das constantes do comando Button. Altera a sua codificao pela programao a seguir:

Observe que estamos testando, atravs de uma condicional (If), o valor do boto pressionado. Neste nosso exemplo os Itens do Menu Arquivo s sero exibidos caso seja pressionado o Boto Direito do Mouse (VbRightButton). Teste o seu programa e no esquea de salv-lo tambm. Parabns! Misso cumprida mais uma vez. At a prxima...

12 Captulo12.1 BARRA DE FERRAMENTAS CONTROLE TOOLBAR Assim como a Barra de Menu, visto no capitulo anterior, a Barra de Ferramentas tambm tem sua importncia dentro de um aplicativo. J sabemos que todas as opes de um aplicativo, voltado ao Sistema Operacional Windows, se encontram dentro de sua Barra de Menu. J a Barra de Ferramentas trs as opes mais utilizadas pelo usurio na execuo de um determinado programa. Observe a Barra de Ferramentas padro do Aplicativo Word: Podemos notar que nesta Barra de Ferramentas encontram-se algumas das principais opes que o Word pode nos fornecer, como por exemplo: 1. Novo Documento, 2. Abrir, 3. Salvar, 4. Imprimir, 5. Visualizar Impresso, 6. Copiar, 7. Recortar, 8. Colar, entre outras. O principal objetivo de uma Barra de Ferramentas tornar o acesso a certas opes de um aplicativo mais rpido, ou seja, com um clique apenas poderemos acessar opes que se encontram, por exemplo, nos Itens de Menu de algum componente da Barra de Menu. Alem do mais, um aplicativo utilizando Barra de Ferramentas deixar o LayOut bem mais profissional. O Visual Basic nos d a opo de criar Barra de Ferramentas atravs do controle (objeto) Toolbar. Para trabalhar com o controle Toolbar dentro de um aplicativo voc ter que, primeiramente, adicionar ao projeto um novo componente, pois o objeto Toolbar, assim como outros objetos, no carregado junto com os objetos padres que o Visual Basic fornece assim que voc inicia um projeto.

Objetos padres do Visual Basic.

12.2 ADICIONANDO NOVOS COMPONENTES AO PROJETO Para adicionar um novo componente no Visual Basic, voc ter que acessar a janela de controle de componentes. Para isso, faa o seguinte:

1. Selecione o Menu Project 2. Em seguida clique no Item Components... Se voc preferir, tambm poder usar a tecla de atalho rpido Ctrl + T.

A seguir ser exibida a janela de Componentes do Visual Basic. O componente para a utilizao do componente Toolbar que dever ser inserido no projeto o seguinte: Microsoft Windows Common Controls 6.0 (SP)
Localize o componente e selecione a caixa de checagem. Em seguida clique no boto OK.

Aps ter inserido este novo componente, outros objetos estaro figurando na janela de ferramentas (General). Observe ao lado:

Os novos objetos inseridos com o novo componente.

A partir do momento que voc salva o seu projeto com novos componentes inseridos, da prxima vez que voc abrir este projeto, os novos objetos sero carregados automaticamente, ou seja, no h necessidade de inserir novamente o componente relativo aos objetos. Destes novos objetos que acabamos de inserir, 2 (dois) sero utilizados para criar a barra de ferramentas. Um deles, j sabemos, o controle Toolbar. O outro o objeto responsvel pelo armazenamento das imagens que iro compor os botes da barra de ferramentas. Este objeto o ImageList. 12.3 CRIANDO UMA BARRA DE FERRAMENTAS Muito Bem! Inicie ento um novo projeto para executarmos o exemplo de uma Barra de Ferramentas, bem como a programao dos seus botes. Formate as propriedades: Name e Caption do formulrio. Insira ao projeto o componente: Microsoft Windows Common Controls 6.0 (SP) Selecione o objeto ImageList na janela de objetos do Visual Basic (General) e adicione o mesmo ao formulrio. Este objeto, como j visto anteriormente, armazenar as figuras dos botes da Barra de Ferramentas. Este objeto s visvel em tempo de projeto. Quando voc executar o aplicativo ele no aparecer, porem, ele estar atuando no projeto vinculado ao objeto Toolbar. Objeto ImageList inserido no formulrio. Este objeto estar visvel em tempo de projeto.

A nomenclatura inicial para o objeto ImageList Img. Vamos formatar a propriedade Name deste objeto como ImgTeste. Para armazenar as figuras neste objeto faa o seguinte: Clique com o boto direito do mouse sobre o objeto ImageList e selecione o item Properties. A janela de dialogo a seguir ser exibida:

Na guia General voc deve definir o tamanho da figura que voc vai inserir no boto da Barra de Ferramentas. Se voc deixar selecionado a opo Custom a figura ira assumir o tamanho original. Cuidado com esta propriedade, pois depois de vincular o Objeto ImageList com o Objeto Toolbar, voc s poder fazer alteraes com as figuras se desfizer o vinculo dos objetos, ou seja, de repente voc ter que trabalhar dobrado. Selecione agora a guia Image e vamos inserir as figuras.

Clique no bot o Insert Picture e informe a seqncia das figuras que voc deseja nos botes da Barra de Ferramentas. Voc poder utilizar arquivos grficos com a extenso: .Ico, .Jpg, .Bmp, entre outros. O Visual Basic fornece alguns cones juntamente com suas instalao na seguinte pasta:
C:\Arquivos de programas\Microsoft Visual Studio\Common\Graphics\Icons

Selecione a pasta dos cones desejada e selecione 3 figuras para inserir no objeto ImageList. Voc pode pressionar a recla Ctrl para selecionar todas as figuras desejadas de uma s vez. Observe a figura anterior e veja como as figuras ficam armazenadas no objeto ImageList. A propriedade Index informa qual o ndice da figura dentro do objeto ImageList e a propriedade ImageCount informa a quantidade de figuras existentes. Com as figuras selecionadas, clique no boto OK. O prximo passo inserir no formulrio o objeto ToolBar Adicione ento o objeto no formulrio. O objeto Toolbar passa praticamente despercebido no formulrio antes de inserir os botes, porem, o mesmo se encontra no topo do formulrio. Observe ao lado: Defina a proprieade Name do objeto Toolbar como TbaTeste. A nomenclatura inicial deste objeto Tba. Depois de definir o nome, clique com o boto direito do mouse sobre o objeto Toolbar e clique no item Properties para iniciarmos a formatao da nossa Barra de Ferramentas. A janela a seguir ser exibida: .

A primeira propriedade que teremos que formatar do objeto Toolbar a que se localiza propriedade ImageList na guia General da janela das propriedades da Toolbar. Esta propriedade responsvel pela vinculao do objeto Imagelist com o Objeto Toolbar, ou seja, para poder associar as figuras selecionadas na ImageList com os botes que iremos definir na Toolbar. Clique ento na caixa de combinao da propriedade ImageList e selecione o objeto desejado (ImgTeste) . Formate tambm a propridade Style selecionando a opo 1 tbrFlat. Esta opo dar um efeito melhor aos botes da Barra de Ferramentas. Os botes tero a aparncia da Barra de Ferramentas do Word, ou seja, somente quando o cursor do mouse for posicionado sobre o boto que ele assume o contorno. Observe a opo Salvar da figura ao lado: A seguir selecione a guia Buttons da janela de propriedades. Aqui onde iremos definir os botes e todas as configuraes relativas aos mesmos. Clique no boto Insert Button nossa Barra de Ferramentas. para adicionar o primeiro boto da

As propriedades que estavam desabilitadas agora esto habilitadas esperando a formatao.

Aqui sero formatadas as seguintes propriedades: Caption, Key, Style, ToolTip Text e Image. Caption: Assim como em outros objetos a propriedade Caption aqui no objeto Toolbar relativo ao ttulo do boto. Geralmente no se define Ttulos aos botes da Barra de Ferramentas, pore, fica a critrio de cada programador definir ou no esta propriedade nos botes da Barra de Ferramentas. Key: Esta propriedade ser utilizada para definir um Nome (Chave), ao boto. Para programar o boto na Barra de Ferramenta, cada boto definido aqui ter que ter um valor (Key) diferente um do outro pois a programao se dar exclusivamente sobre um objeto que a Toobar e no sobre os botes definidos. Qualquer nome poder ser utilizado para definir esta propriedade, porem no esquea de um detalhe muito importante: da maneira como voc definir o valor da propriedade Key ele dever ser utilizado exatamente igual no momento da programao (Letras maisculas, minsculas, espao entre palavras). Por exemplo: se voc informar o valor Boto 1 assim que voc ter que informar, ou seja, o B maisculo e um espao para o nmero 1. Style: Aqui ser definido qual o estilo do boto que ser usado. O valor padro utilizado 0 tbrDefault para botes normais de uma Barra de Ferramentas, mas, voc poder utilizar por exemplo o valor 3 tbrSeparator para definir um separador entre um boto padro e outro. ToolTip Text: Esta propriedade super importante para qualquer objeto. Quando voc precisar informar ao usurio, atravs de uma pequena mensagem, qual a ao do usurio utilize esta propriedade. Esta mensagem ser exibida sempre que o usurio posicionar o cursor do mouse sobre o objeto com esta propriedade definida. Observe o exemplo da Barra de Ferramentas do Internet Explorer:

Quando o cursor do mouse foi posicionada sobre a figura , foi exibido a mensagem Atualizar, informando a ao do boto quando for pressionado. Imagem: Aqui ser definida a imagem que voc vai associar ao boto. A seqncia das figuras a mesma que foi definido no objeto ImageList. Observe para um detalhe muito importante. Esta propriedade s estar habilitada se voc efetuar o vinculo com o

objeto ImageList que se define na guia General e propriedade ImageList.

Para o nosso exemplo defina os valores das propriedades da seguinte maneira: Caption: Neste exemplo deixaremos esta propriedade sem valor, ou seja, o boto no ter ttulo, somente figura. Key: Boto1 - (sem espao) Style: 0 tbrDefault ToolTip Text: Teste Boto 1 Image: 1 Clique no boto OK. Execute o aplicativo e faa o teste posicionando o cursor do mouse sobre o boto. No esquea de salvar o seu projeto.

Teste Barra de Ferramentas

Muito Bem! Vamos voltar configurao dos botes da ToolBar. Em tempo de projeto clique novamente com o boto direito do mouse sobre o objeto Toolbar e selecione a guia Buttons na janela de propiredades. . Adicione mais um boto Este prximo boto ser um boto separador, ento a nica propriedade a ser definida aqui a propriedade Style Defina esta propriedade com o valor 3 tbrSeparator. Clque no boto Aplicar e observe o resultado.

Adicione mais um boto e defina as propriedades conforme a seguir: Caption: Neste exemplo deixaremos esta propriedade sem valor, ou seja, o boto no ter ttulo, somente figura.

Key: Boto2 - (sem espao) Style: 0 tbrDefault ToolTip Text: Teste Boto 2 Image: 2 Adicione novamente outro boto e defina-o como boto separador. Por ultimo, adicione um outro boto e defina as propriedades conforme a seguir: Caption: Neste exemplo deixaremos esta propriedade sem valor, ou seja, o boto no ter ttulo, somente figura. Key: Boto3 - (sem espao) Style: 0 tbrDefault ToolTip Text: Teste Boto 3 Image: 3 Clique no boto OK para finalizar a configurao dos botes. Execute o aplicativo e observe o resultado, e no esquea de salvar novamente o seu projeto.

A barra de ferramentas com os 3 botes padres e 2 botes separadores

12.4 PROGRAMANDO A BARRA DE FERRAMENTAS (TOOLBAR) Como comentado anteriormente o objeto Toolbar e seus botes so um nico objeto. Para programar boto por boto teremos que indicar ao programa qual dos botes est sendo pressionado. Para isso utilizaremos algo j conhecido para ns. A instruo de desvio Select Case.

Em tempo de projeto de um duplo clique sobre o objeto toolbar para acessar a janela de codificao. O evento a ser programado ser o evento ButtonClick, ou seja, ao clique de qualquer boto pressionado (click) ser executado a codificao inserida. Os botes separadores sero usados somente para reparao de grupo de opes de botes, portanto, no haver programao referente a eles. Para a programao dos botes padres precisamos nos lembrar do valor exato da propriedade Key. Para os testes de programao dos botes , utilizaremos a seguinte situao: O primeiro boto (quando clicado) ir exibir a seguinte mensagem: Teste do boto nmero 1 (atravs da funo Msgbox).

(quando clicado) ir exibir a seguinte O segundo boto mensagem: Teste do boto nmero 2 (atravs da funo Msgbox).

O terceiro boto do comando End.

(quando clicado) ir finalizar o aplicativo atravs

Vamos ento a programao. Insira a codificao a seguir no evento ButtonClick do objeto Toolbar.

Bem! A programao aqui bem simples. Utilizamos o Select Case para fazer uma verificao de Casos em relao propriedade Key definida para cada boto da Barra de Ferramentas. O valor testado no Select Case (Button.Key) para o programa saber que o teste que ele ter que fazer em relao a classe dos botes da Barra de Ferramentas (Button) e a propriedade Key destes botes.

Os valores testados nos Case (entre aspas) so os valores da propriedade Key que foram definidos na formatao do objeto Toolbar. Execute o seu aplicativo e faa os testes dos botes. Salve o seu aplicativo. Mais uma vez... Misso cumprida... Parabns e at a prxima...

Captulo 13

13.1 MDI FORM / JANELAS MDI

Podemos definir que um Formulrio MDI (MDI Form) uma janela que pode ser considerada como a Janela Principal do Aplicativo. a janela onde iremos definir a Barra de Menu e os Itens de Menu do Sistema, bem como a Barra de Ferramentas, se houver. A partir de um MDI Form que todas as outras janelas existentes no projeto so carregadas. claro que o seu projeto ir funcionar sem um Mdi Form, porem se voc estiver com a idia de trabalhar com janelas MDI em seu projeto, ai sim, com certeza, voc ter que ter um MDI Form como janela principal. MDI significa Multiple Document Interface (Interface de mltiplos Documentos). Esse termo utilizado para definir o ambiente de janelas em que uma janela MDI principal, tambm chamada de formulrio MDI-pai, contem outras diversas janelas, as quais normalmente so denominadas como janelas MDI-filhas. Voc poder usar este tipo de janelas em seus aplicativos no momento em que o usurio necessitar trabalhar com duas ou mais janelas abertas (carregadas), no mesmo aplicativo. Voc poder ter somente um formulrio MDI-pai no projeto, porem, poder ter varias janelas MDI-filha. Sempre que voc trabalhar com um formulrio MDI-pai (MDI Form) em seu projeto, este, naturalmente, ter de ser o formulrio principal do sistema. Para ter uma idia de Mdi Form (formulrio-pai) e janela Mdi-filha, podemos pegar como exemplo o aplicativo Microsoft Photo Editor. Quando iniciamos o Microsoft Photo Editor carregado a janela principal do aplicativo e quando abrimos um documento, sobreposto sobre a janela principal outra janela, a qual seria a janela MDI-filha. A janela principal do Microsoft Photo Editor neste exemplo seria o MDI Form e as janelas dos documentos, as janelas MDI-filhas. Observe na figura a seguir:

O formulrio principal do aplicativo Microsoft Photo Editor com a janela de um documento carregada.

Observe na figura anterior que a janela do aplicativo possui os botes de controle de janela com o seguinte formato: . E os botes de controle de janela do documento aberto tem o seguinte formato: . Isto significa que temos uma janela sobreposta a outra.

13.2 ADICIONANDO MDI FORM AO PROJETO Em primeiro lugar vamos ver como podemos fazer para adicionar um formulrio MDI form formulrio pai - um projeto, e em seguida, trabalharemos com as janelas MDI-filhas. Inicie ento um novo projeto no Visual Basic.

Para construir um formulrio MDI-pai faa o seguinte: 1. Selecione o Menu Project, 2. Em seguida clique no Item Add MDI Form

Em seguida ser exibida a janela de opes de formulrios MDI. Nesta janela podemos definir se o MDI-form ser novo, ou se ser um MDI-form recuperado de outro projeto, pois temos esta opo tambm. Por exemplo: Se voc tiver um MDI-form em outro projeto e quiser us-lo dentro de um novo projeto poder. Basta selecionar a guia Existing da janela de opes do formulrio e localizar o formulrio que voc quer inserir para o projeto. Isto valido no s para janelas do tipo MDI-form mas para qualquer tipo de formulrio que queira usar em projetos. Observe a janela a seguir:

Atravs da guia Existing voc poder adicionar um MDI Form existente em outro projeto. Para adicionar um novo, selecione a guia New e clique no boto Abrir.

Depois de clicar no boto Abrir, o MDI Form estar dentro do projeto, restando apenas salvar o mesmo. Repare na janela Explorer do projeto que j existe dois formulrios. Este que acabamos de adicionar, MDIForm1 e o formulrio que foi carregado junto com o Visual Basic, Form1 Para navegar entre um formulrio e outro s dar um duplo clique no formulrio desejado. Formate o seu MDI Form conforme a seguir: Name: FrmMdiTeste Caption: Teste Formulrio MDI-pai e Janela MDI-filhas WindowsState: 2 Maximized (esta propriedade relativa ao estado inicial da janela quando a mesma for executada). 13.3 OPES DO PROJETO Se voc executar o seu aplicativo o formulrio que ser apresentado ser o form1. Sabe Porque?

Bem! Quando voc inicia um novo projeto, carregado automaticamente um novo formulrio para que voc possa comear a desenvolver o seu aplicativo (Form1), conseqentemente o Visual Basic vai entender que este formulrio dever ser o primeiro a ser compilado. Neste exemplo que estamos desenvolvendo iremos modificar a seqncia dos formulrios, ou seja, o primeiro formulrio a ser exibido (compilado) ser o MDI Form.

Para executar esta operao teremos que acessar as opes do projeto. 1. Selecione o Menu Project 2. Em seguida clique no Item Project1 Properties...

Na janela de propriedades do projeto podemos inclusive mudar o nome do projeto, pois o nome Project1 o Visual Basic que nos fornece como nome exemplo. Observe a figura:

A janela de propriedades do projeto.

A propriedade que define a ordem de compilao dos formulrios : Startup Object. Clique na caixa de combinao desta propriedade e selecione FrmMdiTeste. Fazendo isto, o MDI Form ser o primeiro formulrio a ser compilado quando voc executar o seu aplicativo. Aproveite tambm e mude o nome do seu projeto (na propriedade Project Name) para ProjetoMdi. A regra aqui para a definio do nome do projeto a mesma para a definio de nomes de objetos, ou seja, no pode ser usado caracteres especiais, nem mesmo espao em branco entre palavras. timo! Com as alteraes efetuadas, vamos em frente. Execute o seu aplicativo e observe que o MDI Form o primeiro a ser compilado com a janela maximizada. Defina agora (No formulrio MDI Form) uma Barra de Menu com os Itens de Menus, conforme exibido no exemplo a seguir:

Muito Bem! A idia da aplicao deste aplicativo que estamos desenvolvendo , criar 3 janelas MDI-filhas para serem carregadas a partir das opes Janela 1, Janela 2, Janela 3 do menu Arquivo. Daqui a pouco comentaremos sobre o menu Janelas e o menu Sobre. Formate ento o outro formulrio (Form1) conforme a seguir: Name: Frm1 Backcolor: Preto Caption: Teste Janela Mdi Filha 1 MdiChild: True (Esta propriedade que define que esta janela ser uma janela MDI-filha, portanto na elaborao dos seus projetos no esquea desta propriedade). WindowsState: 2 Maximized S um detalhe: Repare que os botes Maximizar (MaxButton) e Minimizar (Minbutton) desta janela no foram alterados. Quando voc define que uma janela MDI-filha (MdiChild=True), obrigatoriamente as mesmas devem conter os botes maximizar e minimizar, pois seno as mesmas no sero carregadas pelo MDI Form. Salve o seu projeto. Repare que sero salvos 2 arquivos Frm. Um o MDI Form e o outro a janela MDI-filha. E voc ter que salvar tambm o arquivo Vbp. Todos os arquivos tero que ser salvos NA MESMA PASTA DO PROJETO. O mtodo que iremos usar para apresentar a janela MDI-filha (Frm1) ser o mtodo SHOW. Para isso basta seguir a seguinte sintaxe: Objeto.Show (Aqui o objeto o nome do formulrio que dever ser apresentado). Vamos programar ento?

No formulrio MDI Form acesse o evento click do Item de Menu Janela 1 do Menu Arquivo e insira a linha de codificao a seguir:

Execute agora o seu aplicativo e clique no item de Menu Janela 1 e observe o resultado.

Quando carregamos janelas MDI-filhas, as mesmas devem ser apresentadas com o mtodo show (veja programao) e so exibidas dentro dos limites do formulrio MDI-pai. Outro detalhe que a janela MDI-filha, quando minimizada, seu cone aparece dentro do MDI Form, e no na rea de trabalho do Windows. Quando a janela MDI-filha maximizada (conforme exibido na figura acima), sua legenda (Caption) mostrada logo aps a legenda (Caption) do MDI Form-pai. Salve seu projeto e vamos continuar com nosso exemplo. Vamos adicionar ao projeto mais 2 formulrios que sero tratados tambm como janela MDI-filhas.

13.4 ADICIONANDO FORMULRIO AO PROJETO

Para adicionar um formulrio ao projeto faa o seguinte: 1. Selecione o Menu Project 2. Clique no Item Add Form A janela a ser exibida na seqncia semelhante janela para adicionar o formulrio MDI, portanto basta clicar no boto Abrir. Formate este novo formulrio conforme a seguir: Name: Frm2 Backcolor: Vermelho Caption: Teste Janela Mdi Filha 2 MdiChild: True WindowsState: 2 Maximized Programa este formulrio para ser carregado atravs do Item de Menu Janela 2 do Menu Arquivo. Observe a seguir:

Insira mais um formulrio ao projeto e formate conforme a seguir: Name: Frm3 Backcolor: Verde Caption: Teste Janela Mdi Filha 3 MdiChild: True WindowsState: 2 Maximized Programa tambm este formulrio para ser carregado atravs do Item de Menu Janela 3 do Menu Arquivo. Observe a seguir:

13.5 PROPRIEDADE WINDOWSLIST Antes executar o seu aplicativo, faa a seguinte alterao no menu Janelas. Acesse o editor de Menu (Ctrl + E) e selecione a opo do Menu Janelas. Observe a propriedade WindowsList. Muito bem! Selecione a caixa desta propriedade conforme mostrado na figura ao lado:

Sempre que voc trabalhar com janelas MDI-filhas esta propriedade ter que estar habilitada, pois ela vai ser bem til para exibir as janelas MDI que esto aberta e informar qual est ativa. Para testar as janelas MDI-filhas e a propriedade WindowList, execute o seu aplicativo e carregue todas as janelas MDI-filhas a partir do menu Arquivo. Em seguida selecione o Menu Janelas. Observe a linha separadora e os ttulos das janelas abertas abaixo dos itens do menu janelas. Esta opo foi configurada a partir da propriedade WindowList. Para voc alternar entre uma janela e outra, basta clicar na opo desejada. Observe a figura a seguir:

13.6 MENU JANELAS MTODO ARRANGE Depois que as janelas MDI-filhas so carregadas elas podem ser dispostas de maneira que voc consiga visualizar todas elas ao mesmo tempo. Para isto sero utilizadas as opes do menu Janelas (Cascata, Horizontal e Vertical). Para esta programao ser utilizado o mtodo Arrange, o qual, quando utilizado, espera o valor de uma constante referente s opes de disposio das janelas. Observe a sintaxe: Arrange <constante> O valor da constante poder ser repassado como valor inteiro ou o nome da constante que o Visual Basic utiliza. Observe os valores: Cascata: Valor 0 (zero) ou vbCascade Horizontal: Valor 1 ou vbHorizontal Vertical: Valor 2 ou vbVertical Observe as programaes a seguir e atualize o seu aplicativo codificando o mesmo.

Execute o seu aplicativo, carregue as janelas MDI-filhas e teste a programao efetuada com o mtodo Arrange. Salve o seu projeto.

13.7 JANELA MODAL Alem das janelas MDI que acabamos de ver, podemos trabalhar tambm com janelas do tipo Modal. Uma janela do tipo modal aquela que quando carregada voc no ter mais acesso ao aplicativo se voc no fechar a mesma. Vamos tomar como exemplo a janela Sobre do Visual Basic.

Selecione o Menu Help e clique no Item About Microsoft visual Basic...

A janela Sobre do Visual Basic ser exibida, mostrando as especificaes do aplicativo.

Se voc tentar voltar ao aplicativo clicando na rea do Visual Basic, atrs da janela About Microsoft Visual Basic, voc no conseguir pois esta janela uma janela Modal. Algumas janelas so carregadas desta maneira porque as mesmas no precisam ficar Soltas dentro do aplicativo, ou seja, verifica-se o contedo e em seguida, fecha-se a mesma. Todo formulrio (ou qualquer arquivo grfico quando carregado), utiliza recursos da mquina (memria) para ser executado, portanto, janelas de informaes no h necessidade de ficarem abertas

ocupando recursos da mquina. A partir do momento que voc fecha uma janela, os recursos utilizados para exibir a mesma so descarregados.

13.8 CRIANDO UMA JANELA SOBRE

Na barra de Menu do nosso exemplo de janelas MDI (MDI-Form) tem uma opo para carregar uma janela Sobre, que fale sobre as especificaes do sistema. Utilizando ento este aplicativo, vamos configurar uma janela que fale sobre as informaes do projeto e carreg-la como uma janela modal a partir do item Informaes do Aplicativo do menu Sobre. Adicione ento ao projeto um novo formulrio e formate o mesmo conforme a seguir: Formulrio: Name: FrmSobre Caption: Informaes do Aplicativo Desabilitar botes Max e Min (MaxButton e Minbutton = False) Centralizar o Formuirio (StarUpPosition = 2 CenterScreen)

Adicione ao formulrio uma Imagem utilizando o Objeto Image: Name: ImgTeste Picture: (Localize a imagem que voc queria adicionar ao objeto) Stretch: Utilize esta propriedade como True para voc definir o tamanho da imagem conforme o tamanho do objeto Image. CommandButton: Name: CmdOk Caption: &Ok Label: Utilize objetos Label para os textos no formulrio. Voc poder tambm definir as propriedades: Font (para definir outro tipo, estilo e tamanho de fonte) ForeColor (para definir uma outra cor de fonte) WordWrap (para forar uma quebra de linha em objeto Label) Utilize quanto objetos Label (ou outros objetos) quiser para as definies das informaes do seu formulrio. Sua janela Sobre dever ficar mais ou menos com a seguinte apresentao:

Uma simples janela Sobre informaes do aplicativo

O boto OK dever ser codificado de maneira que, quando clicado seja fechado somente esta janela, e no o aplicativo inteiro. Aqui dever ser usado o comando que descarregue a janela atual, voltando a janela anterior. Este comando chama-se Unload Me. Unload: Significa descarregar e a opo Me se refere ao objeto atual, que neste caso aqui o formulrio Sobre. Ento sempre que voc quiser fechar uma janela sem finalizar o aplicativo utilize Unload Me. Codifique ento o evento Click do Boto OK, conforme mostrado a seguir:

Como j comentamos anteriormente, esta janela ser carregada como uma janela Modal. A programao para carregar este tipo de janela tambm utiliza o mtodo Show, porem, dever ser utilizada tambm a constante VbModal. Acesse o evento Click do Item de Menu Informaes do Aplicativo (Menu Sobre) e insira a codificao a seguir:

Execute o seu aplicativo e faa os testes. Observe que a janela sendo carregada como Modal, outras janelas no podero ser carregadas ao mesmo tempo. Se voc definir que uma janela MDI-filha (Mdichild = True), na programao para carregar esta janela no poder ser usada a constante VbModal. Salve o seu aplicativo. Com todas estas informaes sobre janelas voc j est apto a trabalhar com qualquer tipo de janelas em seus futuros projetos, basta voc definir que LayOut ter as janelas dos aplicativos e por em prticos. Ficamos por aqui... At a prxima...

Captulo 14

14.1 PROCEDIMENTOS PRPRIOS

Todo objeto (em seu evento) tem um procedimento (Private Sub) prprio. Quando criamos um procedimento prprio, sem estar relacionado diretamente a um objeto, estamos definindo sub-rotinas do tipo Sub as quais sero usadas para dividir as codificaes de um aplicativo em blocos menores e armazenar partes de programao de cdigos que podem ser chamados diversas vezes durante a definio de um aplicativo. Isto quer dizer que podemos ter um bloco de varias linhas de programao, e se precisar usar este bloco em diversos eventos do mesmo objeto ou de objetos distintos, no precisaremos codificar novamente o bloco de linhas, simplesmente utilizamos o mesmo procedimento para ser executados em diversas partes do programa (Objetos/Eventos). Os procedimentos definidos podero ser do tipo: Sub, Function, Property e Event, porem, nestes nossos estudos ser dada ateno especial aos tipos Sub e Function.

14.2 CRIANDO PROCEDIMENTOS

Para criar um procedimento execute os seguintes passos:

1. Acesse a janela de codificao do Visual Basic (em qualquer local, pois a opo s estar habilitada se voc estiver na rea de codificao do Visual Basic). 2. Selecione o Menu Tools e em seguida clique no item Add Procedure... Na janela de procedimentos ter que ser definido o Nome do procedimento (Name), o Tipo do Procedimento (Type), o Objetivo do procedimento, ou seja, se vai ser Publico ou Privado (Scope) e tambm podemos definir se as variveis declaradas no procedimento sero mantidas ou no nas chamadas do procedimento. Observe a janela a seguir e repare nas opes::

O Nome do procedimento (Name) dever ser definido seguindo as seguintes regras: No poder ser usado nomes ou palavras reservadas do Visual Basic. Tambm no poder ser utilizado nomes de variveis declaradas nem mesmo nomes de objetos declarados, portanto, atente para o nome que voc vai utilizar na criao dos seus procedimentos (Sub) e Funes (Function). Quando definimos um procedimento do tipo Public estamos permitindo que este procedimento seja utilizado por qualquer outro procedimento (de qualquer evento de objeto) dentro do projeto. A opo Private estabelece que o procedimento ser acessvel somente aos procedimentos (dos eventos dos objetos) do formulrio onde est sendo declarado. A opo all Local variables as Statics define se as variveis locais do procedimento sero preservadas quando o procedimento for chamado, porem, esta opo, no afeta as variveis que so declaradas fora do procedimento, mesmo que estas sejam utilizadas no procedimento. Os tipos de procedimento(Type) Sub e Function possuem uma estrutura muito semelhante e so usados com a mesma finalidade. A diferena entre os dois a seguinte: a Funo dever sempre retornar um valor que poder ser atribudo a uma varivel.

14.3 PARMETROS EM PROCEDIMENTOS A finalidade do uso de parmetros em um procedimento servir como um ponto de comunicao de duas direes. Estas direes so: o prprio procedimento e o programa em si, ou seja, algum outro objeto que possa utilizar o procedimento em seu prprio procedimento. Assim desta maneira, poderemos passar valores de um procedimento a outro procedimento e assim reciprocamente. Os tipos de passagens de parmetros utilizados so: 1. Por Valor (ByVal) e 2. Por Referncia (ByRef).

A passagem parmetro por valor se define como uma passagem na qual uma informao transmitida a um procedimento que executar o processamento com a esta informao. O processamento ser realizado dentro do procedimento que est executando a rotina, sendo que, o resultado obtido no processamento ficar vinculado ao procedimento de origem. J o parmetro por referncia se define por retornar ao procedimento que est chamando a rotina o valor a ela passado, assim o valor no fica vinculado. 14.4 TESTANDO PROCEDIMENTOS Acredito que complicou um pouco no mesmo? Muito Bem! Para por tudo isto em pratica vamos iniciar um novo aplicativo e definir formulrio e objetos conforme a seguir: Formulrio: Name: FrmSub Caption: Exemplo Procedimento Private Sub TextBox Name: Txt1 Text: Limpar o contedo da propriedade Label Name: Lbl1 BackColor: Azul Claro Caption: Limpar o contedo da propriedade CommandButton Name: CmdProcessar Caption: &Processar Defina a Barra de Menu com seu Item de Menu e o Lay Out do seu formulrio conforme exibido na figura a seguir:

O primeiro procedimento que vamos criar uma mensagem (MsgBox) que dever ser executada tanto no boto de comando Processar quanto no item de menu Executar Procedimento, porem somente com uma programao. Acesse ento a janela de procedimentos (Tools Add Procedure...) e defina conforme a seguir:

Ser um procedimento do tipo Private Sub com o nome MinhaMensagem. Clique no boto OK e observe na janela de codificao do Visual Basic que foi criado um procedimento prprio. Os procedimentos prprios so armazenados na seo General Declarations da janela de codificao do Visual Basic. Observe o procedimento MinhaMensagem na seo General.

A linha de programao a seguir dever ser inserida no procedimento que acabamos de criar, ou seja, no procedimento MinhaMensagem.

Muito Bem! Acabamos de codificar o nosso procedimento. Agora para executar o procedimento s cham-lo a partir de onde for necessrio. No nosso caso vamos chamar a partir do boto de comando e do item de menu, ou seja, no evento clique destes dois objetos s escrever o nome do procedimento que MinhaMensagem

Ento codifique o evento clique dos dois locais conforme exibido na figura a seguir:

Viu como fcil! Bom! este procedimento que criamos um procedimento simples, sem parmetros. A seguir vamos criar um exemplo utilizando passagem de parmetros, mas antes, execute o seu aplicativo e faa os testes, e no esquea de salvar o seu projeto.

14.5 PROCEDIMENTO TIPO SUB COM PARMETROS Utilizando o mesmo projeto anterior vamos fazer um teste agora passando parmetros ao nosso procedimento. O nosso exemplo executar o teste do fatorial de um nmero inteiro informado na caixa de texto. Utilizaremos o boto Processar para executar o procedimento que criaremos com o nome Calculo. Crie ento um procedimento (Private Sub) com o nome Calculo e insira a linha de codificao a seguir:

Observe o parmetro por valor (ByVal) que esta sendo passado ao procedimento. A varivel Valor2 ir receber o valor que for repassado a varivel Valor1, atravs da caixa de texto (Txt1) Isto veremos a seguir.

Para efetuar a operao vamos programar o Evento Click do boto Processar. S no esquea de deixar a codificao j existente no boto como linha de comentrio.

Muito Bem! A explicao da programao acima a seguinte: Foi declarada a varivel Valor1 o qual vai receber o valor da Cx. de Texto Txt1. Quando o procedimento Calculo for Chamado o valor da varivel Valor1 ser repassado para a varivel Valor2 que o parmetro por valor que utilizamos no procedimento prprio Calculo. Execute o aplicativo, informe um valor inteiro na caixa de texto e clique no boto processar. Salve o seu projeto. 14.6 PROCEDIMENTO TIPO FUNCTION COM PARMETROS Como j comentado anteriormente, os procedimentos do tipo Function possuem a estrutura bem parecida com os procedimentos do tipo Sub. A diferena que, uma funo (Function) deve retornar um valor quando executada uma operao. Quando um valor retornado de uma funo (Function), este valor estar sempre associado a um tipo de dado, seja ele: Inteiro, Texto, Lgico, Real... Usando o mesmo exemplo do aplicativo anterior (Valor Fatorial), vamos testar um procedimento prprio do tipo Function.

Crie um procedimento do tipo Function conforme mostrado na janela ao lado.

Neste exemplo vamos programar primeiramente o boto Processar. Atualize a programao existente no boto conforme mostrado a seguir:

Aqui o objeto Label est recebendo o valor que a funo FunoCalculo ir possuir no momento que do retorno da funo. O valor de retorno da Private Function FunoCalculo pode ser observado nas linhas de codificao exibidas na figura a seguir. Programe o seu procedimento:

Este tipo de procedimento (function) executa o retorno do seu valor na prpria funo. Por isso que depois do resultado executado pelo lao For / Next na varivel Fator, este valor atribudo ao nome da funo, atravs da codificao FunoCalculo = Fator. E observe tambm que o nome do procedimento: Private Function FunoCalculo(Valor2 as Long) as Long O valor declarado dentro dos parnteses (Valor2 as Long) do tipo Inteiro Longo e o procedimento (FunoCalculo) que receber um valor tambm do tipo Inteiro Longo. por isso que indicamos pela segunda vez o valor Inteiro Longo. Execute e teste seu programa e no esquea de salv-lo. Parabns novamente pelos exemplos aplicados e pelo aprendizado. Ficaremos por aqui, porem logo retornaremos com mais contedo. Valeu e at a prxima...

Captulo 15

15.1 TRABALHANDO COM BANCO DE DADOS

Depois de vermos vrios conceitos e exemplos de programao, chegou a hora de trabalhar com algo muito importante voltado a linguagem de programao que o suporte a Banco de Dados. Nos captulos seguintes veremos como devemos proceder no Visual Basic para criar aplicativos voltados a Banco de Dados. Primeiro vamos ver alguns conceitos bsicos sobre Banco de Dados. Podemos compreender por Banco de Dados qualquer sistema que agrupe e mantenha organizada uma srie de informaes relacionadas a um determinado assunto em uma determinada ordem. Podemos ter como exemplo disto a lista telefnica, nela percebemos que todos os dados referentes a uma pessoa esto na mesma linha. Este conjunto de dados na mesma linha chamamos de Registro. A informao (nome, telefone, etc.) em relao a uma determinada pessoa est separada em colunas, as quais denominamos campos.. Um Sistema Gerenciador de banco de dados relacionais(SGBDR) usado para armazenar as informaes de uma forma que permita s pessoas examin-las de vrias maneiras. O Sistema Gerenciador de dados nativo do Visual Basic o Access (Microsoft Jet), o qual pertence a uma categoria diferenciada de Gerenciadores tradicionais, como por exemplo: o Dbase e o Paradox. O SGBDR Microsoft Jet possui caractersticas em comum com os banco de dados cliente-servidor. Em nossos exemplos dos exerccios que iremos desenvolver, iremos abordar o padro MDB (Microsoft Database) que representa uma grande maioria de arquivos de Banco de Dados voltados ao Sistema Operacional Windows existente hoje. A extenso de arquivo MDB, utilizado pelo Access, como j comentado anteriormente, tambm utilizado pelo Visual Basic. Dentro de um arquivo MDB (banco de Dados) podemos ter vrias tabelas. Por exemplo: Em um programa que faa o controle de estoque podemos ter uma tabela para Produtos, Fornecedores, Clientes, Vendas etc. Todas essas tabelas ficam armazenadas dentro de um nico arquivo MDB. Estas tabelas possuiro campos onde sero armazenadas as informaes. A tabela Produto ter o campo de Descrio do Produto, Valor do Produto Quantidade em Estoque, etc. Tudo isto representa os Atributos (Campos) que esto armazenados dentro da tabela. Na fase de desenvolvimento de um aplicativo que ir gerenciar um Banco de Dados, poderemos criar primeiramente o Banco de Dados com suas definies de tabelas e campos. Os registros sero informados pelo usurio na medida em que ele for trabalhando com seu sistema. O nosso Banco de Dados poder ser criado diretamente no Access, ou utilizando a ferramenta de desenvolvimento de Banco de Dados que vem com o Visual Basic chamada: Visual Data Manager (VisData)

15.2 VISUAL DATA MANAGER (VISDATA) Para nossos estudos, iremos desenvolver um Banco de Dados no aplicativo VisData e o mesmo Banco de Dados no Access. Enfim quanto mais informao melhor, voc no acha? Inicie ento um novo projeto no Visual Basic, pois iremos acessar o Visual Data Manager pelo prprio VB.

Para acessar o VisData, faa o seguinte: 1. Selecione o Menu Add-Ins 2. clique no Item Visual Data Manager... A janela do visual Data Manager (VisData) ser exibida. Selecione as opes conforme mostrado na figura a seguir:

Para criar um novo arquivo de Banco de Dados no VisData, selecione o Menu File, em seguida clique no Item New, em seguida clique no Item Microsoft Access e por ultimo no Item Version 7.0 MDB.... O Visual Data Manager alem de criar Bancos de Dados com extenso MDB (Access), tambm d opo para criar Bancos de Dados para outros sistemas Gerenciadores. Observe na figura.

A prxima tela a ser exibida ser a janela de dilogo para voc informar em qual pasta ser salvo o arquivo de Banco de Dados e qual o nome do arquivo. Selecione a pasta desejada e nomeie o arquivo com o nome: MeuBanco. No h necessidade de informar a extenso do arquivo (Mdb).

A prxima janela a ser exibida a que faz o gerenciamento das tabelas. Para criar uma nova tabela faa o seguinte: Clique com o boto direito do mouse sobre a opo Properties (Propriedades) e em seguida clique na opo New Table.

Na prxima janela voc ir definir o nome da tabela e comear a adicionar os campos (atributos) que faro parte da tabela.

Observe as duas opes a seguir: Table Name: Aqui dever ser informado o nome da Tabela. Devero ser obedecida as regras impostas para nomeao de objetos, variveis, ou seja, no comear no nmeros, no conter caracteres especiais, etc. Para este exemplo utilize o nome: Clientes Field List: Caixa de Listagem aonde ir aparece a lista dos campos que sero adicionados na tabela. Para adicionar os campos clique no boto Add Field . A janela a seguir ser exibida:

Nesta janela iremos criar todos os campos da tabela. A seguir ser comentado as principais propriedades de opes desta janela: Name: utilize esta opo para informar o nome do campo da Tabela. Type: Nesta Caixa de Combinao voc ira definir o tipo de dado que ser campo que est sendo informado. Os tipos de dados aqui so os mesmos tipos de dados relativos as variveis. Lembra-se disso. Qualquer coisa de uma olhada no capitulo sobre variveis. Size : Defina aqui o tamanho do campo. Se voc informar 10 para o campo, podero ser digitado somente 10 caracteres. Esta opo estar disponvel somente para o campo do tipo Text. FixedField: Determina se o campo ser Fixo VariableField: Determina se o campo ser um Campo Varivel, Este valor o padro. AllowZeroLength: Esta opo permite comprimento zero, ou seja, se esta opo estiver selecionada o campo aceitar um vlaor vazio (""). Caso no estiver habilitada e tentar gravar um campo que no tenha nada digitado (como uma informao no obrigatria no aplicativo) ocorrer um erro em tempo de execuo. Vai dar PAU no programa. Required: Com opo selecionada o campo se torna obrigatrio. Ser obrigatrio a informao de valores para o campo, seno ocorre erro em tempo de execuo. Tambem vai dar PAU. DefaultValue: Se voc tiver um valor padro definido aqui, mesmo que o usurio do seu aplicativo no informe nada para

este campo, ele ir assumir o valor que voc venha a definir nesta propriedade Muito Bem! Depois de conhecer um pouco do ambiente do aplicativo Visual Data Manager (VisData), vamos ento criar uma tabela onde possa controlar as informaes de um cliente. Defina os campos da sua tabela conforme mostrado a seguir: Name Clicod CliNome Cliend CliBairro CliCid CliUF CliCep CliCpf CliRg CliFone CliCel Cliemail Type Long Text Text Text Text Text Text Text Text Text text text 35 40 35 35 2 9 14 15 16 16 40 Size Outros

Com a opo da propriedade AutoIncrField selecionada, este campo ser do tipo autonumerao, ou seja o cdigo ser gerado automaticamente pelo prprio Banco de Dados.

Depois de definir todos os campos na tabela, Informe o nome para a mesma (Table Name). O nome da tabela ser Clientes. Depois disso clique no boto Build The Table para que a tabela seja gravada e inserida no banco de dados.

Estrutura da tabela com os campos definidos

Observe que o nome da tabela Clientes j est includa na janela DataBase Window, isto significa que nossa tabela j faz parte do Banco de Dados MeuBanco. O prximo passo em nossa tabela ser criar um ndice para o campo Cdigo (clicod) e definir que o mesmo ser o campo chave primria desta tabela. Para isso temos que acessar novamente a janela da estrutura da nossa tabela. 15.3 DEFININDO INDICE o ndice na tabela ser determinado para agilizar a performance do acesso durante uma determinada procura. Quando definimos um ndice o Visual Basic faz uma ordenao lgica da tabela atravs de uma chave composta por um ou mais campos. Na necessidade de ordenar uma tabela por cdigo para que a procura de um determinado dado digitado seja feita pelo cdigo de maneira mais rpida, ento o campo indexado da tabela ser o cdigo. Na necessidade de colocar uma relao de clientes em ordem alfabtica pelo nome, ento a indexao da tabela ser pelo campo que possui o nome do cliente. No nosso exemplo da nossa tabela Clientes, durante a execuo de um determinado aplicativo para controle de clientes, devemos ficar atentos para no cadastrar dois clientes com o mesmo cdigo. Para esta verificao ser indexado o campo Cdigo (Clicod), pois se o cdigo j existir o registro s poder ser alterado e se o cdigo no existir, poder ser gravado o novo registro. Para definir um ndice poder tambm ser usado o Visual Data Manager atravs do Design da Tabela, onde ser exibida novamente a estrutura da tabela que acabamos de criar. Para acessar novamente a estrutura da tabela clique com boto direito do mouse sobre a tabela Clientes e em seguida clique no Item Design...

Com a tabela em modo estrutura, selecione o campo Clicod e clique no boto Add Index .

Observe a seguir a utilizao das propriedades de janela de indexao de campos da tabela: Name: Defina um nome para o ndice. atravs do nome definido aqui que ativaremos o ndice em nosso aplicativo no Visual Basic. O nome do ndice no precisa ser obrigatoriamente o nome do campo. Available Fields: Esta caixa de listagem exibe os campos que definimos em nossa tabela contm. D um click no campo que deseja indexar. Executando esta operao, o nome do campo ser exibido na caixa Indexed Fields. Desta maneira voc saber que o determinado campo est indexado. Unique: esta propriedade indica ao Visual Basic que a chave do ndice exclusiva (nica). Um ndice chave ajuda a otimizar a procura por registros. Ele consiste de um ou mais campos que organizam unicamente todos os registros de uma tabela em uma ordem predefinida. Se o ndice consiste de um campo, os valores desse campo precisam ser nicos. Se o ndice consiste de mais de uma campo, valores duplicados podem ocorrer em cada

campo, mas cada combinao de valores de todos os campos indexados precisa ser nica. Os campos que compe a chave de ndice no so necessariamente nicos. Primary: Determina que um objeto Index significa um ndice primrio para uma tabela. Um ndice primrio consiste em um ou mais campos que identificam com exclusividade todos os registros de uma tabela em uma ordem predefinida. Como o ndice do campo tem que ser exclusivo, a propriedade Unique do objeto Index definida como True. Um ndice primrio consiste em uma chave para a tabela e geralmente contm os mesmos campos da chave primria. Para a nossa tabela Clientes defina as seguintes propriedades de indexao de campos: Nome do ndice: Cod Availabel Fields: Clique no campo CliCod Primary: Selecione a caixa de verificao Unique: Selecione tambm a caixa de verificao Depois desta atualizaes podemos clicar no boto OK e em seguida no boto Close. Feche o aplicativo Visual Data Manager (VisData), pois nossa tabela est pronta para ser utilizada. timo! Neste captulo aprendemos como criar um Banco de Dados utilizando o Visual Data Manager. No prximo captulo utilizaremos o Access para criar esta mesmo tabela, e em seguida, iremos desenvolver o aplicativo voltado a Banco de Dados utilizando esta tabela de Clientes, OK? Ento...Valeu novamente e at l.

Captulo 16

16.1 BANCO DE DADOS NO ACCESS

O Banco de Dados criado no Visual Data Manager (captulo anterior), compatvel com o Microsoft Access at a verso 97 do mesmo. Se voc tentar abrir o arquivo MeuBanco.Mdb numa verso do Access superior 97, o programa ir exibir uma mensagem perguntando se voc deseja converter o Banco de Dados para a verso atual do Access ou abrir somente para modificaes de registros e leitura do mesmo. Sem converter o Banco de Dados no podero ser efetuadas alteraes na estrutura da tabela. Fiz um teste com o Banco de Dados que criamos no VisData (MeuBanco). Tentei abri-lo no Microsoft Access XP e observe a mensagem que me retornou:

Este comentrio valido pelo fato de, quando estiver desenvolvendo no Visual Basic um aplicativo voltado a Banco de Dados, ter de ser efetuado uma referencia com a biblioteca referente aos objetos DAO (Data Acces Objects) e a verso desta biblioteca dever ser relativa a verso do Access em que o Banco de Dados foi desenvolvido. Se voc converter o seu Banco de Dados para a verso atual do Microsoft Access de sua mquina poder realizar alteraes na estrutura das tabelas normalmente. Vamos ver ento a criao da tabela Clientes utilizando agora o Microsoft Access. Em nosso aplicativo exemplo voltado a Banco de Dados ser utilizado o Banco de Dados definido no Access, OK? Vamos l ento... Inicie o Access e informe o local onde ser criado o Banco de Dados e nomeie o mesmo como: BaseDados. Observe a figura a seguir:

Clique no boto Criar para confirmar. Na janela a seguir de um Duplo Click na opo Criar tabela no modo estrutura.

A prxima janela a ser exibida onde voc ir definir a estrutura da sua tabela, como os campos, tipo de dados, chave primria, ndice. Os campos a serem definidos aqui so os mesmos campos da tabela que definimos no aplicativo VisData. Lembre-se!

Estamos fazendo os dois exemplos visto que, mesmo que voc no tenha o Access instalado na sua mquina ,voc poder desenvolver um Banco de Dados utilizando o Visual Data Manager (VisData). Defina ento a estrutura de Banco de dados conforme a seguir, informando o nome do campo e o tipo de dados que o mesmo ir conter. Nome do Campo Clicod CliNome Cliend CliBairro CliCid CliUF CliCep CliCpf CliRg CliFone CliCel Cliemail Tipo de Dados AutoNumerao Texto Texto Texto Texto Texto Texto Texto Texto Texto Texto Texto Tamanho do Campo Inteiro Longo 35 40 35 35 2 9 14 15 16 16 40

A estrutura da tabela no Access dever ficar da seguinte maneira:

Defina a Chave primria para o campo CliCod. Para definir a chave primria aqui no Access, selecione o campo CliCod e em seguida clique no boto Chave Primria localizado na Barra de Ferramentas do Access.

Depois disso falta definir o nome do ndice para o campo Clicod, o qual ser utilizado junto programao no Visual Basic. Para acessar a janela de ndices no Access, clique no boto ndices (ao lado da Chave Primria) localizado na Barra de Ferramentas do Access.

Quando definida a chave primria para um determinado campo no Access, automaticamente o campo se torna indexado e a duplicao de registros neste campo se torna no autorizada. O Access sugere o nome para o ndice como PrimaryKey, porem este nome pode ser alterado, assim como iremos fazer a seguir: Observe a janela de ndices:

A janela de ndices exibe o Nome do ndice como PrimaryKey. Altere o Nome do ndice para Cod. O Nome do campo dever permanecer com o mesmo valor do campo indexado (CliCod). Quando utilizarmos o Nome do ndice para indexao da tabela no Visual Basic este nome ser Cd. No esquea disso. Feche a janela de ndices e volte para a janela de estruturao da tabela. Agora falta Salvar a tabela. Clique no boto Salvar localizado na Barra de Ferramentas do Access e nomeie a tabela como: Clientes.

Depois de salvar a tabela, feche a janela de modo estrutura e observe que a tabela Clientes j figura no Banco de Dados BaseDados.

Para executar alguma modificao na estrutura da tabela, selecione-a e clique no boto Estrutura .

16.2 CONCEITOS DE ACESSO A DADOS o nosso prximo passo ser em relao aos conceitos sobre como devemos proceder para criar o acesso a dados (Banco de Dados) a partir do Visual Basic. O Visual Basic oferece duas maneiras como forma de interao entre aplicaes e o mecanismo Jet (no nosso caso o Access): O Controle Data: O controle Data faz parte da caixa de ferramentas padro e pode ser inserido em formulrios como qualquer outro controle. Seu papel fazer intermediao entre a aplicao e um banco de dados de modo a automatizar tarefas comuns como incluses, alteraes, excluses e navegao em meio massa de registros. Objetos DAO: o modelo DAO uma completa interface de programao que lhe d total controle sobre o Banco de Dados. O nosso objeto de estudo e de acesso a dados sero os Objetos DAO.

16.3 BIBLIOTECA DE ACESSO A DADOS (OBJETOS DAO) Um dos recursos mais notveis do Visual Basic a sua biblioteca de objetos de acesso a dados ou DAO (Data Access Objects). So objetos que voc pode criar em tempo de execuo para acessar dados tanto em arquivos de banco de dados, no nosso caso o Access - o banco de dados nativo do Visual Basic - como em outros tipos de banco de dados locais como dBase, Paradox e tambm acessar dados em bancos de dados cliente-servidor como o Microsoft SQL Server usando a tecnologia ODBC. Para poder ter acesso aos objetos DAO, no desenvolvimento de um aplicativo voltado a Banco de Dados, voc ter que fazer uma referncia a estes objetos pelo prprio Visual Basic. Para criar esta referencia faa o seguinte: Inicie um novo projeto no Visual Basic.

1. Selecione o Menu Project 2. Clique na opo References...

A janela de referencias do projeto ser exibida. Localize nesta a janela a seguinte biblioteca de objetos DAO: Microsoft DAO 3.6 Object Library Existem outras bibliotecas referentes aos objetos DAO relativas a verses anteriores, porem se voc utilizou as verses do Microsoft Access a partir do 2000 para definio do seu Banco de Dados, obrigatoriamente dever utilizar a verso 3.6 da biblioteca dos objetos DAO, seno os objetos DAO sero incompatveis com a verso do Banco de Dados. Observe a figura a seguir:

Selecione a biblioteca desejada e clique no boto OK.

Depois disso, voc poder utilizar os objetos variveis DAO para controle de acesso ao seu Banco de Dados criado com a extenso .Mdb (Access).

16.4 OS OBJETOS DAO A seguir veremos os conceitos sobre os objetos DAO que utilizaremos dentro do desenvolvimento do nosso aplicativo com suporte a Banco de Dados. DBENGINE: O objeto DBEngine se encontra no topo da hierarquia dos objetos DAO e corresponde ao dispositivo Microsoft Jet de acesso a dados. O objeto DBEngine usado para ajustar os parmetros do sistema de Banco de Dados utilizado pelo Visual Basic e para definir a rea de trabalho padro para o Banco de Dados definido. WORKSPACE: O objeto WorkSpace definido logo aps o objeto DBEngine. Este objeto ser criado para definir a rea de trabalho do seu Banco de Dados junto ao Microsoft Jet. Um objeto Workspace padro - Workspaces(0) - criado automaticamente na primeira referncia a um objeto DAO pela aplicao. DATABASE: Este objeto ir representar o seu Banco de Dados dentro do aplicativo. Tambm utilizado para permitir a abertura de objetos Recordset, que veremos a seguir.

RECORSET: Assim como o objeto DataBase representa o Banco de Dados no seu aplicativo, o objeto Recordset ir representar as suas tabelas no seu aplicativo. Quando voc utilizar o objeto Recordset para abertura de suas tabelas, dever informar tambm em que nvel as tabelas sero acessadas. As tabelas podero ser acessadas atravs de 3 tipos de opo: DBOPENTABLE: Quando um objeto Recordset aberto com esta opo, o controle sobre a tabela aberta ser total, ou seja, o usurio ter acesso geral sobre as informaes nesta tabela, como por exemplo: Gravao de Registro, Alterao de Registro, Excluso de Registro, Navegao entre os Registros na tabela e at mesmo a Procura de um Registro . DBOPENDYNASET: Um recordset do tipo dynaset corresponde a uma tabela "virtual" resultante de uma consulta feita a uma ou mais tabelas. Quando alguma atualizao for realizada no objeto Recordset com este modo de abertura todas as alteraes realizadas se refletem imediatamente nas tabelas. DBOPENSNAPSHOT: Um objeto recordset aberto no modo snapshot um conjunto esttico de dados, similar ao dynaset porm no admite atualizao, isto significa que a tabela do objeto aberta deste modo s poder retornar valores de uma consulta. INDEX: Este objeto representa o ndice associado a tabela no Banco de Dados. O Visual Basic utilizar este objeto para indexar a tabela declarada no objeto Recordeset para uma consulta ao campo relativo. Existem outras colees de objetos DAO, porem estes aqui comentados sero aqueles que utilizaremos para a manipulao de dados em nosso aplicativo. A seguir veremos os Mtodos de Abertura e Fechamento do Banco de Dados e de tabelas que utilizaremos em relao aos objetos que acabamos de ver. Mtodo OPENDATABASE: O mtodo OpenDataBase abre o Banco de Dados especificado, determinada por um objeto Workspace, e retorna uma referncia a um objeto Database. A sintaxe da aplicao deste mtodo mostrada a seguir: Set (ObjetoDataBase) = ObjetoWorkspace.OpenDatabase(nomeDoArquivo) Mtodo OPENRECORDSET: O mtodo OpenRecordset define um novo objeto Recordset, representando qualquer conjunto de dados extrados de um banco de dados, ou seja, ir representar a

abertura da tabela definida em um objeto Recordset. Observe a sintaxe:


Set ObjetoRecordset = ObjetoDataBase.OpenRecordset(Tabela, opo de abertura)

Mtodo CLOSE: Este mtodo fecha os objetos de acesso a Banco de Dados. Observe a sintaxe: Objeto.Close Mtodo SEEK: Localiza um registro numa tabela indexada. Aplicvel somente a Recordset cuja abertura de tabela do tipo OpenTable. Observe a sintaxe: ObjetoRecordSet.Seek stringDeComparao, listaDeChaves Propriedade NOMATCH: Esta propriedade retorna um valor lgico informando se a operao de busca realizada em um objeto Recordset obteve sucesso ou no. Observe a sintaxe: ObjetoRecordeset.Nomatch

16.5 NAVEGANDO NOS REGISTROS Muito Bem! Depois de saber como devemos proceder para comear a se comunicar com um Banco de Dados definido, iremos conhecer agora os mtodos que podemos utilizar para navegar entre os registros existentes dentro de uma tabela. (Objeto Recordset) A localizao de um registro especfico indispensvel porque somente os campos do registro podem ser editados, a menos que utilizemos consultas de ao. Assim, mtodos para saltarmos entre os registros de uma tabela (Recordset) so indispensveis. Vamos ver ento quais so estes mtodos que o Microsoft Jet dispe: Mtodo MoveFirst: Este mtodo faz com que se possa posicionar para o primeiro registro lgico de uma tabela (Recordset). Mtodo MoveLast: Ao contrrio do mtodo acima o MoveLast se posiciona no ltimo registro lgico de uma tabela (Recordset). Mtodo MoveNext: Se posicionar no prximo registro lgico de uma tabela (Recordset). MovePrevious: Se posicionar no registro lgico anterior de uma tabela (Recordset).

Sempre que utilizarmos estes mtodos ser indispensvel determinarmos os limites de um objeto Recordset, visto que um erro ser gerado quando tentarmos fazer uma referncia sem um registro corrente. Para evitar que um objeto Recordset v se posicionar em um determinado registro e o mesmo no exista, devemos utilizar as seguintes propriedades: : Propriedade BOF: Begin OF file (comeo de Arquivo). Esta propriedade ir determinar se foi atingido o incio lgico de uma tabela do Banco de Dados (Recordset). Propriedade EOF: End Of file (Fim de Arquivo). Ao contrrio do BOF, esta propriedade ir determinar se foi atingido o trmino lgico de uma tabela do Banco de Dados (Recordset).

16.6 ATUALIZANDO DADOS Para poder navegar nos registros das tabelas de um Banco de Dados primeiramente ser preciso gravar estes registros. Depois do registro atualizado na tabela voc poder alter-lo, exclu-lo, consult-lo, enfim todas as opes que a abertura do objeto Recordset proporciona. Para o gerenciamento das opes de registros contamos tambm com mtodos que o Microsoft Jet proporciona. Observe a seguir estes mtodos e a sua utilizao: Mtodo AddNew: Este mtodo adicionar um novo registro para uma tabela (Recordset) e o aloca no buffer de edio para atualizao. Mtodo Edit: Este mtodo copia o registro atual para um buffer temporrio para edio dos dados. Mtodo Update: Este mtodo conseqncia do mtodo AddNew e do Mtodo Edit, ou seja, ele copia o contedo armazenado no buffer de edio para o registro corrente ou para o novo registro criado. este mtodo que realmente atualiza o registro na tabela (Recordset), seja ele novo ou um registro j existente. Ufa!!! Realmente, desta vez foi informao pra caramba hein? Pelo menos estamos aptos a comear a mexer com Banco de Dados, no mesmo? Ento no prximo capitulo definiremos nosso aplicativo voltado a Banco de Dados e iniciaremos a codificao do mesmo, OK? Ento at l...

Captulo 17

17.1 DEFININDO PROJETO

Agora que voc j possui conhecimentos sobre Banco de Dados e seus respectivos mtodos de acesso, poderemos dar inicio a um projeto voltado a Banco de Dados. O nosso projeto far referencia ao controle de Cadastro de Clientes. Utilizaremos o Banco de Dados definido no Access (capitulo anterior), cujo nome BaseDados juntamente com a tabela com o nome Clientes. Inicie um novo projeto no Visual Basic e faa a referencia com a biblioteca dos objetos DAO 3.6 (Menu Project References...)

17.2 CRIANDO A PRIMEIRA JANELA Depois de criar a referencia com os objetos DAO, vamos definir nossa primeira janela do projeto. Ser a janela de apresentao do aplicativo, portanto esta janela dever apresentar um visual simptico. Utilize o objeto FORM vazio que carregado com o novo projeto do Visual Basic para definir a janela. Observe a figura a seguir:

Formate o seu formulrio e objetos da seguinte maneira: Formulrio Name: FrmApresentao BackColor: Azul Escuro BorderStyle: 0 None StartUpPosition: 2 -CenterScreen

Adicione um objeto Image e insira uma figura relativo ao tema Clientes e Contas a Receber, conforme mostrado na janela acima. Insira objetos Label para exibir as informaes e defina a propriedade Name do Label com o ttulo Carregando... como LblCarregando, pois ele ser usado via programao. Voc poder formatar a sua janela de apresentao da maneira como voc achar melhor. S preste ateno para no assustar o usurio com uma janela muito berrante. Defina tambm a propriedade BackStyle dos objetos Label como: 0 Transparent para utilizar a mesma cor de fundo do formulrio. Adicione ao projeto um objeto Timer (s visvel em tempo de projeto) e formate as seguintes propriedades: Name: Tmr1 Interval: 500 (Esta propriedade relativa ao intervalo de tempo em milsimos de segundos). Muito bem! A idia a seguinte: Quando executar o aplicativo, essa janela ser exibida anunciando o aplicativo de Controle de Clientes e Contas a Receber. Haver uma programao no objeto Timer para simular o objeto Label Carregando. Vamos ento a programao: Declare a varivel a seguir na seo General - Declarations

Atribua o valor 1 varivel no evento Load do form

No evento Timer do objeto Timer, insira a programao a seguir:

Foi implementado uma condicional com um contador. Quando o valor da varivel Contador for 3, esta janela ser descarregada automaticamente e ser carregada a prxima janela que ser a janela principal do nosso aplicativo. Altere o nome do seu projeto (Menu Project Properties) de Project1 para Controle e em seguida salve o seu projeto para garantir o que voc j fez at agora. Salve-o em uma pasta separada para no misturar com outros projetos. 17.3 A JANELA PRINCIPAL A prxima janela a ser definida ser a janela principal do nosso aplicativo, ou seja aquela que ir conter a Barra de Menu e tambm uma Barra de Ferramentas. Adicione ao projeto um formulrio MDI Form (Menu Project Add MDI Form) e formate conforme a seguir: Name: FrmMdiPrincipal Caption: Controle Administrativo de Clientes e Contas a Receber WindowState: 2 - Maximized Defina a Barra de Menu e Itens de Menu conforme exemplo a seguir:

Defina tambm a Barra de Ferramentas para as seguintes opes de botes: Calculadora do Sistema Windows Explorer Clientes Contas a Receber Informaes do Sistema Sair Tente criar os botes com figuras relativas as aes dos mesmos. No esquea de formatar as propriedades necessrias dos botes da Barra de Ferramentas (Key, ToolTipText, Image).

A sua Barra de Menu e a sua Barra de Ferramentas devero ficar com a seguinte apresentao:

Vamos efetuar as primeiras programaes em nossa janela principal. Efetue a programao dos Itens do Menu Janelas conforme mostrado a seguir:

A seguir ser apresentada a programao para carregar a Calculadora do Sistema e o Windows Explorer atravs das opes do Menu Arquivo. Observe: Calculadora

Windows Explorer

A funo Shell utilizada para carregar qualquer programa aplicativo (.Exe). Se os programas a serem carregados forem aplicativos do Sistema operacional, como o caso da Calculadora e do Windows Explorer, ento s informar o nome o arquivo e a extenso .exe entre aspas. Se no for um programa do Sistema Operacional dever ser informado o caminho completo do mesmo (C:\Pasta\Arquivo.exe). As constantes utilizadas (VbNormalfocus, VbMaximizedFocus) so para informar ao programa como as janelas dos arquivos sero carregadas. A programao para a opo Sair (Menu Arquivo) dever ser executada da seguinte maneira: Quando o usurio clicar na opo Sair (inclusive no boto da Barra de Ferramentas ou no X da janela) o programa dever exibir uma mensagem perguntando ao usurio se ele realmente deseja fechar o programa. Esta mensagem dever ser programada no evento Unload do formulrio principal (MDI Form), pois se o usurio fechar a janela utilizando o boto X no ser exibida nenhuma mensagem. O evento Unload o ltimo evento a ser LIDO quando um formulrio fechado. Nas opes Sair (Menu e Boto) dever ser utilizado o mtodo que descarrega a janela atual: Unload Me. Observe e codifique o seu aplicativo conforme a seguir:

Observe que a funo MsgBox est dentro de uma condicional (If). Isto significa que e mensagem ter no mnimo 2 botes para que o usurio possa tomar uma deciso em relao a uma pergunta na mensagem. Na mensagem programada foi utilizada a constante VbYesNo para que os botes Sim e No sejam exibidos juntamente com a mensagem. Se a resposta em relao a mensagem for clicar no boto Sim ento o aplicativo ser finalizado, seno, o a operao ser cancelada atravs da propriedade Cancel com valor lgico 1 (True). Programe agora o evento Click da opo Sair (Menu Arquivo):

Faa os testes em seu aplicativo com as programaes efetuadas at agora e salve o seu projeto. A seguir ser apresentada a codificao dos botes da Barra de Ferramentas com as opes de programao existentes at agora:

Preste bastante ateno para os valores informados aps o Case. Este valor relativo a propriedade Key dos botes da sua Barra de Ferramentas. Lembra-se disso? 17.4 A JANELA SOBRE A nossa prxima janela ser aquela que exibe informaes sobre o aplicativo desenvolvido, ou seja, a janela Sobre. Nesta janela voc dever informar todas as especificaes do aplicativo, como por exemplo: Para que serve, a verso do mesmo, quem desenvolveu, informar que est protegido pelas leis de copyright e outras informaes que voc preferir. Vamos criar nossa janela ento. Adicione ao projeto um novo fomrulrio (Menu Project Add Form) e formate o mesmo conforme a seguir: Name: FrmSobre BackColor: Branco Caption: Informaes Sobre o Aplicativo Desabilite os botes Maximiza e Minimizar Centralize o formulrio Crie um LayOut para o seu formulrio Sobre mais ou menos conforme exibido a seguir:

No boto OK (FrmSobre) insira a codificao a seguir:

Esta janela dever ser carregada a partir do Item de Menu Informaes do Aplicativo (Menu Sobre) e tambm a partir do boto da Barra de Ferramentas (Boto Sobre) Janela Principal - . Dever ser carregada como uma janela Modal. A programao a seguir relativa opo do Item de menu e dever ser utilizada tambm no boto da Barra de Ferramentas.

Muito Bem! Execute o seu aplicativo e faa os testes. Salve o seu projeto. No prximo captulo iremos desenvolver a janela para o Controle de Clientes e programar as opes para acesso a Banco de Dados. Muita coisa nos aguarda. At l ento....

Captulo 18

18.1 A JANELA DE CONTROLE DE CLIENTES

A janela para o Controle Cadastral de Clientes ser uma janela MDI-filha e contar com vrios objetos que faro o controle das informaes. Adicione ento ao projeto um novo formulrio e formate conforme a seguir: Name: FrmClientes Caption: Controle de Informaes de Clientes MdiChild = True WindowState: 2 Maximized A janela de Clientes dever ser carrega a partir da janela principal atravs da opo do Item de Menu Clientes (Menu Cadastro) e tambm a partir do boto Clientes na Barra de Ferramentas. A programao a seguir relativa ao item de menu, podendo ser utilizada tambm para o boto na Barra de Ferramentas:

No esquea de ir salvando o seu projeto. O LayOut desta janela dever ser realizado com a mesma maximizada (em tempo de projeto), pois se trata de uma janela MDI-filha. Os campos que devero constar no LayOut so os mesmo definidos na tabela Clientes do Banco de Dados BaseDados definido no Access. Campos Cdigo Nome Endereo Bairro Cidade U.F. C.E.P. C.P.F. R.G. Telefone Fixo Telefone Celular E-Mail Lembra-se disso? Muito bem! O Banco de Dados utilizado ser o mesmo que definimos no captulo 16. Caso voc perdeu aquele Banco de Dados, crie outro exatamente igual seguindo o exemplo do capitulo 16.

18.2 OBJETO MASKEDBOX O campo Cdigo utilizar um objeto Label para exibir a informao. O campo U.F. (Estado) utilizar um Objeto ComboBox (Caixa de Combinao) para informar e exibir as informaes dos Estados. Os campos: Nome, Endereo, Bairro, Cidade, R.G., Telefone Fixo, Telefone Celular e E-Mail utilizaro objetos TextBox para informar e exibir as informaes. Para os campos C.E.P. e C.P.F. ser utilizado um novo componente chamado MaskEdBox. O objeto MaskEditBox tambm uma caixa de entrada como o objeto TextBox, porem podemos definir algumas propriedade que no existem no objeto TextBox, como por exemplo a propriedade Mask que nos d a opo de definir uma Mscara de Entrada para um determinado campo. A definio da propriedade MscaraDeEntrada consiste em caracteres literais (como espaos, pontos, traos e parnteses), juntamente com caracteres especiais, que determinam que tipo de valor pode ser inserido no espao naquela posio. As mscaras de entrada so utilizadas principalmente nos campos Texto e Data/Hora, mas tambm podem ser utilizadas em campos Nmero ou Moeda. Adicione ento o componente MaskedEdBox ao projeto. Selecione o Menu Project e em seguida clique no item Components... o componente que dever ser marcado o seguinte:

Depois de inserir o novo componente, observe na caixa de objetos . Este objeto que ser utilizado para os (General) o objeto MaskEdBox campos Cep e Cpf. Para definir a propriedade Name deste objeto ser utilizada a nomenclatura inicial Msk. Salve o seu projeto e vamos em frente.

18.3 OJETO MSFLEXGRID

Em nossa janela de Controle de Clientes tambm ser utilizado o objeto MSFlexGrid o qual ter como finalidade, mostrar informaes atravs de suas clulas. O objeto MSFlexGrid um conjunto de linhas e colunas (em forma de Grid) utilizado para exibir informaes. Para podermos utilizar este objeto em nosso projeto devemos, assim o objeto MaskEdBox, inserir o componente relativo a este objeto atravs do Menu Project Components... Acesse ento a janela de componentes e insira o seguinte componente ao projeto:

Observe o objeto MSFlexGrid na janela General do Visual Basic nomenclatura inicial para a propriedade Name deste objeto Grd.

.A

18.4 LAYOUT DA JANELA CONTROLE DE CLIENTES Os botes de controle da nossa janela de Clientes sero definidos atravs de uma Barra de Ferramentas. A Barra de Ferramentas desta janela dever conter os seguintes botes : Gravar Alterar Excluir Limpar Anterior Prximo - Consultar Observe a seguir a funo de cada boto da Barra de Ferramentas: Boto Gravar Alterar Excluir Limpar Anterior Prximo Consultar Ao Adiciona novo registro na tabela Atualiza informaes de um registro existente na tabela Apaga o registro corrente da tabela Limpa os objetos para adicionar um novo Registro Move e exibe o registro anterior gravado na tabela Move e exibe o prximo registro gravado na tabela Executa a consulta de um determinado registro gravado na tabela

Tente adicionar figuras aos botes relativas as funes dos mesmos. Deixe sua Barra de Ferramentas conforme exibido a seguir:

Agora vamos adicionar no formulrio os objetos relativos aos campos definidos na tabela (Banco de Dados). Observe a tabela a seguir: Campo Cdigo Nome Endereo Bairro Cidade U.F C.E.P. C.P.F. R.G. Telefone Fixo Telefone Celular E-Mail Objeto Label TextBox textBox TextBox textBox ComboBox MaskEdBox MaskEdBox TextBox TextBox TextBox textBox Nome LblCod TXtNome TxtEnd TxtBairro TxtCid CboUf MskCep MskCpf TxtRg TxtFoneFixo TxtFoneCel TxtEMail

Insira tambm um objeto MSFlexGrid ao formulrio e defina a propriedade Name como: GrdCli No esquea de maximizar o seu formulrio para inserir os objetos. O LayOut da sua janela dever ficar com a seguinte aparncia.

Objeto MSFlexGrid Name: GrdCli FixedCols = 0

18.5 FORMATAO DOS OBJETOS JANELA CLIENTES A seguir veremos a formatao dos objetos que foram inseridos no formulrio. A propriedade Name dos objetos j foi definida na tabela exibida anteriormente. Preste ateno na formatao das outras propriedades: Objetos TextBox Text: Limpar o contedo da propriedade Text MaxLength: Definir com tamanho do campo criado na tabela de Clientes Objeto ComboBox List: Nesta propriedade voc ir informar os estados que faro parte da lista da sua caixa de combinao. Informe os Estados abreviados, como por exemplo: PR, SP, SC, etc Style: 2 DropdownList (Para o usurio no ter acesso s informaes da caixa). Objetos MaskEdBox MaxLength: Definir com tamanho do campo criado na tabela de Clientes PromptChar: Selecionar a propriedade e pressionar a barra de espao, assim o caractere utilizado como prompt ser um espao em branco e no o caractere _ (underline). Isto dever ser feito para que possamos utilizar a rotina de limpeza dos objetos. PromptInclude: False (Para no gravar os caracteres literais da mscara de entrada na tabela do Banco de Dados). Vamos definir agora a propriedade Mask para os campos Cep e Cpf: Para o campo CEP defina a seguinte mscara: Para o campo CPF defina a seguinte mscara: #####-## ###.###.###-##

O caractere # definido na propriedade Mask referencia valores numricos, ou seja, neste campo s ser possvel informar caracteres com valor numrico. Objeto grid A formatao do objeto Grid se encontra na figura anterior sobre o prprio objeto grid. Com todos os objetos formatados vamos em frente. O prximo passo agora efetuar a abertura do nosso Banco de Dados cujo nome : BaseDados. O arquivo do seu Banco de Dados (Mdb) dever estar na mesma pasta que voc salvou este projeto. Se por acaso no estiver, por favor, providencie. A linha de programao que iremos fazer para a abertura do Banco de Dados ir instanciar sempre o Banco de Dados na pasta

do projeto, ou do arquivo executvel do mesmo. Se o Banco de Dados no estiver na mesma pasta do projeto, o programa ir gerar um erro, portanto verifique. 18.6 MDULOS Em primeiro lugar, s lembrando. Para trabalharmos com os objetos variveis DAO (Banco de Dados) devemos primeiramente fazer referencia biblioteca destes objetos (Menu Project References...) Como visto anteriormente para poder trabalhar com o Banco de Dados precisamos ter declarado um objeto varivel chamado Database e para trabalhar com as tabelas deste Banco de Dados precisamos ter declarado o objeto varivel Recordset. Em nosso aplicativo estes objetos sero utilizados em vrios lugares (eventos de objetos), portanto a declarao deste objetos variveis devero ser feitos em um local onde todo os objetos do projetos possam utiliz-los. Este local de declarao chama-se Mdulo. Toda varivel, procedimento, funo declarada em um mdulo podero ser utilizadas em qualquer parte de um projeto. Para adicionar um mdulo ao projeto faa o seguinte:

1. Selecione o Menu Project 2. Clique no Item Add Module

Na janela a seguir s clicar no boto Abrir. Um mdulo nada mais do que uma janela de codificao do Visual Basic, porem no tem a parte grfica de um formulrio. Observe na janela Explorer do Projeto que j consta uma pasta tambm para o mdulo. Quando voc sair do mdulo e quiser retornar s dar um duplo clique no arquivo do mdulo nesta janela. Por falar em arquivo, o mdulo tambm gera um arquivo

com a extenso .Bas. Quando voc for salvar o seu projeto informe a mesma dos outros arquivos j salvos (projeto). Na janela de propriedades, defina a propriedade Name do mdulo como: ModControle.

A janela do Explorer do Projeto com as pastas: Forms e Modules

18.7 OBJETO DATABASE E ABERTURA DO BANCO DE DADOS Bom! A declarao do objeto varivel Database ser feita no mdulo, para que a mesma possa ser usada em nvel de projeto. A declarao de variveis no mdulo dever ser feita utilizando a palavra reservada Public e no Dim como estvamos fazendo at agora. Efetue a declarao da varivel no mdulo conforme mostrado a seguir:

O nome da varivel do nosso objeto Database ser Base. A abertura do Banco de Dados ser dever ser executada assim que for carregada a janela principal do nosso aplicativo. O primeiro evento a ser LIDO quando um formulrio executado o evento Load, portanto v at o evento Load do nosso formulrio principal e insira a linha de codificao conforme exibido a seguir:

Ai est a abertura do nosso Banco de Dados cujo nome BaseDados. Observe os objetos DAO utilizados na abertura e o mtodo de abertura do

objeto Database. Todos os objetos e mtodos que utilizaremos em nosso Banco de Dados e Tabelas foram estudados no captulo 16. se voc ainda tiver alguma dvida, volte at l e d mais uma olhada. A parte da codificao onde foi utilizado as propriedade App.Path para informar o caminho onde est localizado o Banco de Dadso BaseDados. O App.Path informa ao programa que o Banco de Dados se encontra na mesma pasta onde est sendo executado o aplicativo. Nesta linha de programao foi atribudo a varivel Base (que o objeto varivel Database) o nosso Banco de Dados (BaseDados) definido no Access. Daqui pra frente dentro do aplicativo quem responde pelo Banco de Dados a varivel com o nome Base e no mais o Banco com o nome BaseDados. A partir do momento que o Banco de Dados aberto (no nosso caso no Evento Load da janela principal), quando esta janela for fechada ter que ser feito o fechamento dele, pois seno seus dados podem perder a integridade corrompendo o Banco de Dados. Selecione ento o evento Unload da janela principal e faa a seguinte alterao na programao j existente l:

O fechamento do Banco de Dados dever ser feito antes do comando End. No prximo captulo o assunto vai ser em relao a manipulao de dados, com abertura de tabela e programao de acesso a dados. At l ento.

Captulo 19 OBJETO RECORDSET E ABERTURA DE TABELA 19.1


Depois de realizar a abertura do Banco de Dados podemos comear a trabalhar com a(s) tabela(s) existente(s) dentro do mesmo, iniciando pela abertura da tabela. A abertura da nossa Tabela de Clientes ser feita quando a janela de Cadastro de Clientes for iniciado e o fechamento da tabela quando a janela de Cadastro de Clientes for descarregada (fechada). Primeiramente precisamos fazer a declarao de uma varivel para o objeto varivel Recordset, o qual representar a nossa tabela Clientes. A declarao desta varivel ser de nvel de formulrio, pois a cada formulrio que se utilize tabelas, o correto abrir a tabela relativa e fech-la no prprio formulrio que se est utilizando. Ento faa o seguinte: No formulrio de Cadastro de Clientes, abra a janela de codificao do Visual Basic e declare a varivel a seguir na seo General Declarations para o objeto Recordset.

O nome da nossa varivel para o objeto Recordset que representar a nossa tabela Clientes ser Cli. Os nomes para as variveis do objetos DAO segue a mesma regra para qualquer declarao de nomes de variveis, como j vimos nos captulos anteriores. Observe a palavra reservada Option Explicit. Se por acaso ela no figurar na seo General Declarations das janelas de codificao, inclusive do Mdulo, voc poder escrev-la manualmente. A programao a seguir representar a Abertura da Tabela Clientes e dever ser codificada no Evento Load da Janela de Cadastro de Clientes.

Observe a programao. A tabela Clientes est sendo atribuda varivel Cli (Objeto Recordset). Quem faz a abertura do mtodo OpenRecordset a varivel Base (Objeto Database) e o modo de abertura da tabela est sendo feito pelo DbOpenTable. Aps a linha de programao da abertura da tabela, estamos indexando a tabela Clientes, j atravs da varivel Cli (Recordset), atravs da propriedade Index. A tabela ser indexada visto que, durante a programao,

ser realizado uma consulta pelo cdigo do cliente. O campo CliCod, na tabela de Clientes est indexado e o nome do ndice Cd, lembra-se disso? Todos estes assuntos vistos aqui tambm foram debatidos no captulo 16. O fechamento da tabela dever ser feito no Evento Unload desta mesma janela, conforme mostrado a seguir:

19.2 DEFININDO PROCEDIMENTOS PRPRIOS O prximo passo da nossa programao ser definir os procedimentos que sero utilizados durante a programao. Estes procedimentos sero utilizados em locais distintos na programao dos nosso botes de controle. O primeiro procedimento a ser definido ir gerenciar, atravs de uma varivel lgica (Boolean), se o cdigo apresentado no objeto LblCod existe ou no na tabela Cli (Clientes). Se o cdigo existir, ou seja, se for um registro recuperado da tabela, ento o usurio s poder alterar o registro, agora caso o cdigo no exista (no caso um valor vazio para o LblCod), ento o usurio poder gravar um novo registro. Este procedimento ir gerenciar tambm os botes de controle Alterar e Excluir. Estes botes s podero estar habilitados se o usurio retornar um registro da tabela, pois no podemos alterar nem remover um registro que no exista, no mesmo? Na seco General Declarations desta janela declare uma nova varivel com o nome NovoCli do tipo Boolean, conforme mostrado a seguir:

19.3 O PROCEDIMENTO LOCALIZACLI Em seguida crie um procedimento prprio privado com o Nome: LocalizaCli Se voc esqueceu como define, ai vai a dica:

Acesse a janela de codificao do Visual Basic e em seguida selecione o Menu Tools e clique no Item Add Procedure...

O procedimento dever ser do tipo Sub e Private. Clique no boto OK e insira a codificao a seguir no procedimento LocalizaCli:

Aqui estamos utilizando o mtodo Seek para fazer uma procura na tabela de Clientes (Cli) referente ao valor do objeto LblCod. A seguir estamos testando, atravs da propriedade NoMatch, se o valor existente no objeto LblCod no foi encontrado. Se a resposta da condio for verdadeira ento a varivel Novocli assume o valor true e os botes alterar e Excluir cujo ndices na Barra de Ferramentas 2 e 4 assumem o valor da propriedade Enabled como False ou seja, ficam desabilitados. Caso a resposta da condio da propriedade NoMatch seja falsa, ou seja, existe na tabela o valor exibido no objeto LblCod, ento as opes do Else passam a ser verdadeira. Para gravar um novo registro o valor da varivel NovoCli deve ser verdadeira e para alterar um registro o valor da varivel NovoCli deve ser Falso.

Este procedimento dever ser executado em duas situaes distintas deste formulrio: A primeira situao sempre que a janela de Cadastro de Clientes for iniciada, ou seja, no Evento Load da mesma. A outra situao em relao ao objeto LblCod. Sempre que este objeto sofrer alguma mudana de valor o procedimento LocalizaCli tambm dever ser executado. O evento responsvel por esta situao o Change (Mudana). Programe ento o seu aplicativo conforme a seguir:

Insira a linha de codificao a seguir no evento Change do objeto LblCod.

Execute o seu aplicativo e veja o resultado disto. Quando voc carregar a janela de Clientes os botes alterar e Excluir estaro desabilitados, pois no existe valor no objeto LblCod. Se aconteceu isto parabns, voc est no caminho certo. Salve o seu aplicativo...

19.4 O PROCEDIMENTO LIMPAOBJETOS

O procedimento LimpaObjetos ser utilizado sempre que houver necessidade dos objetos da janela de Clientes assumirem o valor inicial, ou seja, sem nenhum valor: Crie um novo procedimento prprio (Sub Private) com o nome: LimpaObjetos e programe o mesmo conforme a seguir:

Repare que para efetuar a limpeza dos objetos Label, TextBox e MaskEdBox s usar 2 caracteres aspas dupla sem espao entre eles. Para limpar o objeto ComboBox tambm pode ser usado este mesmo mtodo, porem, neste nosso caso, iremos retornar para a ComboBox o primeiro valor que consta na propriedade List definido quando formatamos os objetos. O valor 0 o ndice do primeiro valor existente na propriedade List de um objeto comboBox. Voc pode usar a linha de codificao CboUf.Text = CboUf.List(0) no evento Load do formulrio para que o objeto ComboBox exiba desde inicio o primeiro estado informado na propriedade List.

19.5 O PROCEDIMENTO GRAVACLI Este procedimento ser o responsvel em passar os valores informados nos objetos para os campos na tabela Clientes (Cli) em nosso Banco de Dados. Aqui vamos precisar lembrar dos nomes dos campos definidos na tabela no Access. Se voc no lembrar dos nomes dos campos, abra o seu Banco de Dados no Access e verifique os nomes na tabela Clientes. A sintaxe de atribuio de valor para um campo na tabela a seguinte: Tabela(Campo) = Valor Aqui Tabela o objeto Recordset, no nosso caso Cli. Campo o nome do campo definido na tabela Cliente no Banco de Dados no Access. No h necessidade de coincidir letras maisculas e letras minsculas neste caso. Valor o objeto que contem a informao que ser gravada na tabela.

Crie ento um novo procedimento prprio (Sub Private) com o nome: GravaCli e codifique conforme a seguir:

Observe que neste procedimento no existe rotina de gravao para o campo Cdigo do Cliente (CliCod), voc sabe o porque? que este campo Autonumerao, ou seja, o prprio Banco de Dados insere um valor automaticamente quando qualquer outra informao do registro chega at a tabela. Outro detalhe o uso das funes Ucase e Lcase. A primeira ir gravar os valores informados como letras maisculas e a segunda ir gravar o E-mail com letras minsculas, indiferente de como sejam informados os valores nas caixas de texto. Vamos ento ao nosso ltimo procedimento prprio que iremos utilizar para a codificao da nossa janela de Cadastro de Clientes.

19.6 O PROCEDIMENTO CARREGACLI Este procedimento ser responsvel em mostrar as informaes que foram gravadas na tabela nos objetos na janela. A sintaxe para recuperar uma informao gravada em uma tabela ao contrrio daquela para gravar informaes na tabela. Observe: Valor = Tabela(Campo) A explicao desta sintaxe a mesma do procedimento GravaCli. Crie ento um novo procedimento prprio (Sub Private) com o nome: CarregaCli e codifique conforme a seguir:

Observe que agora o campo Cdigo do Cliente (Clicod) figura nesta programao. o retorno do Cdigo do Cliente que definir a condio do procedimento LocalizaCli. por este motivo a codificao do procedimento LocalizaCli no Evento Change do objeto Label LblCod. Com todos os procedimentos codificados, agora s programar os botes de controle da nossa Barra de Ferramentas. No prximo captulo comearemos a codificao pelo boto Gravar, para fazer logo o teste do nosso aplicativo voltado a Banco de Dados. Contenha a ansiedade e at l ento.

Captulo 20

20.1 GRAVANDO NA TABELA

No capitulo anterior definimos todos os procedimentos que utilizaremos para programar os botes de controle da nossa Barra de Ferramentas. Somente o boto Consultar ainda no ser programado, pois iremos precisar de um outro formulrio para fazer a consulta de registros. Vamos ento efetuar a programao do boto Gravar da Barra de Ferramentas.

Muito Bem! A rotina da programao para gravao de registro comea logo aps o Case Gravar. Primeiro verificado o valor da varivel NovoCli, pois para gravar um novo registro o valor desta varivel deve ser True. Em seguida verificado os valores dos campos: Nome, endereo, Bairro, Cidade e Cpf, pois para gravar o registro obrigatrio o preenchimento no mnimo destes campos. Depois das condicionais o mtodo AddNew atribudo ao Recordset Cli Este mtodo utilizado para Adicionar um novo registro Tabela. O procedimento prprio GravaCli utilizado logo em seguida para o programa saber os valores que tero que ser gravados na tabela. Em seguida atribudo o mtodo Update ao Recordset Cli. Este mtodo utilizado para atualizar os valores armazenados em Buffer pelo mtodo AddNew na tabela. Logo aps atualizar os registros, foi usado o procedimento LimpaObjetos para limpar os valores informados nos objetos e o foco enviado para a caixa de texto TxtNome.

Salve o seu aplicativo e faa o teste informando os valores pedido nos objetos e clicando no boto Gravar. Para ter certeza que o registro foi gravado, abra o seu Banco de Dados no Access e veja se as informaes que voc forneceu nos objetos esto gravadas na tabela Cliente. Grave no mnimo 3 registros na tabela para programar os botes Anterior e Prximo.

20.2 MOVIMENTANDO REGISTRO Os botes Anterior e Prximo da Barra de Ferramentas iro mostrar nos objetos da janela os registros existentes, que foram gravados, na Tabela de Clientes. Primeiramente vamos programar o boto Anterior. Observe a programao e atualize a programao da sua Barra de Ferramentas conforme a seguir :

Aqui o primeiro teste feito foi em relao a verificao de registros na tabela. A propriedade RecordCount verifica a contagem de registros na tabela. Se o RecordCount for igual a 0, ou seja, se no houver nenhum registro na tabela o usurio ser avisado atravs de uma mensagem. Caso tenha registro usamos o mtodo MovePrevious para mostrar o registro anterior da tabela de Clientes. Outro teste necessrio aqui a verificao do Comeo do Arquivo atravs da propriedade BOF. Utilizando o mtodo MovePrevious, quando no houver mais registro para mostrar, ou seja, est no primeiro registro da tabela o programa ir gerar um erro, pois acima do primeiro registro no existe mais nada na tabela. Por este motivo testado o comeo do arquivo com a propriedade BOF. Caso isto acontea ser exibida uma mensagem ao usurio

informado o Comeo do Arquivo e mostrando o primeiro registro da tabela atravs do mtodo MoveFirst. Depois das condicionais carregado o procedimento CarregaCli, o qual retorna para os objetos da janela os valores dos campos da tabela. A programao do boto Prximo parecida com a do boto Anterior. Atualize a programao da Barra de Ferramentas com a codificao do boto Prximo:

A lgica de programao utilizada aqui a mesma do boto Anterior. O que muda aqui so os mtodos e as propriedades testadas. Observe: No lugar do mtodo MovePrevious foi utilizado o mtodo MoveNext. (Prximo Registro) No lugar da propriedade BOF foi utilizada a propriedade EOF. (Fim De Arquivo) No lugar do mtodo MoveFirst foi utilizado o mtodo MoveLast (ltimo Registro). Observe que quando voc recupera um registro atravs do botes Anterior ou Prximo, os botes Alterar e Excluir ficam habilitados. Isto significa que depois de programados voc poder alterar ou excluir o registro corrente. Salve o seu aplicativo e faa os testes.

20.3 LIMPANDO OBJETOS O boto para Limpeza dos Objetos ir funcionar como um gerador de novo registro. Observe a programao do boto Limpar.

Antes de fazer a limpeza dos objetos exibida a mensagem para confirmao da execuo do procedimento LimpaObjetos. Se a resposta for positiva os objetos assumiro seus valores iniciais e o foco passa para o objeto TxtNome.

20.4 EXCLUINDO REGISTRO Esta opo do aplicativo dever ter uma ateno especial. Em relao a excluso de arquivos, estamos acostumados com o Sistema Operacional Windows que nos d a opo de enviar o arquivo deletado para a lixeira onde posteriormente, podemos restaur-lo. Esta opo do aplicativo no oferece este recurso, ou seja, a partir do momento que voc excluir um registro da tabela o mesmo no poder mais ser recuperado. tchau mesmo... Para evitar um possvel erro do usurio, o boto Excluir ir exibir uma mensagem explicativa informando sobre a ao que ele estar efetuando. Observe ento a programao a seguir:

A funo MsgBox utilizada aqui traz novidades. Lembra-se da funo Chr vista no captulo 8? Aqui ela utilizada para retorna um valor da tabela Ascii pelo valor 10. Aqui o valor 10 ir retornar uma quebra de linha. Tambm foi utilizada a constante vbDefaultButton2 a qual deixa o boto 2 da mensagem (No) com o foco. Isto foi utilizado para que se o usurio tenha uma segurana maior na execuo da ao de excluso de registro. E o mtodo que exclui o registro da tabela o Delete, o qual aqui atribudo ao objeto Recordset Cli.

20.5 ALTERANDO DE REGISTRO A rotina para a alterao de registro praticamente igual de gravao de um novo registro. As alteraes que devero ser feitas so as seguintes: O valor da varivel NovoCli dever ser testado como False e em vez de utilizar o mtodo AddNew ser utilizado o mtodo Edit. Para alterar um registro voc ter que primeiro recuperar um registro atravs dos botes Anterior ou Prximo. Em seguida altere alguma informao do registro, como por exemplo o nome, o endereo ou qualquer outro campo. Depois s clicar no boto Alterar. Codifique ento o seu boto Alterar.

Salve o seu aplicativo e execute os testes. Tudo funcionando? Muito Bem!

O nosso prximo no aplicativo ser em relao ao objeto MsFlexGrid. Este objeto ser utilizado para mostrar 4 campos importantes de cada cliente gravado na tabela de Clientes em nosso Banco de Dados. Os campos sero: O Cdigo, o Nome e o telefone Fixo e o telefone Celular. A primeira programao que faremos em relao ao objeto MSFlexGrid ser a configurao do mesmo, ou seja, definir a quantidade de colunas e o tamanho das colunas que ele ter inicialmente. A quantidade de linhas ser determinada pela quantidade de registros que a tabela de clientes ter. Ser utilizada uma consulta em linguagem SQL para determinar, atravs de um lao de repetio, que todos os clientes existentes na tabela Clientes em nosso Banco de Dados devero ser exibidos nas linhas do objeto MSFlexGrid (somente os campos comentados anteriormente). Para configurar o Grid, crie um procedimento prprio com o nome: ConfigGrid do tipo Sub Private e codifique conforme a seguir:

Um pouquinho complicado? Depois da explicao voc ver que bem simples. Primeiro passo conhecer as propriedades utilizadas: Col = Referente coluna do objeto MSFlexGrid cujo nome GrdCli Cols = Referente s colunas do objeto MSFlexGrid Row = Referente linha do objeto MSFlexGrid Rows = Referente s linhas do objeto MSFlexGrid ColWidth = referente ao comprimento da coluna do objeto MSFlexGrid Conhecendo estas propriedades vai ficar fcil voc entender a programao do procedimento ConfigGrid. Na primeira linha da programao foi definido que o Grid ter 4 colunas

Em seguida passado o comprimento que cada coluna ter atravs da propriedade ColWidth. A primeira coluna e a primeira linha de um Grid ter sempre o ndice 0. Depois disso o programa se posiciona na linha 0 do Grid (Row = 0) para comear a informar o cabealho do Grid, ou seja, as informaes que aparecero na primeira linha do Grid. Em seguida informado que para a coluna 0 o cabealho ser: Cdigo (GrdCli.text = Cdigo) e assim para as colunas 1, 2 e 3. Nada de complicao no mesmo? A formatao do Grid dever ser executada assim que a janela de Cadastro de Clientes for carregada. Atualize ento a programao do evento Load do formulrio conforme mostrado a seguir:

Execute o seu aplicativo e veja o resultado da configurao do objeto MSFlexGrid. No prximo captulo veremos a consulta em SQL para retornar os valores da tabela de Clientes para o objeto Grid OK? Ento at l.

Captulo 21

21.1 CONSULTAS EM SQL

A seguir ser focado um assunto super importante dentro das linguagens de programao voltadas a Banco de Dados Relacionais: a linguagem de consultas SQL (Structure Query Language). Na moderna terminologia de Banco de Dados, cada questionamento que fazemos ao aplicativo podemos chamar de consulta. Seja para saber o nome de um cliente, o telefone do cliente, as compras de um cliente, enfim, tudo aquilo que queremos saber em relao s informaes existentes dentro de nossas tabelas do nosso Banco de Dados. O retorno que obtemos de uma consulta uma viso de uma tabela. A diferena de uma viso de uma tabela e de uma tabela propriamente dita que a tabela est embutida na estrutura do Banco de Dados, ao passo que uma viso uma maneira de olhar as informaes que pode envolver vrias tabelas. A linguagem comum para fazer consultas em um Banco de Dados Relacional chamada de SQL (Structured Query Language) ou Linguagem de Consulta Estruturada. Quando uma consulta realizada, o mecanismo de Banco de Dados Jet retorna temporariamente uma nova grade (viso) armazenada na memria da mquina. No Visual Basic o objeto responsvel pela criao destas informaes temporrias o Recordset. A linguagem SQL consiste em instrues para selecionar registros de tabelas de acordo com o critrio que voc ir fornecer. Ela composta de comandos e clusulas que so usados para especificar campos de tabelas, filtros de valores, junes de tabelas, etc... Os comandos SELECT, FROM e as clusulas WHERE, ORDER BY so alguns dos exemplos que podem ser usados para definio de uma consulta em SQL. Por conveno, as instrues em SQL so escritas todas em letras maisculas, embora isto no seja necessrio pois iro funcionar normalmente tambm com letras minsculas..

21.2 DECLARANDO UMA CONSULTA EM SQL A declarao mnima para voc poder criar uma consulta em SQL a seguinte: SELECT <campos> FROM <tabela> A partir desta declarao j podemos retornar informaes de uma tabela. No exemplo acima, a Instruo SELECT ir selecionar os campos da tabela que faro parte da consulta e a clusula FROM indicar de qual tabela so os campos informados. como dizer a seguinte frase: SELECIONE OS CAMPOS DE TAL TABELA

Para ordenar a consulta por um determinado campo selecionado a partir da instruo SELECT voc poder usar a clusula FROM. Por exemplo: temos os campos cdigo e nome selecionados para a consulta. Se voc desejar que o campo nome seja ordenado por ordem alfabtica s utiliz-lo aps a clusula FROM. Vamos simular uma consulta SQL onde os campos Cdigo e Nome sero retornados de uma tabela com o nome Clientes e o campo Nome ser ordenado. Observe a seguir: SELECT Cdigo, Nome FROM Clientes ORDER BY Nome Observe que os nomes dos campos so separados por , (vrgula) Os nomes dos campos informados na instruo SELECT devem ser os mesmos nomes definidos nos campos da tabela criada no Banco de Dados e o nome tabela dever ser o mesmo nome da tabela atribudo no Banco de Dados. Outro detalhe o seguinte: Se voc for ocupar todos os campos de uma tabela para uma definir uma consulta no haver necessidade de informar o nome de todos eles na instruo SELECT. Basta voc utilizar o caractere * (asterisco) frente da instruo SELECT que ele ir representar todos os campos da tabela informada aps a clusula FROM. Utilizando o mesmo exemplo anterior, observe como ficaria a definio da consulta utilizando o * (asterisco): SELECT * FROM Clientes ORDER BY Nome Creio que utilizando estes conhecimentos sobre consulta em SQL poderemos crier a nossa consulta para exibir os registros da tabela Clientes no objeto MSFLexGrid. Vamos ento at o projeto Controle de Clientes e programar. O primeiro passo definir um objeto Recordset na seo General Declarations do formulrio de Cadastro de Clientes. O objeto Recordset que ser declarado que ir retornar o resultado da nossa consulta e o nome dele ser ConsultaCli. Atualize ento a seo General Declarations conforme a seguir:

Em seguida iremos programar nossa Consulta SQL e as rotinas do Lao de repetio que ir exibir no objeto Grid as informaes da tabela Clientes. Para trabalhar com as Linhas do objeto Grid ser necessrio criar uma varivel do tipo Inteira. Esta varivel que ir receber o valor da quantidade de registros existentes na tabela Clientes.

No formulrio de Contas a receber tambm iremos trabalhar com o objeto MSFlexGrid, isto significa que iremos precisar desta varivel l tambm, portanto, a declarao desta varivel ser de nvel de projeto (no mdulo). Vamos declar-la com o nome Linha. Atualize ento a codificao do seu Mdulo conforme a seguir:

Volte para o formulrio de Cadastro de Clientese crie um procedimento prprio com o nome: AtualizaGrid e programe o mesmo conforme a seguir:

Na primeira linha de codificao definida a consulta SQL. A consulta foi atribuda ao objeto Recordset ConsultaCli. Repare que o modo de abertura da consulta parecido com o modo de abertura de uma tabela. Em nossa consulta estamos selecionando (SELECT) os campos: CliCod, CliNome, cliFone e CliCel e informamos que os mesmos so da tabela (FROM) Clientes e que a consulta ser ordenada (ORDER BY) pelo campo CliNome. Observe que o tipo de abertura do objeto Recordset ConsultaCli no do modo DbOpenTable e sim do modo DbOpenSnapshot, ou seja, o objeto Recordset ConsultaCli ser aberto somente para leitura (Consulta).

O prximo passo do nosso procedimento verificar se o resultado da nossa consulta ter algum registro atravs da propriedade RecordCount. Se no houver registro na tabela de clientes a rotina da programao ir deixaro boejto MSFlexGrid com o valor inicial, conforme definido no procedimento prprio ConfigGrid. Se o resultado da consulta retornar registros (Else) ento a rotina da programao ser a seguinte: O ponteiro de registro da consulta se posicionar no ultimo registro atravs do mtodo MoveLast. Ser atribudo a propriedade Rows (Linhas) do Grid a quantidade de registros da consulta atravs da propriedade RecordCount + 1 (+ 1 devido a alinha do cabealho do Grid). O ponteiro de registro da consulta se posiciona no primeiro registro. A varivel Linhas recebe o valor 1, pois o primeiro registro ser exibido na linha 1 do Grid e no na linha 0, por causa do cabealho. iniciado o Lao de repetio Do While (Faa Enquanto). A condio passado ao lao que a mesma deve ser repetida enquanto o resultado da consulta no for EOF (fim de Arquivo). A propriedade Row (Linha) do Grid recebe o valor da varivel Linhas que neste momento 1. Os registro resultantes da consulta so armazenados nas colunas 0, 1, 2, e 3 do Grid relativas aos campos: CliCod, CliNome, CliFone e CliCel. A varivel Linhas recebe o valor dela mesma + 1 e em seguida o ponteiro de registro se move para o prximo registro da consulta (MoveNext). O programa executa o LOOP para testar novamente a condio do Lao de Repetio. Se a condio do Lao for Falsa, o programa no executa mais o Lao de Repetio e n ltima linha de codificao a consulta fechada (Close). Quando a janela de Cadastro de Clientes for carregada, este procedimento da consulta (ConsultaCli) dever ser executado, portanto atualize o Evento Load do seu formulrio de Clientes conforme mostrado a seguir:

S um detalhe.

A procedimento AtualizaGrid dever ser executado depois do procedimento ConfigGrid, pois o objeto MSFlexGrid dever estar configurado para que os registros possam ser exibidos no mesmo (ISTO LGICA). Execute o seu aplicativo e faa o teste.

21.3 ATUALIZANDO REGISTROS DO GRID O procedimento AtualizaGrid, utilizado para a criao da consulta SQL e para retornar os registros da tabela Clientes par ao objeto Grid poder ser utilizado tambm para outra situao. Se voc quiser atualizar imediatamente no Grid um novo registro adicionado na tabela de Clientes poder utiliz-lo juntamente com a rotina do boto Gravar. s acrescentar o procedimento AtualizaGrid aps a linha onde utilizado o mtodo Update (Cli.Update). Poder ser utilizado tambm quando for executado uma alterao em algum registro (boto Alterar). Assim que voc alterar algum registro (em relao ao campos Nome, fone Fixo ou Fone Celular) o mesmo ser atualizado no objeto Grid. Para isto s acrescentar o procedimento AtualizaGrid aps a linha onde utilizado o mtodo Update (Cli.Update). Outra opo no boto Excluir. Assim que o registro for excludo da tabela ele deixar de ser exibido no Grid. Basta acrescentar o procedimento AtualizaGrid aps a linha onde utilizado o mtodo Delete(Cli.Delete). Observe a seguir a programao dos botes Gravar, Alterar e Excluir com a atualizao do procedimento AtualizaGrid: BOTO GRAVAR

BOTO ALTERAR

BOTO EXCLUIR

21.4 O EVENTO DBLCLICK

Voc poder utilizar tambm o objeto Grid para executar uma pesquisa de um determinado registro. Por exemplo: o objeto est exibindo todos os registros existentes na tabela de Clientes, certo? Ento! Poder ser programado o evento Dblclick (Duplo click) do objeto MSFlexGrid para que quando seja dado um duplo click com o mouse sobre um determinado registro no Grid, todas as informaes deste registro sero exibidas nos objetos da janela (Cdigo, Nome, endereo, etc...). Vamos programar esta rotina ento? Acesse o evento DblClick do objeto MsFlexGrid e insira as seguintes linhas de codificao:

A programao aqui bem simples. Primeiro foi testado se o contedo clicado no objeto Grid diferente de vazio. Em seguida referenciada a coluna 0 do grid para a pesquisa seja feita pelo cdigo do cliente (Coluna 0). O mtodo Seek e aplicado em seguida para procurar na tabela de Clientes o contedo (grdCli.Text) existente na coluna 0 do Grid, indiferente da linha que for duplamente clicado. Simples no mesmo? Faa os testes no seu aplicativo e verifique se est tudo funcionando da maneira como deve estar. No prximo captulo trataremos o assunto relativo Consulta de Clientes. At l ento...

Grid.

Certifique-se que voc programou realmente o evento Dblclick do objeto

Captulo 22

22.1 A JANELA CONSULTA DE CLIENTES

O ltimo passo na janela de Cadastro de Clientes realizar a rotina para consulta de registros da tabela Clientes. Para isso teremos que adicionar ao projeto um novo formulrio que ir conter a programao para a realizao da consulta. Adicione um novo formulrio ao projeto e configure conforme exibido a seguir:

Formulrio Name: FrmConsultacli Caption: Consulta de Clientes Desabilitar botes Maximizar e Minimizar Centralizar o Formulrio Frame Name: FraCli Caption: Informe as iniciais do cliente a ser consultado TextBox Name: TxtIniciais Text: Apagar o valor da propriedade CommandButton Name: CmdOk Caption: &OK Este formulrio dever ser carregado a partir do boto consultar da janela de Cadastro de Clientes como uma janela Modal. Programe ento conforme a seguir:

O funcionamento da janela de consulta de clientes ser da seguinte maneira: Dever ser criada uma consulta SQL utilizando a clusula WHERE para FILTRAR o valor informado na Caixa de Texto (TxtIniciais) com o campo CliNome da tabela de Clientes. Se a consulta retornar algum registro com o valor informado, ento ser apresentado no Objeto MSFlexGrid (GrdCli) da janela de Controle de Clientes o registro consultado. Caso no haja nenhum registro (Nome) com o valor informado na Caixa de Texto (TxtIniciais) ento ser exibida uma mensagem informando que no existe registro com o valor informado; O que deve ficar bem claro que os registros resultantes da consulta sero exibidos no Grid da Janela de Clientes, OK? timo! Ento vamos l... Na janela de Consulta de Clientes defina as seguintes variveis na seo General Declarations.

A varivel ConsultaIniciais ser o objeto Recordset da consulta. As variveis Sql1, Sql2 e Sql3 sero utilizadas para a montagem da consulta, pois como sero passados mais parmetros para definio da consulta SQL, a mesma ficar com um tamanho maior que a consulta realizada anteriormente, desta maneira iremos dividi-la em 3 partes.

22.2 CLUSULA WHERE E OPERADOR LIKE Continuando a programao da janela de Consulta de Clientes crie um procedimento prprio com o nome: FiltraGrid. O procedimento dever ser do tipo Sub Private. Codifique o procedimento conforme a seguir:

Esta consulta SQL j traz outras opes para a consulta. Como j comentado anteriormente, ela est dividida em trs partes, sendo as partes armazenadas nas variveis Sql1, Sql2 e Sql3. Vamos ento a explicao: A varivel Sql1 armazena os campos e a tabela origem dos campos A varivel Sql2 vai armazenar o filtro da nossa consulta. Foi utilizada a clusula WHERE e o operador LIKE para passar ao programa uma situao de busca de dados na tabela consultada. A clusula WHERE est passando ao programa uma situao de comparao de valores utilizando o campo CliNome e o operador LIKE faz a unio do valor que deve ser comparado ao campo CliNome, que neste caso a Caixa de Texto TxtIniciais. As aspas simples e duplas utilizadas juntamente com os operadores matemticas + (mais) e o caractere * (asterisco), fazem parte da programao para a utilizao do operador LIKE. A utilizao do caractere-curinga * (asterisco) faz com que

sejam retornados, ou comparados, valores zero, 1 ou mais caracteres (strings). Por exemplo: se voc informar a letra A como a letra inicial da consulta, todos os nomes coma letra inicial A sero mostrados no Grid da Janela de Cadastro de Clientes. Os operadores matemticos + so utilizados para concatenao de valores. A varivel Sql3 armazena a ordem do resultado da consulta. Um detalhe muito importante. Observe na programao a linha referente clusula FROM. Repare que aps o nome da tabela (Clientes) foi dado um espao para fechar as aspas duplas. (Clientes ). Este espao deve ser dado para que o programa no interprete o caractere (aspas duplas) como parte do nome da tabela. Se isto acontecer o programa ir gerar um erro informando erro de sintaxe na clusula FROM. Na linha de abertura da consulta so concatenadas as variveis Sql1 + Sql2 + Sql3 e a consulta aberta no modo de consulta (dbOpenSnapshot). As linhas seguintes da programao do procedimento FiltraGrid so as mesmas j vistas na consulta SQL criada anteriormente no captulo 21, porem, existe uma diferena que o objeto MSFlexGrid (GrdCli) faz parte de outro formulrio (FrmClientes) e no deste (FrmConsultaCli), por este motivo referenciado o fomrulrio FrmClientes juntamente com o objeto Grid GrdCli (FrmClientes.GrdCli). Para completar a programao do formulrio faa o seguinte: No boto de Comando OK utilize o comando Unload me para programlo, da maneira como mostrado:

O procedimento FiltraGrid dever ser executado quando o usurio informar qualquer valor na caixa de texto Txtiniciais. Esta ao est relacionada ao evento Change. V ento at o evento Change do objeto TxtIniciais e programe conforme a seguir:

Execute agora o seu aplicativo e faa o teste da Consulta de Clientes. E assim o formulrio de Cadastro de Clientes est programado e pronto para ser usado. O prximo passo criar um formulrio que possa fazer o controle de Contas a Receber dos clientes cadastrados em seu Banco de Dados. Vamos l ento?

22.3 DEFININDO A TABELA DE CONTAS A RECEBER O primeiro passo para desenvolver o formulrio de Controle de Contas a Receber ser definir a nossa tabela no Banco de Dados com os campos que sero utilizados. Esta tabela ser definida no mesmo Banco de Dados da tabela Clientes, portanto abra o seu Banco de Dados BaseDados e defina a estrutura da tabela conforme a tabela a seguir mostra: Nome do Campo Tipo de Dados Tamanho do Campo CrCod AutoNumerao Inteiro Longo CrClicod Nmero Inteiro Longo CrDoc Texto 25 CrDesc Texto 35 CrDataMovto Data/Hora CrValorMovto Moeda CrDataVencto Data/Hora CrDataPagto Data/Hora CrValorPagto Moeda CrObs Memorando Defina Chave Primria para o Campo CrCod. Defina o Nome do ndice do campo CrCod como Cd. Salve sua Tabela com o nome: CReceber Se voc tiver alguma dvida sobre a criao de tabelas no Access, volte at o captulo 16 e de uma olhada para relembrar. Depois de criar a tabela voc poder fechar o Access. Os campos na tabela CReceber sero utilizados para as seguintes funes: Campo CrCod Responsvel pelo cdigo da movimentao CrClicod Responsvel pelo cdigo do cliente da movimentao CrDoc Nmero de um documento relativo movimentao da conta CrDesc Descrio do tipo da movimentao CrDataMovto Data do movimento da Conta a Receber CrValorMovto Valor do movimento da Conta a Receber CrDataVencto Data de vencimento da Conta CrDataPagto Data do pagamento da Conta CrValorPagto Valor do pagamento da Conta CrObs Observaes em relao movimentao da Conta a Receber Os campos Data de Vencimento, Data de Pagamento e Valor de Pagamento devero ser preenchidos somente quando a Conta for paga. Para fazer isto o usurio ter que pesquisar a Conta do Cliente e fazer uma Alterao no registro gravado anteriormente. Mas lgico que isto voc s poder testar depois que programar o seu Controle de Contas a Receber. Nosso prximo passo ser o LayOut do formulrio de Contas a Receber.

22.4 FORMULRIO DE CONTAS A RECEBER seguir: Adicione ao projeto um novo formulrio e formate-o conforme a

Formulrio Name: FrmCr Caption: Controle de Movimentao de Contas a Receber MdiChild: True WindowState: 2 - Maximized Este formulrio tambm ser uma janela MDI-filha, portanto dever ser definido o LayOut do mesmo com o formulrio maximizado (em tempo de projeto). O formulrio dever conter uma Barra de Ferramentas com os seguintes Botes de Controle: Gravar Alterar Limpar Consultar

Botes de Controle da Barra de Ferramentas do Controle de Contas a Receber

Agora vamos adicionar ao formulrio os objetos relativos aos campos definidos na tabela CReceber (Banco de Dados). Observe a tabela a seguir: Campo Objeto Nome Cdigo Label LblCod Cdigo do Cliente ComboBox CboCli Documento textBox TxtDoc Descrio TextBox TxtDesc Data da Movimentao TextBox TxtDataMov Valor da Movimentao textBox TxtValorMov Data de Vencimento TextBox TxtDataVenc Data de Pagamento textBox TxtDataPag Valor do Pagamento TextBox TxtValorPag Observaes TextBox TxtObs

Insira tambm um objeto MSFlexGrid ao formulrio e defina a propriedade Name como: GrdCr As formataes dos objetos utilizados neste formulrio j so de grande conhecimento seu, portanto, formate os mesmos para iniciar a programao. Para o objeto TextBox do campo observao, formate tambm as seguintes propriedades: MultiLine: True ScrollBars: 2 Vertical Estas propriedades faro com que a caixa de texto assuma uma barra de rolagem vertical e voc poder digitar texto em vrios linhas dentro do objeto. A formatao do seu formulrio de Controle de Movimentao de Contas a Pagar dever ficar com o seguinte LayOut:

A formulrio de Movimentao de Contas a Receber

Com a formatao do formulrio e dos objetos definida, partiremos para a programao. A lgica que ser aplicada na programao do Controle de Contas a Receber, ser a mesma aplicada no Controle de Clientes. No prximo captulo comearemos pela codificao dos procedimentos prprios. V se preparando e at l ento.

Captulo 23 23.1 OBJETO RECORSET - CONTAS A RECEBER


A janela de Controle de Contas a Receber dever ser carregada a partir do Item de Menu Contas a Receber (Menu Movimentao) e do boto Contas a Receber da Barra de Ferramentas da Janela Principal do nosso Aplicativo (MdiForm). Antes de iniciar a programao dos procedimentos iremos definir as variveis que sero utilizadas na Janela de Contas a Receber. Declare as variveis a seguir na seo General Declarations.

Com a varivel do objeto Recordset declarada (Cr), j podemos fazer a abertura da tabela e a indexao da mesma no evento Load do formulrio. Codifique conforme a seguir:

A seguir ser exibida a programao do evento Unload do formulrio, onde ser efetuado o fechamento do objeto Recordset. Observe:

23.2 PROCEDIMENTO LOCALIZACR Muito Bem! Com a programao do objeto Recordset (Cr) j efetuada podemos partir para a criao dos procedimentos prprios. A ordem de criao dos procedimentos ser a mesma que fizemos na janela de Cadastro de Clientes. Primeiro vamos definir o procedimento LocalizaCr. Crie ento um procedimento prprio com o nome LocalizaCr (Sub Private), e programe conforme a seguir.

Na janela de Contas a Receber no temos o boto Excluir na Barra de Ferramentas, portanto o procedimento LocalizaCr se referencia somente varivel NovaConta e ao boto Localizar (item 2). Este procedimento dever ser executado no evento Load do Formulrio, e no evento change do objeto Label do Cdigo da Movimentao de Contas a Receber conforme mostrado a seguir:

23.3 PROCEDIMENTO LIMPOBJETOS Como no formulrio de Controle de Clientes, este procedimento ir devolver aos objetos seus valores iniciais, ou seja, limpar o contedo dos objetos e desta maneira poder gerar uma nova Movimentao de Contas a Receber. Crie o procedimento LimpaObjetos (Sub Private) e codifique o mesmo conforme a seguir:

23.4 PROCEDIMENTO GRAVACR Crie um procedimento prprio com o nome GravaCr e programe conforme a seguir (Sub Private):

Observe que neste procedimento no figuram os campos relativos Data de Pagamento e valor de Pagamento. Estes campos sero tratados de maneira diferente, pois s podero ser preenchidos, se o registro j tiver sido gravado. Outro detalhe nesta programao o uso da funo Left (para o objeto ComboBox). Bem a explicao a seguinte: A utilizao do objeto ComboBox nesta janela ser exibir os registros dos clientes gravados na tabela

Clientes. Sero mostrados o Cdigo do Cliente e tambm o Nome do Cliente. Da seguinte maneira: 1 Joaquim Jos

aqui que entra a funo Left. Na tabela de Contas a Receber no Banco de Dados ser gravado somente o cdigo do cliente, portanto precisamos extrair do objeto ComboBox somente o Cdigo do Cliente. A programao Left(Cbocli.Text, 5) informa que ser retirado somente os 5 primeiros caracteres esquerda (Left) do objeto ComboBox.

23.5 PROCEDIMENTO CARREGACR Crie tambm o procedimento CarregaCr (Sub Private) e defina a programao conforme a seguir:

Foi utilizado a funo Format para os campos do tipo moeda, para que os registros recuperados da tabela de Contas a Receber possam ser exibidos de uma maneira melhor. Foi aplicado uma condicional nos campos Data de Pagamento e Valor de Pagamento para que os mesmo sejam exibidos somente se eles tiverem valor na Tabela. A recuperao do Cdigo do cliente e do Nome do Cliente, para o objeto ComboBox, se d em cima do campo CrCodCli (Tabela CReceber) e da coluna 1 do objeto Grid. Este procedimento ser utilizado quando for programado o evento Dblclick do mesmo.

23.6 PROCEDIMENTO CARREGACOMBO A janela de Controle de Contas a Receber contem o objeto ComboBox no qual sero exibidos os campos Cdigo do Clientes e Nome do Cliente. Estes campos pertencem tabela de Clientes e sero exibidos no objeto atravs de uma consulta SQL. Para executar esta rotina ser criado um novo procedimento prprio para que nossa programao fique bem enxuta. Defina ento um novo procedimento prprio e nomeie o mesmo como: CarregaCombo (Sub Private) e programe-o conforme a seguir:

Este procedimento dever ser executado assim que a janela de Controle de Contas a Receber for carregada, portanto, acesse o evento Load do formulrio e codifique da seguinte maneira:

23.7 PROCEDIMENTO CONFIGGRID O prximo procedimento a ser definido ser o que vai formatar a configurao do objeto MSFlexGrid. Os campos que ser controlados no Grid sero: O Cdigo da Movimentao, o Nome do clientes, A Data de Movimento, O Valor do Movimento, A Data de vencimento, A Data do Pagamento e o Valor do Pagamento. O total de colunas do Grid ser de 7. Vamos ento ao procedimento. Crie um novo procedimento prprio (Sub Private) com o nome ConfigGrid e programe conforme mostrado a seguir:

Execute este procedimento no evento Load do formulrio:

Estes procedimentos sero utilizados para a programao do Botes de Controle da Barra de Ferramentas. No prximo captulo iremos programar o acesso a dados do Controle de Movimentao de Contas a Receber, bem como a Consulta das Contas.

Captulo 24

24.1 CONTAS A RECEBER BOTO GRAVAR

A gravao de registro da movimentao de Contas a Receber ser efetuada com alguns testes relativos principalmente ao campo Data/Hora da tabela, pois estes campos,a partir do momento que recebem um valor, exigem que este valor seja uma data vlida, ou seja, o objeto que informar a data dever estar condicionado a isto. Vamos programar ento. Acesse o evento buttonclick do objeto toolBar (Barra de Ferramentas), e codifique o mesmo conforme mostrado a seguir:

Observe os testes de condicionais desta programao. Utiliza-se a funo IsDate para verificar se o contedo das Caixas de Textos referentes a datas so realmente datas vlidas. Outro detalhe o teste para verificao se a data de movimento ser maior ou igual a data vencimento, pois no podemos receber uma conta com data inferior a movimentao da conta.

Execute o teste no seu aplicativo. Faa primeiramente os testes para verificar se as condicionais esto funcionando e depois Grave um Registro na Tabela. No esquea de Salvar o seu Aplicativo, OK?

24.2 CONTAS A RECEBER - BOTO LIMPA OBJETOS Como j visto no Controle de Clientes, alem deste boto tornar os objetos com seus valores iniciais, tambm usado para poder gerar um novo registro. A programao do mesmo bem simples. Observe a seguir:

24.3 CONTAR A RECEBER BOTO ALTERAR o boto Alterar tambm tem algumas novidades. Os campos Data de Pagamento e Valor de Pagamento tero seus valores atualizado somente nesta rotina de gravao, pois somente de gravar uma movimentao de conta que poder ser feito o pagamento da conta. Vamos programar o boto Alterar e em seguida ser comentado mais sobre a codificao, OK? Observe a programao:

Os primeiros testes condicionais so os mesmos do boto Gravar, porem existe outras condies para poder editar o registro recuperado. O registro poder ser recuperado somente para alterao dos campos j gravados, ou seja, sem atualizar a Data de Pagamento e o Valor do Pagamento, por este motivo que foi utilizado duas vezes o mtodo Edit e Update. No primeiro uso dos mtodos Edit e Update estamos condicionando o programa para que atualize os valores de Data de Pagamento e Valor de Pagamento se os valores dos mesmos forem vlidos e se o valor da data for uma Data Vlida. E na segunda vez que os mtodos Edit e Update so usados estamos utilizando o procedimento GravaCr, ou seja, para atualizar os campos que j foram gravados na tabela de Contas a Receber. Faa o teste no seu aplicativo e vamos em frente... 24.4 ATUALIZANDO O GRID O prximo passo ser programar uma consulta que retorne os valores gravados na Tabela de Contas a Receber e exiba os mesmos no objeto Grid.

Para executar esta rotina primeiramente vamos criar um novo procedimento com o nome: ConsultaGrid (Private Sub) Crie o procedimento e programe conforme mostrado a seguir:

Procedimento parecido com o que foi criado no Controle de Clientes. So definidas duas variveis do tipo Recordset para serem utilizadas nesta consulta. O Recordset ConsultaCr foi definido para armazenar o resultado da Consulta SQL e o objeto Recordset Cli foi definido para executar uma consulta pelo mtodo Seek na tabela de Clientes, pois na tabela de Contas a Receber gravado somente o cdigo do clientes. Como o nome do cliente ser exibido no objeto Grid foi feita uma pesquisa na tabela de Clientes pelo valor existente no campo CrClicod da tabela de Contas a Receber, retornando assim para a segunda colina do Grid o nome do Cliente. Este procedimento dever ser executado tambm quando a janela de Contas a Receber for carregada. Acesse o evento Load do formulrio e atualize conforme mostrado a seguir:

Teste o seu aplicativo. Depois do objeto ser atualizado com os registros da tabela de Contas a Receber e clientes, vamos programar o evento Dblclick do Grid. Este evento responder ao duplo clique do mouse sobre algum registro existente no Grid, executando uma pesquisa e carregando as informaes nos objetos do formulrio. Observe a programao e codifique o seu aplicativo:

Faa os testes da programao.

24.5 CONTAS A RECEBER - CONSULTA Para criar a consulta de Movimentao de Contas a Receber, adicione um novo formulrio ao projeto e formate da maneira conforme a seguir: Formulrio Name: FrmConsultaCr Caption: Consulta de Movimentao de Contas a Receber Desabilitar os botes Maximizar e Minimizar Centralizar o formulrio. Frame Name: FraConsulta Caption: Informe a Data de Vencimento a ser Consultada TextBox Name: TxtIniciais Text: Limpar o Contedo da Propriedade Commandbutton Name: cmdOk Caption: &OK MSFlexGrid Name: GrdCr FixedCols: 0 A imagem a seguir exibe como deve ficar o LayOut do seu formulrio de consulta de Contas a Receber.

A programao que ser utilizada no boto OK ser para descarregar o formulrio de consulta quando o mesmo for clicado. Programe conforme a seguir:

Neste formulrio ser desenvolvida uma consulta SQL para filtrar uma Data de Vencimento informada. O objeto Grid exibir os campos: Cdigo da Movimentao, Data de Vencimento, Cdigo do Clientes, Nome do cliente e Valor do Movimento e mais uma vez lembrando, o valor informado para a consulta dever ser a Data de Vencimento.OK? Ento no esquea disso e at o prximo captulo.

Captulo 25PROGRAMANDO A CONSULTA DE CONTAS A RECEBER 25.1


A janela de Consulta de Movimentao de Contas a Receber dever ser carregada pelo boto Consultar da Barra de Ferramentas da Janela de Movimentao de Contas a Receber. O primeiro passo para a programao da consulta ser definir os procedimentos prprios que vamos utilizar no formulrio de Consulta de Contas a Receber. Crie ento um procedimento prprio com o nome: ConfigGrid e programe conforme a seguir:

Este procedimento dever ser executado assim que a janela de Consulta de Contas a Receber for executada. Acesse ento o evento Load do formulrio e programe.

Muito bem! O Grid j est configurado. Na seqncia vamos criar o procedimento que ir exibir em ordem de Clientes os registros existentes na tabela de Contas a Receber.

Crie ento um procedimento com o nome: CarregaGrid e programe o mesmo conforme a seguir:

A programao deste procedimento a mesma do procedimento CarregaGrid da janela de Controle de Contas a Receber, porem com alguns campos diferenciados para o Grid. Execute este procedimento no evento Load do formulrio de Consultas de Contas a Receber, conforme a seguir:

Execute a sua janela de Consulta e veja o resultado. 25.2 FILTRANDO A CONSULTA A seguir vamos programar a consulta que ir realizar o filtro da nossa consulta. Quando for informado uma data de vencimento na caixa de texto (TxtIniciais), a consulta dever filtrar da tabela de Contas a Receber somente as datas coincidentes com o valor informado. Caso no exista Data de Vencimento com o valor informado, ser exibido uma mensagem ao usurio informando. Vamos ento definir a consulta. Para isto crie um procedimento prprio com o nome: FiltraGrid e programe conforme a seguir:

Esta consulta j utiliza a clusula WHERE e o operador LIKE para que possa ser comparado o valor que ser informado na Caixa de Texto (TxtIniciais) com o valor do campo da Tabela CReceber (Cr) CrDataVencto. Tambm foi utilizado a consulta de Filtro de Registro na Janela de Cadastro de Clientes. Lembra-se? Muito bem! Para fazer o teste da filtragem da Data de Vencimento insira este procedimento no evento Change do objeto Caixa de Texto (TxtInciais), pois cada vez que for informado um valor na Caixa de Texto a consulta dever ser executada. Codifique ento conforme a seguir:

timo! Agora, faa o teste no seu aplicativo.

25.3 CARREGANDO REGISTRO DA CONSULTA A programao a seguir ser no evento DblClick do Grid da janela de Consulta de Contas a Receber. Depois de filtrar o registro desejado, vamos dar a opo ao usurio de dar um duplo clique sobre o determinado registro e carregar as informaes relativo a ele nos objetos da janela de Controle de Contas a Pagar. Dessa maneira o usurio poder visualizar todas as informaes do registro e se for o caso, fazer alguma alterao do registro, como por exemplo, informar a Data de Pagamento e o Valor do Pagamento, caso a Conta a Receber no tiver sido paga ainda. Para isso vamos declarar uma varivel do tipo Recordset para a abertura da tabela de Contas a Receber, pois nela que vamos fazer a pesquisa. Na seo General Declarations do formulrio de Consulta de Contas a receber declare a seguinte varivel:

A seguir vamos definir um procedimento que ser responsvel pelos objetos do formulrio de Contas a Receber. Para fazer relao com os objetos do formulrio de Contas a Receber primeiramente ter que ser fazer referencia ao prprio formulrio (FrmCr).

Crie ento um procedimento prprio com o nome: CarregaConsulta e programe conforme a seguir:

Observe na programao que os objetos pertencem a outro formulrio (FrmCr) e no a este, portanto estamos informando primeiro o nome do formulrio e depois o nome do objeto. Agora s programar o evento Dblclick do objeto Grid (FrdCr) da janela de Consulta de Contas a Receber. Vamos l ento...Programe conforme a seguir:

A abertura e fechamento da tabela de Contas a Receber feita aqui mesmo no evento DblClick do objeto, no havendo assim a necessidade da abertura no evento Load do formulrio. Agora s fazer os testes. Espero que todas as informaes e exemplos passados tenham sido de grande valia e possam servir como ponto inicial no conhecimento da linguagem de programao VISUAL BASIC. Valeu.

You might also like