Você está na página 1de 129

MICROSOFT VISUAL BASIC DESVENDANDO A LINGUAGEM DE PROGRAMAO

MAIS POPULAR DO MUNDO

Autor: William Costa Rodrigues


Copyright 2004, W.C. Rodrigues (Lizaro Soft)

Sumrio
1. 2. INTRODUO .............................................................................................................1 CONCEITOS BSICO DO VISUAL BASIC.....................................................................3
2.1. 2.2. 2.3. 2.4. 2.5. 2.6. 2.7. 2.8. INTERFACE DO VISUAL BASIC ................................................................................................. 3 CONTROLE BSICO ............................................................................................................... 4 CONTROLES PERSONALIZADOS ................................................................................................ 5 TIPOS DE PROJETOS .............................................................................................................. 5 TIPO DE VARIVEIS .............................................................................................................. 6 DECLARANDO VARIVEIS NO VISUAL BASIC .............................................................................. 6 CONVERTENDO DADOS .......................................................................................................... 7 EXERCCIOS......................................................................................................................... 8

3.

ESTRUTURA DE UMA APLICAO ..............................................................................9


3.1. ESTRUTURAS DE PROGRAMAO DO VISUAL BASIC ................................................................... 10 3.1.1. Tipos de Estruturas de Linguagem......................................................................................10 3.1.1.1. Estrutura de Tomada de Deciso:................................................................................10 3.1.1.1.1 IF... Then... Else ....................................................................................................10 3.1.1.1.2 IIF ........................................................................................................................11 3.1.1.1.3 Select Case............................................................................................................11 3.1.1.2. Estrutura de Loop ......................................................................................................11 3.1.1.2.1 For... Next .............................................................................................................11 3.1.1.2.2 Do... Loop .............................................................................................................12 3.1.1.2.3 Do While... Loop ....................................................................................................12 3.1.1.2.4 Do Until... Loop......................................................................................................12 3.1.1.2.5 While... Wend ........................................................................................................13 3.1.1.2.6 For Each... Next .....................................................................................................13 3.1.1.2.7 With... End With.....................................................................................................13 3.1.1.3. Saindo das Estruturas de Loop ....................................................................................14 3.2. FORMULRIOS E CONTROLES ................................................................................................ 14 3.3. MDULOS (MODULE) E MDULOS CLASSE (CLASS MODULE)...................................................... 17 3.3.1. Mdulos (Module) .............................................................................................................17 3.3.2. Mdulos Classe (Class Module)...........................................................................................18 3.4. MENU EDITOR .................................................................................................................... 20 3.5. EXERCCIOS....................................................................................................................... 21

4.

CONTROLES PERSONALIZADOS (PROPRIEDADES E EVENTOS)..............................25


4.1. MICROSOFT WINDOWS COMMON CONTROL 6.0....................................................................... 26 4.1.1. ImageList (Lista de Imagens).............................................................................................26 4.1.1.1. Carregando uma Imagem da Coleo. .........................................................................26 4.1.2. Controle ListView (Lista de Visualizao) .............................................................................28 4.1.3. Controle ProgressBar (Barra de Progresso)..........................................................................30 4.1.4. Controle StatusBar (Barra de Status) ..................................................................................31 4.1.5. Controle ToolBar (Barra de Ferramentas) ............................................................................32 4.1.6. Controle TreeView (rvore de Visualizao).........................................................................34 4.1.7. Controle Slider ..................................................................................................................37 4.2. EXERCCIOS....................................................................................................................... 37

5.

FUNES DATA E HORA ...........................................................................................39


5.1. 5.2. 5.3. 5.4. DATE ................................................................................................................................ 39 DATAVALUE ....................................................................................................................... 39 FORMAT ............................................................................................................................ 39 PROJETO COMENTADO ......................................................................................................... 39

6.

CONTROLANDO AS VERSES E INFORMAES DO SEU APLICATIVO ....................41

III Microsoft Visual Basic Sumrio

7.

TRABALHANDO COM FUNES NUMRICAS E FINANCEIRAS ................................45


7.1. FUNES NUMRICAS ......................................................................................................... 45 7.2. FUNES FINANCEIRAS ....................................................................................................... 45 7.2.1. Funo Pmt (Pagamento de Anuidade Baseado num Perodo) ...............................................45 7.2.2. Funo FV (Valor Futuro de Anuidade)................................................................................46 7.2.3. Funo IPmt (Taxa de Juros para Durante um Perodo)........................................................46 7.2.4. Funo NPer (Nmero de Perodos para Atingir uma Anuidade) ............................................46 7.2.5. Funo PV (Presente Valor Presente Baseado num Perodo)..................................................46 7.2.6. Funo NPV (Valor Presente Lquido) ..................................................................................46 7.2.7. Funo Rate (Taxa por Perodo) .........................................................................................46

8.

INICIANDO COM A SQL (STRUCTURED QUERY LANGUAGE)...................................47


8.1. CRIANDO TABELAS VIA SQL. ................................................................................................ 48 8.2. NDICES E TABELAS - CRIAR, ALTERAR E EXCLUIR .................................................................... 49 8.2.1. Excluindo Tabelas .............................................................................................................49 8.2.2. Alterando Tabelas .............................................................................................................49 8.2.3. Criando ndices.................................................................................................................50 8.2.4. Excluindo ndices ..............................................................................................................50 8.3. TESTANDO AS INSTRUES SQL ........................................................................................... 50 8.4. SQL - CRIANDO CONSULTAS PARAMETRIZADAS ....................................................................... 50 8.4.1. Mtodos de QueryDef........................................................................................................51

9.

TRABALHANDO COM BANCO DE DADOS ACCESS ....................................................53


9.1. CRIANDO UM BANCO DE DADOS ............................................................................................ 53 9.2. O MODELO DAO (DATA ACCESS OBJECT) ............................................................................... 54 9.3. ABRINDO UM BANCO DE DADOS ............................................................................................ 55 9.3.1. Recordset.........................................................................................................................55 9.3.1.1. dbOpenTable.............................................................................................................55 9.3.1.2. dbOpenDynaset .........................................................................................................55 9.3.1.3. dbOpenSnapshot .......................................................................................................56 9.3.1.4. dbOpenFowardOnly ...................................................................................................56 9.3.1.5. dbAppendOnly...........................................................................................................57 9.3.1.6. dbReadOnly ..............................................................................................................57 9.3.1.7. dbSeeChanges...........................................................................................................57 9.3.2. Utilizando o Motor do Banco de Dados DBEngine .................................................................57 9.3.3. Utilizando o Controle DataControl .......................................................................................58 9.4. ACESSANDO DADOS DE UMA TABELA ...................................................................................... 58 9.4.1. Acesso Dados de uma Tabela Utilizando o DataControl ......................................................58 9.4.2. Acesso Dados de uma Tabela Utilizando Instruo SQL .....................................................58 9.5. ADICIONANDO, LOCALIZANDO, EDITANDO E EXCLUINDO DADOS DE UMA TABELA ........................... 59 9.5.1. Adicionado Dados .............................................................................................................59 9.5.2. Localizando Dados ............................................................................................................60 9.5.2.1. Exemplo de como Localizar Dados...............................................................................61 9.5.3. Editando Dados ................................................................................................................63 9.6. COMPACTANDO E RECUPERANDO UM BANCO DE DADOS ............................................................. 63 9.6.1. Compactando Banco de Dados ...........................................................................................63 9.6.2. Recuperando Banco de Dados............................................................................................64 9.7. SALVANDO E RECUPERAR FIGURAS NUM BANCO DE DADOS EM CAMPO OLE .................................. 64 9.8. ACESSANDO OUTROS BANCOS DE DADOS ................................................................................ 66 9.8.1. Banco de Dados dBase ......................................................................................................66

10. TRABALHANDO COM O CONTROLE MSCHART NO VISUAL BASIC ...........................69


10.1. CRIANDO UM GRFICO MANUALMENTE ................................................................................... 70 10.2. ACESSANDO DADOS DE UM BANCO DE DADOS PARA PLOTAR UM GRFICO ..................................... 73

11. TRATANDO ERROS EM SUA APLICAO ..................................................................75


11.1. OS OBJETO ERR E ERROR DO VISUAL BASIC ............................................................................ 75

IV 11.1.1. Propriedades dos ObjetosErr e Error ...............................................................................75 11.1.1.1. Propriedade Description .............................................................................................75 11.1.1.2. Propriedades HelpFile/HelpContext ..............................................................................75 11.1.1.3. Propriedades Number.................................................................................................75 11.1.1.4. Propriedades Source ..................................................................................................75 11.1.1.5. Propriedades LastDLLError..........................................................................................75 11.1.2. Mtodos do Objeto Err...................................................................................................75 11.1.2.1. Mtodo Clear.............................................................................................................75 11.1.2.2. Mtodo Raise ............................................................................................................76 11.2. ERROS RELACIONADO A BANCO DE DADOS .............................................................................. 76 11.3. ERROS RELACIONADO A ARQUIVO ......................................................................................... 77 11.4. ROTINA PARA TRATAMENTO DE ERROS ................................................................................... 77

12. DISTRIBUINDO SUA APLICAO.............................................................................81


12.1. COMPILANDO O PROJETO ..................................................................................................... 81 12.2. SETUP WIZARD (VISUAL BASIC 5.0)...................................................................................... 81 12.3. PACKAGE AND DEPLOYMENT WIZARD (VISUAL BASIC 6.0) ........................................................ 81 12.4. INNO SETUP COMPILER ....................................................................................................... 82 12.4.1. Dicas para Visual Basic ..................................................................................................82 12.4.1.1. Gerando as Mensagens de Instalao em Portugus. ....................................................82 12.4.1.2. Instalando Arquivos OCX. ...........................................................................................82 12.4.1.3. Instalando Arquivos do Visual Basic.............................................................................83 12.4.1.4. Usando o SETUP.LST Gerado pelo P & D Wizard...........................................................83 12.4.1.5. Instalando ADO, DCOM e MDAC..................................................................................84 12.5. ISTOOL ............................................................................................................................. 84

13. TRABALHANDO COM API'S ......................................................................................87


13.1. 13.2. 13.3. 13.4. 13.5. ABRINDO ARQUIVO DE AJUDA ATRAVS DE API........................................................................ 87 ABRINDO O BROWSER OU EDITOR DE E-MAIL PADRO ............................................................... 88 ENCONTRANDO O DIRETRIO DE INSTALAO DO WINDOWS E DE SISTEMA .................................. 88 DRIVE DO CD .................................................................................................................... 89 ECREVENDO E OBTENDO INFORMAES DE UM ARQUIVO INI ..................................................... 90

14. CRIANDO ARQUIVOS DE AJUDA BASEDO EM ARQUIVOS HTML .............................93


14.1. CRIANDO UM ARQUIVO DE AJUDA .......................................................................................... 93 14.1.1. Arquivo de Contedo .....................................................................................................95 14.1.2. Arquivo de ndice ..........................................................................................................97 14.1.3. Aparncia da Janela do Arquivo de Ajuda ........................................................................97 14.1.4. Configurar Sensibilidade ao Contexto ..............................................................................97 14.1.5. Compilando o Projeto da Ajuda.......................................................................................99 14.1.6. Nota Final .....................................................................................................................99 14.2. ACESSANDO O ARQUIVO CHM, ATRAVS DO VISUAL BASIC ....................................................... 99

15. GERANDO RELATRIOS COM O CRYSTAL REPORTS .............................................101


15.1. INICIALIZANDO O CRYSTAL REPORTS ................................................................................... 101 15.2. CRIANDO UM NOVO RELATRIO .......................................................................................... 101 15.3. INSERINDO NOVOS CAMPOS A PARTIR DA TABELA. .................................................................. 105 15.4. FORMATANDO CAMPOS, INSERINDO FIGURAS, LINHAS E CAIXAS ................................................ 105 15.4.1. Formatando Campos.................................................................................................... 105 15.4.2. Inserindo Figuras, Linhas e Caixas ................................................................................ 106 15.5. TRABAHANDO COM FRMULAS ............................................................................................ 107 15.5.1.1. Especificando o valor de uma frmula atravs do Visual Basic...................................... 108 15.6. IMPRIMINDO, VISUALIZANDO E EXPORTANDO UM RELATRIO A PARTIR DO VISUAL BASIC............ 108 15.6.1. Imprimindo................................................................................................................. 108 15.6.2. Visualizando................................................................................................................ 108 15.6.3. Exportando (para arquivo e por e-mail) ......................................................................... 109 15.6.3.1. Exportando para arquivo formato do Word................................................................. 109

Microsoft Visual Basic Sumrio 15.6.3.2. Enviando um relatrio em anexo por e-mail ............................................................... 110 15.7. OUTROS CDIGOS TEIS PARA TRABALHAR COM RELATTIOS.................................................... 111 15.7.1. Abrindo um relatrio, cujo banco de dados possuui senha............................................... 111 15.7.2. Alterar via cdigo o caminho da base de dados do relatrio ............................................ 111 15.7.3. Como direcionar a impresso do Crystal para a porta LPT2?............................................ 111 15.7.4. Fazendo com que a janela de impresso do Crystal Reports fique como filha (MDIChild) de um MDI? ................................................................................................................................. 111 15.7.5. Inserir uma quebra de pgina no Crystal Reports? ......................................................... 111 15.7.6. Modificar as margens de um relatrio em modo de execuo?......................................... 111 15.7.7. Outra forma de especificar a senha do banco de dados utilizado pelo relatrio.................. 112

16. CRIANDO UM ACTIVEX ..........................................................................................113 17. BIBLIOGRAFIA CONSULTADA ................................................................................115

VI

Microsoft Visual Basic ndices de figuras

VII

ndice de Figuras
FIGURA 1. INTERFACE MDI (MUTIPLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 .................................................3 FIGURA 2. INTERFACE SDI (SINGLE DOCUMENT INTERFACE) DO VISUAL BASIC 6.0 ....................................................3 FIGURA 3. TELA DE SELEO DE UM NOVO PROJETO, COM OS DIVERSOS MODELOS.......................................................6 FIGURA 4. ORGANOGRAMA SIMPLIFICADO DE UMA APLICAO. ............................................................................17 FIGURA 5. JANELA DE PROPRIEDADES DO VISUAL BASIC. ...................................................................................17 FIGURA 6. MENU EDITOR DO MICROSOFT VISUAL BASIC. ...............................................................................21 FIGURA 7. CAIXA DE CONTROLES ACTIVEX PERSONALIZADOS, LOCALIZADOS NO SISTEMA. ...........................................25 FIGURA 8.MICROSOFT WINDOWS COMMON CONTROL 6.0 .................................................................................26 FIGURA 9. A- CONFIGURAES DO TAMANHO DAS IMAGENS; B- COLEO DE IMAGENS INSERIDAS NO IMAGELIST. .............28 FIGURA 10. CONTROLE LISTVIEW, EXIBINDO CONES PEQUENOS..........................................................................29 FIGURA 11. CONTROLES PROGRESSBAR'S EXIBINDO OS DOIS VALORES DA PROPRIEDADES SCROLLING (0 CCSCROLLINGSTANDARD E 1- CCSCROLLINGSMOOTH) ...............................................................................30 FIGURA 12. CONTROLE STATUSBAR, EXIBINDO VRIAS INFORMAES ADICIONAIS....................................................31 FIGURA 13. CONTROLE STATUSBAR DO PROCESSADOR DE TEXTOS MICROSOFT WORD............................................31 FIGURA 14. CONTROLES TOOLBAR'S ALINHADOS NO TOPO DA JANELA E EM BAIXO E COM A PROPRIEDADE STYLE 1 TBRFLAT E 0 TBRSTANDARD, RESPECTIVAMENTE..................................................................................................32 FIGURA 15. CAIXA DE PROPRIEDADES GERAL DE UMA BARRA DE FERRAMENTAS (ABA GENERAL).....................................34 FIGURA 16. CAIXA DE PROPRIEDADES DOS BOTES DE UMA BARRA DE FERRAMENTAS (ABA BUTTONS). ...........................34 FIGURA 17. CAIXA DE PROPRIEDADES DOS BOTES DE UM CONTROLE TREEVIEW (ABA GENERAL). .................................35 FIGURA 18. EXEMPLO DE UM CONTROLE TREEVIEW, COM UM NODE PAI (CONES) E 4 NODES FILHOS. LINESTYLE IGUAL A 1 TVWROOTLINE. ..............................................................................................................................36 FIGURA 19. CONTROLE SLIDER ..................................................................................................................37 FIGURA 20. INTERFACE DA CALCULADORA DE IDADE .........................................................................................40 FIGURA 21. CAIXA DE DILOGO DE CONTROLE VERSES E INFORMAES DO APLICATIVO. ...........................................41 FIGURA 22. TELA DE INFORMAES DE UM PROJETO.........................................................................................43 FIGURA 23. ESTRUTURA DO BANCO DE DADOS COM QUATRO TABELAS....................................................................48 FIGURA 24. ORGANOGRAMA SIMPLES DE UM BANCO DE DADOS. AS LINHAS PONTILHADAS INDICAM O RELACIONAMENTO ENTRE AS TABELAS....................................................................................................................................53 FIGURA 25. HIERARQUIA DE CLASSES DAO ...................................................................................................54 FIGURA 26. LAYOUT PARA PESQUISA DE DADOS DO PROGRAMA LIZARO VISUAL BASIC DICAS V3.0 ................................63 FIGURA 27. CONTROLE MICROSOFT CHART 5.0 ..............................................................................................69 FIGURA 28. GRFICO DE RECEITAS/DESPESAS DE ABRIL A JUNHO APRESENTANDO A MDIA DE CADA MS. ........................71 FIGURA 29. GRFICO CRIADO COM DADOS DE ENTRADA MANUAL, EXIBINDO AS ESTATSTICAS. .....................................72 FIGURA 30. GRFICO PLOTADO A PARTIR DOS DADOS DE UM BANCO DE DADOS ACCESS 97 .........................................74 FIGURA 31. TELA INICIAL DO SETUP WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0. ................................................81 FIGURA 32. TELA INICIAL DO PACKAGE AND DEPLOYMENT WIZARD QUE ACOMPANHA O VISUAL BASIC 5.0 ......................82 FIGURA 33. FIGURA DO EDITOR DE SCRIPT DO INNO SETUP COMPILER V3.0. ..........................................................84 FIGURA 34. INTERFACE DO PROGRAMA ISTOOL 3.0 EM PORTUGUS (BR) ..............................................................85 FIGURA 35.JANELA PARA INICIAR UM NOVO ARQUIVO........................................................................................93 FIGURA 36. TELA DO WIZARD PARA ESPECIFICAR O CAMINHO E O NOME DO PROJETO. ...............................................94 FIGURA 37. LISTAGEM DE ARQUIVOS HTML, QUE IRO FAZER PARTE DO ARQUIVO DE AJUDA. ......................................94 FIGURA 38. JANELA DO PROJETO RECM CRIADO, COM AS OPES E LISTAGEM DE ARQUIVOS CRIADOS. ..........................95 FIGURA 39. JANELA DE OPO PARA CRIAO OU ABERTURA DE UMA RQUIVO DE CONTEDO. .......................................95 FIGURA 40. JANELA DE ADIO DE TPICOS E DE LIGAMENTO (LINK) COM O ARQUIVO CORRESPONDENTE. .......................96 FIGURA 41. JANELA DE "LINKAGEM" DE ARQUIVO AO TPICO DO CONTEDO. A LISTAGEM EXIBIDA POR TTULO DO ARQUIVO. ..................................................................................................................................................96

VIII

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

FIGURA 42. ABA DE CONTENTS, COM SUA APARNCIA FINAL LISTANDO TODOS OS TPICOS CRIADOS..............................97 FIGURA 43. JANELA HTMLHELP API INFORMATION COM A ADIO DO ARQUIVO DE CABEALHO INSECTA.H. ...................98 FIGURA 44. JANELA DE LIGAO DA DEFINIO (IDH_MAIN), COMO O ARQUIVO HTML (INSECTA.HTM). .......................98 FIGURA 45. CONE DO CRYSTAL REPORTS V4.6. ........................................................................................... 101 FIGURA 46. JANELA PARA CRIAO DE UM RELATRIO NOVO NO CRYSTAL REPORTS................................................. 101 FIGURA 47. JANELA CREATE REPORT EXPERT, COM A OPO O PASSO 1: SELEO DE TABELAS NO CRYSTAL REPORTS ...... 102 FIGURA 48. PASSO 3: SELEO DE CAMPOS A SEREM EXIBIDOS NO RELATRIO DO CRYSTAL REPORTS. ......................... 103 FIGURA 49. PASSO 4: SELEO DOS CAMPO DE ORDENAO DO RELATRIO E TIPO DE ORDENAO NO CRYSTAL REPORTS. 103 FIGURA 50. PASSO 8: ESPECIFICAO DE TTULO E SELEO SE ESTILO DO RELATRIO NO CRYSTAL REPORTS................ 104 FIGURA 51. JANELA DO MODO DE DESENHO DO CRYSTAL REPORT. ..................................................................... 104 FIGURA 52. JANELA PAR INSERO DE NOVO(S) CAMPO(S) AO RELATRIO NO CRYSTAL REPORTS................................ 105 FIGURA 53. BARRA DE FERRAMENTAS DE FORMATAO DO TEXTO DOS CAMPOS NO CRYSTAL REPORTS. ........................ 105 FIGURA 54. MENU SUSPENSO PARA FORMATAO DO CAMPO (FONTE, FORMATO, BORDAS, ETC.) NO CRYSTAL REPORTS .... 106 FIGURA 55. JANELA DE ALTERAO DO FORMATO DO CAMPO NO CRYSTAL REPORTS. ............................................... 106 FIGURA 56. ALTERAO DE BORDA E CORES DE BORDA E TEXTO DO CAMPO DO CRYSTAL REPORTS. ............................. 106 FIGURA 57. BARRA DE FERRAMENTAS PARA INSERO DE FIGURA, LINHA E CAIXA (RESPECTIVAMENTE) DO CRYSTAL REPORTS. ................................................................................................................................................ 107 FIGURA 58. JANELA DE EDIO DE FRMULA DO CRYSTAL REPORTS .................................................................... 107 FIGURA 59. BARRA DE FERRAMENTAS NA JANELA DE VISUALIZAO DO CRYSTAL REPORTS. ....................................... 109 FIGURA 60.JANELA DE VISUALIZAO DE UM RELATRIO PELO CRYSTALREPORT ACTIVEX CONTROL............................. 109 FIGURA 61. CONTROLE ACTIVEX EM DESIGN-TIME. ....................................................................................... 113

Microsoft Visual Basic ndices de cdigos

IX

ndice de Cdigos
CDIGO 1. EXEMPLO DE DECLARAO DE VARIVEIS NO VISUAL BASIC....................................................................7 CDIGO 2. PROCEDIMENTO PARA EXIBIO DO FORMULRIO FRMMAIN....................................................................9 CDIGO 3. CDIGO EXTENSOS PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR, DO FORM2 E EXIBI-LO. ................18 CDIGO 4. CDIGO MAIS PRTICOS ATRAVS DA FUNO SHOWFORM PARA ALTERAR A PROPRIEDADE CAPTION E BACKCOLOR, DO FORM2 E EXIBI-LO. .....................................................................................................................18 CDIGO 5. ESTE QUANDO O FORM CLICADO UM UMA ESTE EXEMPLO NECESSITA DE UM CONTROLE IMAGELIST E UM CONTROLE PICTUREBOX. ...................................................................................................................28
IMAGEM DA LISTA SUBSTITUDA POR OUTRA IMAGEM. EXEMPLO CARREGA VRIOS BITMAPS EM UM CONTROLE IMAGELIST.

CDIGO 6. LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM DA COLEO DA IMAGELIST1 PARA O CONTROLE PICTURE1. ....................................................................................................................................28 CDIGO 7, LINHA DE COMANDO PARA RETORNAR A SEGUNDA IMAGEM (CONE) DA COLEO DA IMAGELIST1 PARA O CONTROLE PICTURE1. ....................................................................................................................................28 CDIGO 8. ROTINA SIMPLES PARA EXIBIR O PROGRESSO DE UM CONTROLE PROGRESSBAR...........................................30 1 CONTIDA NUM CONTROLE IMAGELIST E RETORNA-LO PICTURE DA BARRA DE STATUS COM O INDEX 1. ...............................................31 CDIGO 10. CONTROLE STATUSBAR. ATRIBUINDO UM TEXTO AO PAINEL 1 E ADICIONANDO PAINIS E FIGURAS. ...............32 CDIGO 11. ADIO DE NODES NUM CONTROLE TREEVIEW................................................................................37 CDIGO 12. REMOVENDO UM NODE DO CONTROLE TREEVIEW. ...........................................................................37 CDIGO 13. PROJETO CALCULADORA DE DIAS, MESES E ANOS VIVIDOS ..................................................................40 CDIGO 14. PROJETO PARA EXIBIR AS INFORMAES DE UM APLICATIVO................................................................42 CDIGO 15. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUO DBOPENTABLE ..........................55 CDIGO 16. ROTINA PARA ACESSO A DADOS DE UMA TABELA UTILIZANDO A INSTRUO DBOPENDYNASET, UTILIZANDO INSTRUES SQL............................................................................................................................55 CDIGO 17. PREENCHENDO UMA CAIXA DE LISTAGEM COM DADOS DE UMA TABELA UTILIZANDO O RECORDESET DO TIPO FOWARD-ONLY. ..............................................................................................................................57 CDIGO 18. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS.............................................................58 CDIGO 19. ROTINA PARA ABERTURA DE UMA BASE DE DADOS MS ACCESS COM SENHA..............................................58 CDIGO 20. ROTINA PARA ACESSO A UM BANCO DE DADOS DO TIPO MS ACCESS. .....................................................58 CDIGO 21. ROTINA PARA ACESSO A DADOS DE UMA TABELA VIA INSTRUO SQL....................................................59 CDIGO 22. ROTINA PARA PREPARAR UMA TABELA PARA RECEBER NOVOS DADOS (REGISTRO) ......................................59 CDIGO 23. ROTINA PARA GRAVAR DADOS EM UMA TABELA DO BANCO DE DADOS. ....................................................60 CDIGO 24. ROTINA PARA LOCALIZAR DADOS DENTRO DE UMA TABELA, UTILIZANDO AS INSTRUES DO DATACONTROL E INSTRUES SQL............................................................................................................................60 CDIGO 25. ROTINA PARA FILTRAR OS DADOS DE UMA TABELA ............................................................................61 CDIGO 26. ROTINA PARA LOCALIZA DADOS DENTRE DE UMA TABELA, UTILIZANDO SQL E EM SEGUINDA PREENCHENDO UMA TREEVIEW COM OS DADOS ENCONTRADOS. .............................................................................................62 CDIGO 27. ROTINA PARA EDITAR UM REGISTRO GRAVADO EM UMA TABELA DO BANCO DE DADOS. ................................63 CDIGO 28. ROTINA PARA COMPACTAR UM BANCO DE DADOS SEM SENHA. ..............................................................64 CDIGO 29. ROTINA PARA COMPACTAR UM BANCO DE DADOS COM SENHA. .............................................................64 CDIGO 30. ROTINA PARA RECUPERAR UM BANCO DE DADOS CORROMPIDO.............................................................64 CDIGO 31. ROTINA PARA SALVAR E RECUPERAR UMA FIGURA DENTRO DUM CAMPO OLE DE UM BANCO DE DADOS. ............66 CDIGO 32. ROTINA PARA ACESSO BANCO DE DADOS DBASE VERSO III. ............................................................66 CDIGO 33. ROTINA PARA ACESSO BANCO DE DADOS FOXPRO VERSO 2.5. .........................................................66 CDIGO 34. ROTINA PARA ACESSO BANCO DE DADOS EXCEL VERSO 4.0.............................................................67 CDIGO 35. ROTINA PARA ACESSO BANCO DE DADOS TEXTO. ...........................................................................67 CDIGO 36. CDIGO PARA CRIAO DE UM GRFICO DE RECIETAS/DESPESAS E MDIA DUTRANTE TRS MESES..................70 CDIGO 37. CDIGOS PARA CRIAO DE UM GRFICO MANUALMENTE E XIBIO DE ESTATSTICAS. ...............................72
PARA O PAINEL A PROPRIEDADE

CDIGO 9. LINHA

DE COMANDO PARA EXTRAIR A IMAGEM DE INDEX

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

CDIGO 38. CDIGO PARA EXTRAIR DADOS DE UM BANCO DE DADOS ACCESS 97, LISTANDO O NMERO DE PESQUISADORES POR ESTADO. .................................................................................................................................73 CDIGO 39. ROTINA COMPLETA PARA INTERCEPTAO, EXIBIO E ARMAZENAMENTO DE ERRO DE UMA APLICAO ............80 CDIGO 40. EXEMPLO DE COMO ABRIR UM ARQUIVO DE AJUDA ATRAVS DE API ......................................................88 CDIGO 41. EXEMPLO DE COMO ABRIR O BROWSER OU EDITOR DE E-MAIL PADRO ..................................................88 CDIGO 42.EXEMPLO DE COMO ENCONTRAR O DIRETRIO DE INSTALAO DO WINDOWS E DE SISTEMA ........................89 CDIGO 43. EXEMPLO DE COMO DETECTA R ALETRA DO DRIVE DO CD ...................................................................90 CDIGO 44. EXEMPLO DE COMO ESCREVER E OBTER INFORMAES DE UM ARQUIVO INI.............................................91 CDIGO 45. ESTRUTURA
IDENTIFICAO NUMRICA. DE UMA ARQUIVO DE CABEALHO, CONTENDO OS TPICOS SENSVEIS AO CONTEXTO E SUA

................................................................................................................98

CDIGO 46. CLASSE CLSHELPCHM, CRIADA PARA ACESSAR ATRAVS DE API AO ARQUIVO DE AJUDA CHM, PELO VISUAL BASIC ..................................................................................................................................................99 CDIGO 47. CODGO PARA EXIBIR O ARQUIVO DE AJUDA ATRAVS DO EVENTO CLICK, DE UM COMMANDBUTTON, CHAMADO CMDHELP. ................................................................................................................................... 100 CDIGO 48. CODGO PARA EXIBIR O CONTEXTO ESPECFCO DO ARQUIVO DE AJUDA ATRAVS DO EVENTO CLICK, DE UM COMMANDBUTTON, CHAMADO CMDHELP. ............................................................................................. 100 CDIGO 49. TEXTO DA FRMULA "NOME" INSERIDA NO RELATRIO DO CRYSTAL REPORTS........................................ 107 CDIGO 50. ENVIO DE VALOR PARA UMA FRMULA DO CRYSTALREPORT .............................................................. 108 CDIGO 51. FILTRAGEM DE DADOS NO CRYSTALREPORTS ATRAVS DO VISUAL BASIC.............................................. 108 CDIGO 52. CDIGO PARA IMPRESSO DIRETA DO RELATRIO SEM VISUALIZAO PRVIA NO CRYSTAL REPORTS. ........... 108 CDIGO 53. CDIGO PARA VISUALIZAR UM RELATRIO. .................................................................................. 109 CDIGO 54. CDIGO PARA EXPORTAR UM ARQUIVO NO FORMATO DO WORD. ........................................................ 110 CDIGO 55. EXPORTANDO UM ARQUIVO PARA UMA MENSAGEM DE E-MAIL............................................................. 111 CDIGO 56. CDIGO DO CONTROLE ACTIVEX PARA ESPECIFICAR E RETORNAR AS PROPRIEDADES. ............................... 114 CDIGO 57. CDIGO PARA EXIBIR A ARQUIVO DE AJUDA ESPECFICO ATRAVS DA API WINHELP NO CONTROLE ACTIVEX. . 114

Microsoft Visual Basic ndices de tabelas

XI

ndice de Tabelas
TABELA 1. CONTROLES BSICO E SUAS DESCRIES. ..........................................................................................4 TABELA 2. TIPO DE VARIVEIS SUA CAPACIDADE DE USO. .....................................................................................6 TABELA 3. SUGESTO DE PREFIXO PARA IDENTIFICAO DO TIPO DE VARIVEL...........................................................7 TABELA 4. FUNES INTERNAS DO VISUAL BASIC PARA CONVERSO DE DADOS. .........................................................7 TABELA 5. PREFIXOS PARA NOMES DOS OBJETOS MAIS UTILIZADOS EM APLICAO (SUGESTO DA MICROSOFT E DO AUTOR) 14 TABELA 6. PRINCIPAIS PROPRIEDADES DE UM FORMULRIO.................................................................................16 TABELA 7. CONSTANTES, VALORES E DESCRIO DO PROPRIEDADE VIEW DO CONTROLE LISTVIEW. ...............................28 TABELA 8. PROPRIEDADES DO CONTROLE LISTVIEW. ........................................................................................29 TABELA 9. CONSTANTES, VALORES E DESCRIO DA PROPRIEDADE STYLE DO CONTROLE STATUSBAR.............................31 TABELA 10. AS CONSTANTES PARA
RELATIONSHIP SO: ....................................................................................36

TABELA 11. CONTROLES PARA O PROJETO IDADE. ............................................................................................39 TABELA 12. CONTROLES PARA EXIBIR AS VERSO E AS INFORMAES DE UM PROJETO. ...............................................41 TABELA 13. PRINCIPAIS FUNES NUMRICAS UTILIZADAS PELO VISUAL BASIC E A DESCRIO. ....................................45 TABELA 14. TIPOS DE DADOS UPORTADOS PELO JET E PELA A SQL ......................................................................49 TABELA 15. TIPOS DE DADOS SUPORTADOS PELO BANCO DE DADOS ACCESS ............................................................53 TABELA 16. THE OPENDATABASE METHOD SYNTAX HAS THESE PARTS....................................................................57 TABELA 17. TIPO DE GRFICO A SEREM EXIBIDOS PELA PROPRIEDADE CHARTYPE, SUAS CONSTANTE E VALORES.................69 TABELA 18. ERROS GENRICOS RELACIONADOS OPERAO DE BANCO DE DADOS ....................................................76 TABELA 19. ERROS RELACIONADOS A BLOQUEIO DE REGISTROS ...........................................................................76 TABELA 20. ERROS RELACIONADOS A PERMISSES ...........................................................................................77 TABELA 21. STRINGS UTILIZADAS PELO ARQIVO SETUP.LST AS STRINGS EQUIVALNTES NO INNO SETUP COMPILER..............83

Microsoft Visual Basic Dedicatria e Agradecimentos

XIII

Dedicatria
Dedico a presente obra a DEUS, pela concesso de minha vida, a minha me por aceitar est tarefa rdua, a minha filha pela pacincia e por suportar as incansveis e exageradas hora que fico na frente do computador. William Costa Rodrigues

Agradecimentos
A todos aqueles que direta ou indiretamente participaram e incentivaram-me na confeco da presente obra. Meus humildes e sinceros agradecimentos. William Costa Rodrigues

Microsoft Visual Basic Introduo

1. INTRODUO
O Microsoft Visual Basic uma poderosa linguagem de programao, e tem uma grande vantagem em relao s outras linguagens, por ser do mesmo fabricante do sistema operacional Microsoft Windows tem uma maior integrao com o mesmo. Outra vantagem e que os programas gerados pelo Visual Basic, para serem ser executados necessitam da biblioteca Msvbvm50.dll ou Msvbvm60.dll e outros arquivos de extenso de aplicativos. Na prtica a vantagem o seguinte, os programas tm tamanhos menores e so executados, compartilhando este arquivos (bibliotecas e ActiveX). As interfaces de usurio grficas, ou GUIs (pronuncia "gis", do Ingls Graphic Interfaces User), revolucionaram a indstria da microinformtica. Elas demonstram que a frase "Uma figura vale por mil palavras" verdadeira para a maioria dos usurios de computadores. Em lugar do estranho prompt do DOS C:> que os usurios observavam durante muito tempo (e que assustou muitos deles), voc presenteado com uma rea de trabalho cheia de cones e com programas que utilizam mouse e menus. Embora alguns programadores tenham apresentado sentimentos contraditrios a respeito das GUIs, os iniciantes gostam delas, e assim de se esperar que os programas Windows sejam baseados no modelo GUI (e que tenham a aparncia e proporcionem a sensao certa). Portanto , se voc precisar desenvolver um programa para qualquer verso Windows, desejar Ter uma ferramenta para desenvolver com eficincia aplicativos fundamentados em GUIs, e o Visual Basic a ferramentas mais indicada, por possui facilidade na sntese de cdigo e interface amigvel, prxima dos aplicativos do Windows. Os exemplos e dicas aqui exibidos so de parte de exemplos de livros, do Help do Visual Basic, dicas da Internet (VBAccelerator.com www.vbaccelerator.com de Steve MacMahon, vbbrasil.com www.vbbrasil.com.br, VBMania www.vbmania.com.br, Jos Carlos Macorati Site Pessoal www.macoratti.net e etc.). Uma recomendao bastante pertinente para que pretende programar por em dia o Ingls, pois todos os comandos os arquivos de ajuda (Help) e a maioria da documentao para as linguagens de programao esto em Ingls. Outra recomendao sempre que possui dvidas acesse o arquivo de Ajuda ou o Books Online que vm junto com o Visual Basic. Para quem no possui uma verso registrada do Microsoft Visual Basic poder adquirir gratuitamente no site da Microsoft a verso mais simplificada: Visual Basic Control Create. Apesar de muito bsica possvel criar executveis simples e componentes ActiveX, com a mesma facilidade das outras verses (Standard, Professional e Enterprise).

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Microsoft Visual Basic Conceitos Bsicos do Visual Basic

2. CONCEITOS BSICO DO VISUAL BASIC


Se voc j est familiarizado com o Visual Basic pode passar para o prximo captulo, pois o captulo atual visa fazer uma introduo do Visual Basic para os iniciantes. 2.1. Interface do Visual Basic O Visual Basic Possui uma interface amigvel com o padro MDI (Multiple Document Interface), porm possvel trabalhar com uma interface SDI (Single Document Interface), atravs do menu Tools > Options > Advanced.

Figura 1. Interface MDI (Mutiple Document Interface) do Visual Basic 6.0

Figura 2. Interface SDI (Single Document Interface) do Visual Basic 6.0

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

2.2. Controle Bsico O Visual Basic ao ser carregado apresenta uma barra de ferramenta a esquerda da tela contendo 19 controles padro, que fazem parte da Biblioteca do VB (MSVBVM50.dll v5.0 ou MSVBVM60.dll v6.0, em sntese a biblioteca significa MicroSoft Visual Basic Virtual Machine verso do VB, ou seja, Mquina Virtual do MicroSoft Visual Basic). Eles podero ser utilizados e no momento da distribuio do aplicativo, tambm dever ser distribuda biblioteca (MSVBVMx0.dll, onde x a verso do VB). A nica exceo o controle Data, que necessita da biblioteca DAO (Data Access Objects, ou seja, Acesso a Objetos de Dados. Tabela 1. Controles bsicos e suas descries. Img Controle/Descrio Pointer No verdade no se trata de um Controle, mas sim uma ferramenta que serve para dimensionar e mover Controles. PictureBox Permite exibir figuras (bmp, ,jpg, gif, wmf, emf) e cones. Label Etiqueta ou rtulo, exibe um texto para identificao outros controles no formulrio. TextBox Este controle permite ao usurio digitar texto. Frame Moldura utilizada para agrupar controles dentro de um formulrio. CommandButton Controle que permite o usurio realizar uma operao, atravs de linhas de comando pr-determinadas. CheckBox Pode assumir valores falso ou verdadeiro. Em um mesmo Formulrio vrios CheckBox's podem assumir o valor verdadeiro ao mesmo tempo. OptionButton Pode tambm assumir valores falso/verdadeiro, mas em um mesmo Formulrio somente um OptionButton pode assumir o valor verdadeiro. ComboBox Combina caixa de texto com caixa de listagem. O usurio pode digitar a informao como tambm pode encolher da lista. ListBox Exibe uma lista de itens que o usurio pode selecionar. HScrollBar e VScrollBar Permite selecionar com o mouse um determinado valor numa faixa de valores. Timer Controla intervalos de tempo determinados pelo programador em milisegundos. DriveListBox Exibe os drivers do computador. DirListBox Exibe as pastas (diretrios) do computador. FileListBox Exibe os arquivos de uma pasta (diretrio). Shape Permite exibir vrias formas geomtricas num formulrio. Line Permite traar linhas dentro do formulrio. Image Permite exibir figuras (bmp, jpg, gif, wmf, emf) e cones, ainda permitindo que seja dimensionado de acordo com a necessidade do programador. Data Permite acessar diversas base de dados. OLE permite incorporar objetos ou arquivos no formulrio.

Microsoft Visual Basic Conceitos Bsicos do Visual Basic

2.3. Controles Personalizados As verses Professional e Enterprise permitem que o programador utilize controle personalizados, que so os ActiveX, que possuem funes especficas de acordo com o controle. Alguns do mais utilizados so RichTextBox, CommomDialog, Toolbar, StatusBar, ProgressBar; TreeView, ListView, ImageList, Slider, MSChart, entre outros. Cada um possui sua funo especfica. Deste modo atendendo as necessidades do programador. Para acessar os controle personalizados no Visual Basic, basta clicar Project > Components... ou pressionar "Control+T". Existe uma infinidade de ActiveX no diretrio do sistema (em geral C:\Windows\System) que podero ser utilizados, caso o ambiente suporte tal componente ou se ela estiver registrado no sistema. Alm disto o programador poder adquirir componentes personalizados elaborados por empresas de Software ou na Internet (gratuitamente). O Visual Basic permite que o usurio avanado elabore seus prprios controles, deste modo atendendo mais ainda as necessidades especficas do programador, maiores detalhes sero vistos no Captulo 4. 2.4. Tipos de Projetos O Visual Basic permite nas verses Professional e Enterprise diverso tipos de projeto. A seguir consta a descrio de cada projeto: Standard EXE Este o projeto padro. Atravs do qual o programador inicia um novo projeto baseado na construo de um aplicativo executvel comum; ActiveX EXE Este projeto permite que o aplicativo gerado possa de utilizado ou distribudo pela Internet; ActiveX DLL Este tipo de projeto permite a criao de executveis do tipo DLL (Dynamic Link Libary, ou seja Biblioteca de Vnculo Dinmico). Sua construo permite a utilizao dos cdigos nela construdos, em projeto futuros; ActiveX Control Permite a criao de controles personalizados de acordo com a necessidade de funes e controles para outros projetos, minimizando assim o excesso de programao; VB Application Wizard Este projeto dispara o assistente de criao de aplicativos do Visual Basic, permitindo a criao de formulrios chaves de uma aplicao como a tela de entrada SplashScreen, formulrio das informaes do sistema, vnculo com base de dados, ente outros; VB Enterprise/Professional Edition Controls Este tipo de projeto permite que o programador elabore um aplicativo com base em todos os controles disponveis para as verses Professional e Enterprise; Addin Permite a elaborao de Add-ins que podero ser utilizados pelo Visual Basic, para automatizar tarefas repetitivas e/ou complexas; ActiveX Document DLL Permite criar DLLs do tipo ActiveX que podem ser utilizadas na Internet para exibir ou capturar dados; ActiveX Document EXE Permite que seja criado documentos para utilizao na Internet.

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 3. Tela de seleo de um novo projeto, com os diversos modelos. 2.5. Tipo de Variveis O Visual Basic trabalha com 8 tipo de variveis fixas que possuem caractersticas prprias de tamanho e forma de uso. Porm voc poder criar variveis temporrias para atender suas necessidade. A seguinte demonstra o nome das variveis e a capacidade de dados de cada uma. Tabela 2. Tipo de variveis sua capacidade de uso. Tipo de Varivel Boolean Byte Currency Date Double Integer Long Single String Variant Capacidade True ou False 0 a 256 -922.337.203.685.477,5808 a -922.337.203.685.477,5807 Qualquer expresso de data vlida. (Valores negativos) -1,79769313486232 E-308 a -4,94065645841247 E-324 (Valores positivos) 4,94065645841247 E-324 a 1,79769313486232 E-308 -32.768 a 32.767 -2.147.483.648 a 2.417.483.647 (Valores negativos) -3,402823 E-38 a -1,401298 E-45 (Valores positivos) 1,401298 E-45 a 3,402823 E-38 Qualquer tamanho

2.6. Declarando Variveis no Visual Basic As variveis do Visual Basic (como visto no Tpico 2.5), podem ser declaradas dentro de eventos ou procedimentos. Quando o programador declara uma varivel com Dim, esta ser eliminada da memria, quando o evento finalizar, entretanto se a varivel for declarada como Public, est permanecer na memria at que a aplicao seja finalizada. Duas outras formas de declarar uma varivel so atravs dos argumentos Private (que restringe a varivel a um Form/Module/Class) ou atravs de Global que possui a mesma amplitude de Public.

Microsoft Visual Basic Conceitos Bsicos do Visual Basic

Alguns padres podero ser seguidos para facilitar a identificao do tipo de varivel, o seja, antes do nome da varivel o programador poder inserir uma letra ou duas letras que identifique o tipo de varivel. Veja uma sugesto na Tabela 3. Tabela 3. Sugesto de prefixo para identificao do tipo de varivel. Tipo de Varivel Boolean Byte Currency Date Doubl Integer Long Single String Variant Letra/Prefixo b by c dt d i l sg s v Exemplo bFinalizar byLetter cReal dtAniversario dJuros iIndice lTitulo sgLetra sEndereco vCEP

Public sNome As String 'Varivel pblica declarada como String Private lTitle As Long 'Varivel pblica declarada como Long Dim vCEP as Variant 'Varivel privada a um evento declarada como Variant Global sEndereco as String 'Varivel global declarada como String Cdigo 1. Exemplo de Declarao de variveis no Visual Basic. Se o programador no especificar o tipo de varivel o Visual Basic atribuir o tipo Variant a varivel. Para exigir que as variveis sejam sempre declaradas, nas declaraes da janela Code sempre insira Option Explicit. Uma forma mais fcil e acionar esta opo automaticamente, para que toda vez que o programador exibe a janela Code pela primeira vez seja inserida esta string. Para tal clique em no meu Tools > Options, na aba Editor (primeira) marque a opo Require Variable Declaration, clique em OK para confirmar. A vantagem desta opo que o Visual Basic verifica a sntese de cada varivel e impede que uma varivel seja utilizada sem antes ser declarada. 2.7. Convertendo Dados O Visual Basic possui funes internas de converso de dados, o que facilita e muito a vida de um programador, pois hora necessrio que uma varivel possua dados longos outra hora dados do tipo String. Entretanto cuidado no momento de converter os dados pois fica um tanto quanto incoerente converter um dado string para um dado byte. A Tabela seguinte exibe a funes e suas respectivas descries. Tabela 4. Funes internas do Visual Basic para converso de dados. Funo CInt CLng CSng CDbl CCur CStr CVar Transforma Transforma Transforma Transforma Transforma Transforma Transforma Descrio uma expresso numrica em um nmero inteiro por arredondamento. uma expresso numrica em um inteiro longo por arredondamento. uma expresso numrica em preciso simples. uma expresso numrica em preciso dupla uma expresso numrica em moeda. qualquer expresso string. uma expresso variante.

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Funo CBool CByte CDate

Descrio Transforma uma expresso em booleana (verdadeira/falsa) Transforma uma expresso numrica em um byte. Transforma uma expresso compatvel em uma data vlida.

2.8. Exerccios 1. Quais controles abaixo so bsico da biblioteca padro do Visual Basic? ( ) PictureBox ( ) RichTextBox ( ) ProgressBar ( ) Image ( ) Label ( ) TabStrip ( ) Timer ( ) ListBox

( ) OLE ( ) ComboBox

2. De acordo com as funes dos componentes bsicos da biblioteca do VB, assinale V (verdadeiro) ou F (Falso), para as funo especificadas abaixo: ( ) Line - Permite traar linhas dentro do formulrio. ( ) Shape permite traar linhas e caixas de texto no formulrio. ( ) Frame Moldura utilizada para agrupar controles dentro de um formulrio. ( ) OptionButton Pode assumir valores falso ou verdadeiro. Em um mesmo Formulrio vrios OptionButton's podem assumir o valor verdadeiro ao mesmo tempo. ( ) CheckBox Pode tambm assumir valores falso/verdadeiro, mas em um mesmo Formulrio somente um CheckBox pode assumir o valor verdadeiro. ( ) DriveListBox Exibe os drivers do computador. ( ) DirListBox Exibe as pastas (diretrios) do computador. ( ) FileListBox Exibe os arquivos de uma pasta (diretrio). De acordo com os tipos de projeto do Visual Basic qual dos tipos encaixa-se na descrio seguinte: "Permite a criao de controles personalizados de acordo com a necessidade de funes e controles para outros projetos, minimizando assim o excesso de programao" ( ) StandardEXE ( ) ActiveX EXE ( ) ActiveX Control ( ) AddIn 4. Defina o projeto do tipo StandardEXE. ________________________________________________________________________________ ________________________________________________________________________________ 5. Qual das variveis do Visual Basic, listadas abaixo, retorna o valor verdadeiro/false (True/False). ( ) String ( ) Variant ( ) Boolean ( ) Long ( ) Integer ( ) Single 6. Qual das variveis do Visual Basic, listadas abaixo, retorna o maior valor numrico. ( ) Byte ( ) Variant ( ) Boolean ( ) Long ( ) String ( ) Single 7. Qual das variveis do Visual Basic, listadas abaixo, retorna o menor valor numrico. ( ) Integer ( ) Variant ( ) Byte ( ) Long ( ) String ( ) Single 8. Declare uma varivel publica (Public) do tipo String, atribua uma valor a esta varivel e por fim converta esta para uma varivel longa (Long) 3.

Microsoft Visual Basic Estrutura de uma Aplicao

3. ESTRUTURA DE UMA APLICAO


Uma aplicao em Visual Basic um conjunto de elementos (formulrios, mdulos, classes, etc.) contendo diversas instrues que orientam o computador na realizao de determinadas tarefas. Essas instrues encontram-se devidamente organizadas numa estrutura lgica bem definida, como veremos a seguir, e, quanto mais complexa for a aplicao maiores os cuidados devem ser tomados com essa estrutura. O desenvolvimento de uma aplicao obedece a algumas etapas importantes, geralmente bem distintas. A primeira delas a criao de uma interface, isto , um conjunto de elementos que permitir a comunicao do aplicativo com o usurio. Nesta etapa, deve ser definido, como o usurio ir interagir com a aplicao e, para isso, programador precisa criar os formulrios e desenhar os componentes (controles) que permitiro a interao usurio-aplicao. O primeiro passo ao desenvolver um aplicativo em Visual Basic planejar o que ser visto pelo usurio final, ou seja, projetar as telas. Quais os menus devero conter na aplicao? Qual dever ser o tamanho das janelas (formulrios) a serem exibidas pelo programa? Quantas janelas dever possuir o aplicativo. O usurio dever ser capaz de redimensionara a janela? Onde devero ser desenhados os controles (botes, caixas de texto, etc.)? Quais sero os controles necessrios para que o aplicativo possa desempenhar as funes a que se propem?. Bom, entre outras infinitas perguntas que podero surgir a medida que o programador interage com a linguagem de programao. Na Figura 04, est um exemplo de um organograma simplificado de uma aplicao bsica. Aps projetar a interface o segundo passo escrever os cdigos para ativar a interface visual que foi previamente elaborada. Os objetos no Visual Basic iro reconhecer eventos como clique do mouse. A maneira pela qual os objetos iro responder a esses eventos depender do cdigo que o programador escreveu. O exemplo a seguir exibe o formulrio frmMain a partir do procedimento Main, contido num mdulo (Module) Public Sub Main() frmMain.Show End Sub Cdigo 2. Procedimento para exibio do formulrio frmMain. Grande parte do cdigo de programao em Visual Basic que informa ao programa como responder a eventos como um clique do mouse ocorre no que o Visual Basic chama de procedimentos de eventos (ou procedures de eventos). Um procedimento de evento nada mais que o cdigo necessrio para informar ao Visual Basic como responder a um evento. Essencialmente, tudo o que executvel em um programa Visual Basic um procedimento na realizao de sua tarefa. evidente que o terceiro e quarto passo na construo de um aplicativo, consiste em localizar e tratar o erros no cdigo (depurao) e depois corrigi-los. Eis um resumo dos passos que um programador poder adotar na construo de um aplicativo com o Visual Basic: 1. Personalizar as janelas que sero exibidas para o usurio; 2. Decidir quais os eventos que os controles na janela devem reconhecer; 3. Escrever os procedimento de eventos (procedures) para aqueles eventos e os prcedimentos subsidirios que fazem funcionar tais procedimentos de eventos. Quando o aplicativo for executado, acontecer o seguinte: 1. O Visual Basic monitora as janelas e os controles em cada janela para todos os eventos que cada controle consegue reconhecer (movimentos do mouse, cliques, teclas, etc.); 2. Quando o Visual Basic detecta um evento, caso no haja uma resposta intrnseca ao evento, o Visual Basic examina o aplicativo para ver se o programador escreveu um procedimento (procedure) para tal evento;

10

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

3. Se o programador escreveu o procedimento (procedure), o Visual Basic executa o cdigo que forma tal procedimento de evento e volta para o passo 1. Se o procedimento (procedure), no for localizada o Visual Basic, gera um erro. Devemos ressaltar que existem vrios padres adotados por programadores para nomear os controles ou objetos que fazem parte de uma aplicao, porm ideal que a equipe de programao possua um padro de nomeao os objetos ou controles. A Tabela 5 apresenta o padro de prefixos para os nomes dos objetos mais utilizados em uma aplicao. Uma das informaes mais importantes para o programador que est iniciando, que o hbito de consultar a ajuda do Visual Basic dever ser constante, pois assim as dvidas podero ser sanadas em tempo muito curto. Outra forma de sanar estas dvidas adquirindo bibliografia a respeito do assunto (Visual Basic). Devemos lembrar que o programador dever ter pelo menos uma noo de INGLS, pois toda documentao que acompanha o Visual Basic em ingls, e a maioria da bibliografia do mercado, pelo menos as mais sofisticadas, esto no idioma Ingls. Felizmente com a popularizao da linguagem vrios livros e tutoriais so encontrados em portugus, no caso dos tutoriais possvel encontra-los vastamente na WEB. 3.1. Estruturas de Programao do Visual Basic1 Aqui ser apresentado s principais estruturas de programao da linguagem. Dominando estas estruturas, voc poder escrever programas mais simples e concisos e, muitas vezes, diminuir consideravelmente o nmero de instrues e comandos para executar a mesma tarefa e consequentemente o tamanho do aplicativo/componente. 3.1.1. Tipos de Estruturas de Linguagem As estruturas de utilizadas para se escrever cdigos no Visual Basic 5 ou 6 so normalmente divididas em dois tipos distintos: estruturas de tomada de deciso e estrutura de loop (ou lao).

3.1.1.1. Estrutura de Tomada de Deciso: Estas estruturas so utilizadas durante o fluxo do programa para permitir a execuo de diferentes tipos de cdigos, de acordo com o contexto atual em que o usurio do seu programa se encontra.
3.1.1.1.1 IF... Then... Else If <condio 1> = verdadeiro Then Declarao 1 ElseIf <condio 2> = verdadeiro> Then Declarao 2 Else Declarao 3 End If Considerada a mais tradicional estrutura de linguagem (Se... Ento... Seno), esta instruo avalia o contedo da <condio 1> e, se ela for verdadeira, executa as Declarao 1 contida entre a linha If e a primeira instruo Else ou ElseIf (se houver alguma). Caso contrrio, pula para a prxima clusula ElseIf <condio2> Then, para avaliar a <condio 2>, caso ela seja verdadeira a Declarao 2, ser executada (Se houver alguma), caso contrrio a instruo executar a clusula Else (seno) da expresso.

Baseado na obra Morgado, F. 1998. Visual Basic 5, mtodo rpido

Microsoft Visual Basic Estrutura de uma Aplicao

11

3.1.1.1.2 IIF Varivel=IIF(<condio>, <valor true>, <valor false>) Considerada uma variante da funo anterior, tambm chamada de Se Imediato nas verses em Portugus do Microsoft Access e Excel, est instruo permite que o programador coloque uma instruo If... Then... Else End If em uma nica linha de cdigo, permitindo que atribua diferentes valores a variveis ou objetos, dependendo do resultado da expresso. Esta instruo avalia o valor da clusula <condio> e se o valor for verdadeiro, retorna para varivel o resultado da expresso contida na clusula <valor true>. Caso o resultado de <condio> seja falso, <varivel> preenchida com o valor da clusula <valor false>. 3.1.1.1.3 Select Case Select Case <condio> Case <resultado 1> Declarao 1 Case <resultado 2> Declarao 2 Case Else Declarao 3 End Select Considerada uma variante estrutura If... Then... Else, a instruo Select Case permite que o programador faa apenas um teste <condio> no incio da instruo Select Case e tome vrias decises dependendo do valor retornado. Esta instruo geralmente utilizada quando existem inmeras possibilidades de tratamento do valor gerado pela clusula <condio>, como o caso das rotinas de tratamento de erro em tempo de execuo ou ativao de botes de uma ToolBar (Barra de Ferramentas), onde nesse caso a resultado geralmente o valor Key ou o valor Index de cada boto. Verifique que esta estrutura oferece uma sada caso nenhum valor retornado (resultado) seja verificado pelos Case's da instruo, assim o valor retornado poder ser atribudo na expresso Case Else (Declarao 3).

3.1.1.2. Estrutura de Loop As estruturas de loop (ou lao) so utilizadas para permitir que um mesmo conjunto de instrues seje executado continuamente, at que uma determinada condio seja satisfeita.
3.1.1.2.1 For... Next For... <contador> = <comeo> To <fim> Step <passo> Declarao Next <contador> Esta estrutura de lao permite que voc execute todas as instrues contidas dentro de For... Next, por um nmero de vezes definido entre o valor <comeo> e o valor <fim>, contandose as interaes de acordo com o argumento opcional Step <passo>. O valor do contador no poder ser uma varivel Boolean (Boleana) ou uma array. Exemplo: O lao For... Next..., abaixo, faz com que a varivel IntJ sela incrementada de 1 a t 100, de 5 em 5 unidades (forando a execuo do lao por 20 vezes consecutivas): Dim IntJ as Integer For IntJ = 1 To 100 Step 5 <executar as instrues> Next IntJ

12

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

A especificao do nome da varivel contadora dentro da clusula Next ( como Next IntJ opcional) opcional basta escrever Next para fechar o lao. No entanto, ela melhora significativamente a compreenso do cdigo e, portanto, amplamente recomendada. 3.1.1.2.2 Do... Loop Do Declarao Loop A instruo Do... Loop convencional executada continuamente. Voc deve colocar uma condio de teste no interior do lao, atravs de uma instruo If... Then... Else, para fazer com que ela termine sua execuo, enviando uma instruo do tipo Exit Do. Exemplo: No exemplo a seguir, a instruo Do... Loop executada continuamente, ate que o valor da varivel fCancelar seja verdadeiro. Do DoEvents If fCancelar Then Exit Do End If Loop Muito cuidado na hora de utilizar uma instruo Do... Loop, pois se o valor que determina o final do lao no for alcana o lao seja executado infinitamente, fazendo com que a aplicao seja paralisada, provocando um Bug, consequentemente travando o computador. As estruturas Do... Loop possuem diversas variantes e so utilizadas para fazer com que o cdigo seja executado seguidamente, at que uma determinada condio seja verdadeira. Esta condio pode ser testada no incio ou no fim do lao, e normalmente utilizada com as clusulas While (enquanto) ou Until (at). 3.1.1.2.3 Do While... Loop Do While <condio> Declarao Loop Nesta variante, as instrues dentro do lao Do... Loop sero executadas enquanto (While) o valor de <condio> for verdadeiro. Isto significa que, se o valor de <condio> for falso antes do incio do lao, as declaraes contidas em seu interior no sero executadas. 3.1.1.2.4 Do Until... Loop Do Until <condio> Declarao Loop Apesar desta instruo ser muito semelhante a anterior anterior, o teste feito em um momento diferente. Neste caso, o lao ser executado at que o valor <condio> seja verdadeiro, o que inverte a situao anterior, ou seja, as declaraes no interior do lao sero executadas apenas se o valor de <condio> for falso.

Microsoft Visual Basic Estrutura de uma Aplicao

13

3.1.1.2.5 While... Wend While <condio> Declarao Wend Esta estrutura bastante semelhante a estrutura Do While... Loop. A diferena entre elas consiste no fato de que While... Loop menos flexvel do que um lao Do... Loop convencional, no permitindo, por exemplo, sair prematuramente do lao em uma instruo Exit Loop. Alm disso, a estrutura While... Wend sempre executa o teste <condio> no incio do lao. 3.1.1.2.6 For Each... Next For Each <objeto> In <Colao> Declarao Next Esta estrutura permite que voc caminhe por todos os objetos de uma coleo ou matriz (varivel do tipo array). Exemplo: No exemplo a seguir, voc pode utilizar a estrutura For... Each para alterar a propriedade Enabled (ativado) de todos os controles do tipo TextBox (Caixa de Texto) do formulrio frmMain, tornando-os indisponveis. For Each ctl In frmMain If TypeOf ctl Is TextBox Then ctl.Enabled = False End IF Next A clusula For... Each cria automaticamente uma varivel chamada ctl (uma abreviao de control ou controle), e faz um lao por todos os controle do formulrio frmMain, desativando todas as caixas de texto, sem importar quantas elas so. Verifique que o teste para saber se o controle mesmo uma caixa de texto (TextBox), realizado pela clusula If TypeOf Is TextBox Caso o valor retornado seja verdadeiro o controle testado desabilitado, ou seja, o controle uma caixa de texto, se o controle for um boto (CommandButton) este no ser desabilitado pois no um TextBox. 3.1.1.2.7 With... End With With <coleo> Declarao End With Esta estrutura permite que o programador referencie diretamente cada elemento ou propriedade de uma coleo (ou matriz), sem a necessidade de especificar o caminho completo (ou ndice) para cada elemento da coleo. A estrutura With... End With, muito utilizada para permitir a alterao de diversas propriedades de um nico controle ou formulrio do Visual Basic ou Access. Exemplo: para alterar diversas propriedades de uma Caixa de Texto (TextBox) chamada txtxValorTotal, utiliza-se a estrutura With... End With, da seguinte forma: With txtValorTotal .Locked = False .MaxLenght = 30

14

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

.TabStop = True .Visible = True End With

3.1.1.3. Saindo das Estruturas de Loop Algumas vezes voc pode precisar terminar abruptamente a execuo de uma estrutura de lao antes de a condio testada ser verdadeira. No caso da estrutura For... Next, voc pode utilizar uma instruo Exit For dentro do lao, para que a instruo que segue a clusula Next seja imediatamente executada. J nas estruturas Do... Loop utilize a instruo Exit Do. Isto far com que a instruo que segue a clusula Loop seja imediatamente executada. Devemos lembrar que Exit Loop, no funcionara na clusula While... Wend.
3.2. Formulrios e Controles Cada formulrio de uma aplicao gravado em um arquivo com sees bem-definidas uma seo rene o cdigo que define os objetos apresentados em tela e a configurao de suas propriedades, outra seo contm as declaraes das variveis e objetos no visuais utilizados pelo formulrio e, finalmente, uma outra seo inclui o cdigo das rotinas de eventos, alm das rotinas e funes escritas pelo programador para uma determinada finalidade. O formulrio visualizado em uma tela possui uma interface grfica, que carregada pelo VB a partir do arquivo padro som extenso FRM. Alm da interface grfica os formulrios (Forms) possuem instrues (cdigo) para execuo e tarefas, pr-determinadas pelo programador. Um formulrio possui propriedades, para sua definio visual, mtodos, que definem seu comportamento e eventos, relativos interao como usurio. As propriedades podem ser definidas na fase de desenho (Design Time) atravs da janela de propriedades (Figura 05) ou tambm durante a execuo da aplicao (Run Time), porm existem algumas propriedades que so somente leitura (Read Only) em tempo de execuo (Run Time). Caso alguma seqncia de cdigo seja definida para um determinado evento, ela ser automaticamente disparada quando este ocorrer, j os mtodos so funes intrnsecas ao formulrio e, se invocadas em determinada linha de comando (cdigo), podem ser acessadas somente durante a execuo da aplicao pelo disparo de algum evento. Tabela 5. Prefixos para nomes dos objetos mais utilizados em aplicao (Sugesto da Microsoft e do Autor) Objeto/Componente "Outline" Abas (TabStrip) rvore de visualizao (TreeView) Barra de Ferramentas (ToolBar) Barra de rolagem horizontal (HscroolBar) Barra de rolagem plana (FlatScroolBar) Barra de rolagem vertical (VScroolBar) Barra de Status Boto de comando (CommandButton) Boto de opo (OptionButton) Caixa de Dilogo (CommonDialog) Caixa de Listagem (ComboBox) Caixa de listagem de Banco de dados (DBCombo) Caixa de listagem de imagens (ImageCombo) Prefixo out tab tvw tlb hsb fsb vsb stb cmd opt cdl cbo ou cmb dbc icb ou cbi Exemplo outChart tabDados tvwNome tlbMain hsbPicture fsbTextBox vsbPicture stbMain cmdClose optSend cdlOpenFile cboName dbcState icbIconSmall

Microsoft Visual Basic Estrutura de uma Aplicao

15

Objeto/Componente Caixa de Mscara (MaskEditBox) Caixa de Texto (TextBox) Caixa de texto formatado (RichTextBox) Caixa de Verificao (CheckBox) Contador de tempo ou temporizador (Timer) Controle de animao (Animation) Controle de Dados (DataControl) Controle de grfico (MSChart) CoolBar DTPicker Figura (PictureBox) Forma (Shape) Formulrio (Form) Formulrio MDI (MDIForm) Grade (Grid) Grade do Bando de Dados (DBGrid) Imagem (Image) Legenda (Label) Linha (Line) Lista (Listbox) Lista de arquivos (FileListBox) Lista de diretrios (DirListbox) Lista de Drive (DriveListBox) Lista de imagens (ImageList) Lista de visualizao (ListView) Listagem de Banco de dados (DBList) Menu Mdulo (Module) Mdulo Classe (Class Module) Moldura (Frame) MothView MS Flex Grid MS Tab OLE Pgina de propriedades (Property Page) Painel Tridimensional (3D Panel) ProgressBar (Barra de progresso) Relatrio (DataReport) Resource File Slide (Slider) UpDown User Control

Prefixo msk txt rtf chk tmr ani dat ou dtc grf clb dtp pic shp frm mdi grd dbg img lbl lnh lst flb drl dvl iml lvw dbl mnu ou smnu mod cls fra mvw fgd tab ole ppg pnl pbr drp res sld upd ctl

Exemplo mskPhone txtName rtfFile chkSaveSetting tmrShowAll aniAviFile datDBase grfDBase clbMain dtpMonth piclogo shpSquare frmMain mdiMain grdName dbgTitle imgIcon lblTitle lnhVertical lstEmail filBitmap drlSource dvlSource imlIcons32 lvwTitles dblAuthor mnuFile ou smnuProperty modAPIs clsTypeFile fraTitles mvwCalendar fgdAuthor tabConfig oleWord ppgFont pnlGroup pbrLoadfile drpTitles resIcons sldConfig updCopies ctlButton

16

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Os formulrios possuem vrias propriedades como segue na Tabela 6. Tabela 6. Principais propriedades de um formulrio. Propriedade (Name) Apparence BackColor BorderStyle Caption ControlBox Enabled Font Fore Color Height Icon Left MaxButton MDIChild MinButton MouseIcon MousePointer Moveable Picture StartUpPosition Top Visible Width WindowState Descrio Define o nome do formulrios (vide prefixos de nome de objetos Quadro 4) Define a aparncia do formulrio se 0 Flat ou 1 3D Define a cor do fundo do formulrio Define o tipo borda que o formulrio exibir: 0 None; 1 Fixed Single; 2 Sizable; 3 Fixed Dialog Define o texto que ser exibido na barra de ttulo do formulrio Define se o formulrio ir exibir ou no os botes de minimizar, maximizar, fechar e o cone da janela. Define se o formulrio estar ativo ou no Define a fonte que o formulrio ir exibir Define a cor da fonte no formulrio Define a altura do formulrio Define o cone que o formulrio exibir Define a posio a esquerda do monitor que o formulrio ir se posicionar Exibe ou oculta o boto fechar do formulrio Define se o formulrio ser "Child - filho" ou no de uma formulrio MDIForm Exibe ou oculta o boto minimizar do formulrio Exibe o cursor personalizado do formulrio Exibe o cursor do formulrio: 0 Default; 1 Arrow; 2 Cross; 3 I-Bean; 4 Icon; 5 Size; 6 Size NE SW; 7 Size N S; 8 Size NW SE; 9 Size W E; 10 Up Arrow; 11 Hourglass; 12 No Drop; 13 Arrow or Hourglass; 14 Arrow and Question; 15 Size All; 99 Custom Define se o formulrio ser mvel ou no Define a imagem que ser exibida no fundo do formulrio Define a posio que o formulrio ser exibido na tela: 0 Manual; 1 CenterOwner; 2 CenterScreen; 3 Windows Default Define a posio no parte superior do monitor que o formulrio ir se posicionar Define se o formulrio ser visvel ou no Define a largura do formulrio Define como o formulrio ser exibido em run time (tempo de execuo) 0 Normal; 1 Minimized; 2 Maximided Valor Padro Form1 1 3D &H8000000F& 2 Sizable Form1 True True MS Sans Serif &H80000012& 3570 0 True False True (None) 0 Default True (None) 3 Windows Default 0 True 4770 0 Normal

Alm do arquivo alfanumrico FRM, que contm as informao de propriedades, linhas de comando, eventos do formulrio dos controles inseridos nele, o VB poder gerar um arquivo binrio com extenso FRX, o qual contm informaes binrias de certas propriedades do form ou dos controles, por exemplo: cone e figura do Form, figura do PictureBox, etc. Os controles, assim como o formulrio, tambm possui propriedades, eventos e mtodos, porm muito variveis, de acordo com a finalidade do controle e do fabricante.

Microsoft Visual Basic Estrutura de uma Aplicao

17

Sistema operacional API's DL L's ActiveX's

modMa in mdulo In icial da aplicao

Mdulos Classes User Control

frmMain frmCad astro Banco de d ados controles

m enus

Imp ressora

Arqu ivo

con troles menus

Figura 4. Organograma simplificado de uma aplicao.

Figura 5. Janela de propriedades do Visual Basic. 3.3. Mdulos (Module) e Mdulos Classe (Class Module) 3.3.1. Mdulos (Module) Os mdulos padro (Module), em geral so utilizados para declarar procedimentos pblicos (procedures) e criar funes publicas, minimizando assim o trabalho de escrita de cdigos e reduzindo desta forma o tamanho do executvel final. Em geral se utiliza os mdulos padro para criar procedimentos comuns a vrios eventos que o Visual Basic ir utilizar. Por exemplo, se o programador deseja que trs botes (CommandButton) exiba o mesmo formulrio, porm com as propriedades deste forma diferente, uma funo poder substitui o exemplo do exibido no Cdigo 3, ou seja, o Cdigo 4, seria mais rpido e menos trabalhoso. Sempre que possvel recomenda-se ao programador que crie suas prprias funes com o objetivo de minimizar o trabalho rduo de declarao de eventos. Agilizar a escrita das linhas de cdigo poder facilitar a localizao de possveis erros que possam ser gerados pelo Visual Basic. Se houver erro ser mais fcil encontrar dentro de uma funo que serve de procedimento para

18

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

inmeros eventos, do que procedimentos idnticos, escritos vrias vezes ao longo das linhas de cdigos. Private Sub cmdOpcao1_Click() Form2.Caption = "Exibindo a primeira opo" Form2.BackColor = vbWhite Form2.Show End Sub Private Sub cmdOpcao2_Click() Form2.Caption = "Exibindo a segunda opo" Form2.BackColor = vbBlack Form2.Show End Sub Private Sub cmdOpcao3_Click() Form2.Caption = "Exibindo a terceira opo" Form2.BackColor = vbRed Form2.Show End Sub Cdigo 3. Cdigo extensos para alterar a propriedade Caption e BackColor, do Form2 e exibilo. Private Sub cmdOpcao1_Click() Call ShowForm(Form2, "Exibindo a primeira opo", vbWhite) End Sub Private Sub cmdOpcao2_Click() Call ShowForm(Form2, "Exibindo a segunda opo", vbBlack) End Sub Private Sub cmdOpcao3_Click() Call ShowForm(Form2, "Exibindo a terceira opo", vbRed) End Sub 'Num Mdulo, podem ser inserido na janela Code do Form Public Function ShowForm(frm As Form, sCaption As String, cColor As ColorConstants) With frm .Caption = sCaption .BackColor = cColor .Show End With End Function Cdigo 4. Cdigo mais prticos atravs da funo ShowForm para alterar a propriedade Caption e BackColor, do Form2 e exibi-lo. 3.3.2. Mdulos Classe (Class Module) Os mdulos classe (ou simplesmente Class), diferem dos mdulos padro na forma como seus dados so armazenados. Eles existem separadamente para cada instncia de classe (isto , para cada objeto criado de uma classe). Num mdulo padro, as variveis declaradas pblicas so visveis em qualquer lugar do projeto. J num mdulo classe, elas podero ser acessadas apenas se uma varivel de objeto contiver uma referncia a uma instncia particular de uma classe.

Microsoft Visual Basic Estrutura de uma Aplicao

19

Para exemplificar vamos criar um projeto StandardEXE e adiciona um modulo padro (Module) e um Class Module) ambas opes podero ser encontradas no menu Project. Adicione o cdigo a seguir em Class1: 'Uma propriedade dos objetos Class1 Public Comment as String 'Um mtodo dos objetos Class1 Public Sub ShowComment() Msgbox Comment,, sTitle End Sub No mdulo Class1, foi criado a varivel Comment que verdadeiramente uma propriedade da Class1, de maneira que temos a propriedade Comment e o mtodo ShowComment, para qualquer objeto da classe Class1. Adicione o seguinte cdigo no modulo padro Module1: 'Cdigo modulo padro publico Public sTitle as String Public Sub GetComment (ByVal c1 as Class1) c1.Comment = "Acionado por uma funo pblica" End Sub A linha de comando c1.Comment= "Acionado por uma funo pblica", altera o contedo da varivel pblica Comment, ou melhor, altera o valor da propriedade Comment de um objeto Class1. Somente a instncia, isto , o objeto passado para a rotina (ByVal c1 as Class1) ser afetado. A seguir insira dois botes (CommandButton) no From1 e adicione as seguinte linhas de cdigo na seo Declarations: Private c1Firt As Class1 Private c1Second as Class1 No evento Load do Form1, entre com as seguintes instrues estas criaro duas instncias da classe Class1: Private Sub Form_Load() Set c1First = New Class1 Set c1Second = New Class1 sTitle = "Dados pblicos de texto" End Sub Para completar a codificao, adicione as seguintes linhas de comando no evento Click dos botes de comando: Private Sub Command1_Click() Call GetComment(c1First) c1First.ShowComment End Sub Private Sub Command2_Click() c1Second.ShowComment End Sub Ao rodar o projeto, quando o Form1 for "carregado", sero criadas duas instncias de Class1, cada uma com seus prprios dados. A instruo sTitle = "Dados pblicos de texto", configura o valor da varivel pblica sTitle. Pressionando o boto Command1, ser chamada a rotina pblica e passada uma referncia para o primeiro objeto Class1 criado. A rotina pblica configura a propriedade

20

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Comment o mtodo ShowComment, ser carregado para exibir o dado do objeto. A caixa de mensagem mostra o texto "Acionado por uma funo pblica", demonstrando que a rotina pblica GetComment configurou a propriedade Comment do objeto que lhe foi passado, e que a "string" pblica est visvel dentro de Class1. O boto Command2, apensa chama o mtodo ShowComment, da segunda instncia de Class1. Os dois objetos tm acesso varivel pblica "string", mas a propriedades Comment do segundo objeto est em vazia (em branco), porque chama a rotina pblica GetComment comente da propriedade Comment alterada para o primeiro objeto.
3.4. Menu Editor Toda a aplicao necessita de menus. Po exemplo o Microsoft Word, possui cerca de 9 menus padro, contendo cada menu uma srie de submenus. Entretanto necessrio planejar bem o menus que faro parte da aplicao pois uma mau planejamento poder levar sua aplicao ao fracasso. A Figura 6, o menu editor. Iremos discutir um pouco cada campo para que voc possa saber a funo de cada um. Caption Especifica o texto que dever aparecer no menu. Para criar uma tecla de atalho associando a tecla Alt mais uma letra do valor caption, basta inserir o smbolo & antes da letra desejada. Ex.: &Arquivo, ser exibido em run-time (tempo de execuo) Arquivo. Quando o usurio da aplicao pressionara conjuntamente as teclas ALT+A o menu ser selecionado; Name Especifica o nome do menu. Este dever possuir um valor nico, ou seja, no podero existir dois ou mais menus com o mesmo nome, salvo se for atribudo valor seqencial no campo Index; Index Se for especificado um valor seqencial no campo index possvel dar a vrio menu o mesmo nome; Shortcut Especifica a tecla de atalho do menu. Somente submenus podero conter teclas de atalho de acordo com a lista do campo; HelpContextID O nmero do tpico de ajuda associado ao menu; NegotiatePosition Especifica a posio do menu; Checked Especifica se o menu ser ticado ( ) ou no; Enabled Especifica se o menu estar habilitado ou no; Visible Especifica se o menu estar visvel ou no; WindowsList Esta opo e muito importante para aplicao MDI e lista as janelas abertas pela aplicao, porm est opo dever ser especificada somente para um men; Estas setas possibilitam criar o remover uma hierarquia. Ex.. Na Figura 6 o submenu &Novo, foi criado clicando no boto , para remov-lo basta clicar no boto ; Estas setas permitem mover o menu para cima o para baixo.

Microsoft Visual Basic Estrutura de uma Aplicao

21

Figura 6. Menu Editor do Microsoft Visual Basic. 3.5. Exerccios 1. Para desenvolver uma aplicao em Visual Basic necessrio um planejamento detalhado das janelas e procedimentos da aplicao? Porqu? ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ 2. So propriedades de um formulrio? ( ) ImageHeight ( ) Icon ( ) Picture ( ) WindowState ( ) Caption ( ) Print

( ) Click ( ) Resize

( ) Load ( ) Left

( ) Top ( ) BackColor

3. Assinale V (verdadeiro) ou F (falso) nas opes seguintes: ( ) Tanto os dados alfanumricos quanto os dados binrios do formulrio so armazenados no arquivo de extenso FRM. ( ) Somente os dados alfanumricos do formulrio so armazenados no arquivo com extenso FRX. ( ) Os dados binrio do formulrio so armazenados no arquivo com extenso FRX. ( ) Os dados alfanumricos do formulrio so armazenados no arquivo com extenso FRM. 4. Qual das estruturas de deciso oferece ao programador utilizar in;umeras possibilidades de tratamento do valor gerado pela clusula <condio>? ________________________________________________________________________________ 5. Dentre as estruturas de lao qual delas menos flexvel e no permite a interrupo abrupta pela instruo Exit Loop. ________________________________________________________________________________

22

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

6. Crie um cdigo em que seja possvel verificar se o tipo de controle testado um CommandButton e em segunda altere atravs do lao With... End With as propriedades Cancel para falso; Default para verdadeiro e Enabled para verdadeiro. For Each

Next 7. Correlacione os controles aos prefixos sugeridos pela Microsoft e pelo Autor. (1) CommandButton ( ) fra (2) Frame ( ) lbl (3) DBCombo ( ) lvw (4) TreeView ( ) cdl (5) ToolBar ( ) dbc (6) Timer ( ) hsc (7) ListBox ( ) dat (8) StatusBar ( ) pgb (9) ProgressBar ( ) msk (10) CommonDialog ( ) pic (11) DataControl ( ) cmd (12) RichTextBox ( ) lst (13) MaskEditBox ( ) tmr (14) PictureBox ( ) rtf (15) HScroolBar ( ) stb 8. Assinale V (verdadeiro) ou F (falso) nas descries das propriedades do formulrio: ( ) BorderStyle Define o tipo borda que o formulrio exibir. ( ) O valor padro da propriedade ControlBox False. ( ) StartUpPosition - Define a posio que o formulrio ser exibido na tela: 0 Manual; 1 CenterOwner; 2 CenterScreen; 3 Windows Default ( ) Height define a largura e Width define a altura do formulrio. ( ) WindowState Define como o formulrio ser exibido em run time (tempo de execuo) 0 Normal; 1 Minimized; 2 Maximided 9. Qual a diferena bsica ente um mdulo padro (Module) e um Mdulo Classe (Class Module) ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ 10. Qual dos dois cdigo abaixo tem maior rapidez no momento da escrita dos cdigos. Cdigo 1 ( ) Private Sub cmdShowAbout_Click()

Microsoft Visual Basic Estrutura de uma Aplicao

23

Call LoadForm (frmAbout, "Sobre...", vbNormal, vbWhite) End Sub Private Sub cmdShowCredits_Click() Call LoadForm (frmCredits, "Crditos...", vbMaximized, vbBlack) End Sub Public Function LoadForm(frm As Form, sCaption As FormWindowStateConstants, cColor As ColorConstants) With frm .Caption = sCaption .WindowState = wState .BackColor = cColor .Show 1, Me End With End Function Cdigo 2 ( ) Private Sub cmdShowAbout_Click() frmAbout.Caption = "Sobre..." frmAbout.WindowState = vbNormal frmAbout.BackColor = vbWhite frmAbout.Show 1, Me End Sub Private Sub cmdShowCredits_Click() frmCredits.Caption ="Crditos..." frmCredits.WindowState= vbMaximized frmCredits.BackColor= vbBlack frmCredits.Show 1, Me End Sub 11. Especifique descritivamente com criar uma seqncia de menus contendo o menu Arquivo, com submenus Novo, Abrir, Fechar, Salvar, Salvar Como... e Sair. Cada menu dever possui uma teca de atalho associada a tecla Alt e um Shortcut. ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ ________________________________________________________________________________ _______________________________________________________________________________ String, wState As

24

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

25

4. CONTROLES PERSONALIZADOS (PROPRIEDADES E EVENTOS)


Neste captulo ser abordado os controle personalizados, mais utilizados no Visual Basic, obviamente na maioria, este so controles da prpria Microsoft, outros no. Existem milhares de controles (componentes) que em geral so designados como Controles ActiveX2, que tem o objetivo de substituir dezenas, centenas ou milhares de linhas de cdigo que o programador teria de escrever sem a presena deste controles, em sntese uma "mo na roda", facilitando e diminuindo o tempo de programao. A Microsoft acredita que at 1998 existiam cerca de 2.000 controles comerciais e milhares de controles shareware e freeware disponveis na internet. Para ter acesso aos controles personalizados do Visual Basic, basta clicar no menu Project > Components, ou simplesmente Ctrl+T. ser exibida uma janela como todos os controles ActiveX registrados no sistema operacional (Figura 7). Selecione o(s) controle(s) desejado(s) e clique em OK ou Aplicar. Para cada controle selecionado poder ser exibido um ou mais cone na barra de ferramentas (lateral) do Visual Basic, referente ao componente. Por exemplo, o Microsoft Windows Common Control 6.0 (SP4) (MSComctl.ocx), possui 9 componentes embutidos (TabStrip, ToolBar, StatusBar, ProgressBar, Treeview, ListView, ImageList, Slider e ComboImage),(Figura 8) j o componente Microsoft Windows Common Control 2 (SP4) (MSComctl332.ocx), possui apenas um controle (CoolBar). A verso Standard do Visual Basic oferece cerca de 25 componente, j as verses Profesional e Enterprise, oferecem mais de 50 componentes ActiveX. O Visual Basic possibilita ao programador desenvolver seus prprios componentes, sejam eles ActiveX ou Dll's. porm necessrio que o programador possua conhecimento avanado sobre o prprio Visual Basic e conhecimentos sobre API's (Application Programmable Internal, ou seja, Aplicao Internas Programveis). Vrios livros e tutoriais esto dsiponveis para quem deseja enveredar por est fascinante rea da programao. S para elucidar ao programador que deseja realmente adentrar neste campo, a documentao da Microsoft para API's (Microsoft API's Guide), so nada mais nada menos que cinco (05) livros com mais de 400 pginas cada.

Figura 7. Caixa de controles ActiveX personalizados, localizados no sistema.

Tecnologia da Microsoft que utiliza componentes externos para desempenhar tarefas dentro de uma aplicao, minimizando assim o tamanho do executvel e aumentando assim a velocidade de execuo desta tarefas.

26

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 8.Microsoft Windows Common Control 6.0 4.1. Microsoft Windows Common Control 6.0 4.1.1. ImageList (Lista de Imagens) O controle ImageList (Lista de Imagens), possibilita ao programador armazenar uma coleo de imagens (bitmaps, cones e cursores), para serem utilizados pelo aplicativo. Exemplo as imagens que os controles ToolBar, ListView e TreeView, utilizam so oriundos do ImageList. A melhor forma para trabalhar com um controle ImageList saber exatamente o ndice (Index) e/ou a chave (Key), que a imagem foi armazenada. As propriedades ImageHeight e ImageWidth, especificam as dimenses da imagem que ser armazenada na coleo. Estas propriedades somente podero ser alteradas em Design Time e se no existir nenhuma imagem inserida no controle. Os valores pr-fixados para imagens so 16x16 pixels, 32x32 pixels. Existe tambm a opo Custom, que o programador poder definir dimenses de altura diferente de largura na caixa de texto Heigth e Width da Property Page, onde a dimenso de todas as imagens ser igual dimenso da primeira inserida ao controle. Para inserir as imagens, basta clicar na propriedade (Custom), na barra de propriedade do controle. Ser exibida uma pgina de propriedades (Property Page), com trs abas (General, Images, Color). Na primeira aba as propriedades de dimenso so exibidas e na segunda aba o programador poder inserir as imagens, clicando no boto Insert Picture3 e remover a imagem selecionada clicando em Remove Picture4 (Figura 9). O programador poder inserir quantos controles ImageList quiser, porm o bom senso dever prevalecer.

4.1.1.1. Carregando uma Imagem da Coleo. Para retornar ou carregar uma imagem da coleo que est dentro da ImageList, para um PictureBox, o programador dever saber exatamente o nmero do ndice da imagem (a

Para inserir uma imagem aps ligar o controle ImageList a um controle ToolBar o programador somente poder inserir a imagem aps a ltima inserida e nunca entre duas imagem j inseridas. 4 Somente ser possvel remover a imagem caso o controle ImageList no esteja ligado a um controle ToolBar.

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

27

coleo ListImages comea em 1), para retornar a imagem correta. A partir da a linha de cdigo abaixo carrega a segunda imagem da coleo da ImageList1 para a Picture1. Na Figura 9a podemos ver as configuraes do tamanho das imagens que iro compor a coleo, devemos ressaltar que o tamanho dever ser escolhido antes de iniciar a insero de imagens coleo, pois o controle no permite modificar este valor aps Ter sido inserida pelo menos uma imagem, a opo UseMaskColor retorna ou seta a mascara de cor que a coleo ir utilizar, veja exemplo no Cdigo 5. Na Figura 9b pode ser verificado dois campos Key e Tag. O campo Key dever ser nico e Case Sensitive, ou seja, h diferena entre info e Info, pois h diferena na primeira letra. Para evitar erros recomenda-se que todos os valores sejam em minsculo, sabe-se que o valor setado pode conter qualquer letra, nmero ou smbolos. Ex: info@/1. Entretanto seria mais fcil somente info1. O campo Tag serve para que qualquer configurao extra possa ser especificada (setado). Desta forma o campo Tag em qualquer controle serve para dar maior flexibilidade ao programador na hora de especificar um valor, alm das variveis que podem ser declaradas, mas a propriedade Tag acaba sendo mais flexvel. Private Sub Form_Load() Dim imgX As ListImage ' Load bitmaps. Set imgX = ImageList1.ListImages. _ Add(, "No", LoadPicture("bitmaps\assorted\Intl_No.bmp")) Set imgX = ImageList1.ListImages. _ Add(, , LoadPicture("bitmaps\assorted\smokes.bmp")) Set imgX = ImageList1.ListImages. _ Add(, , LoadPicture("bitmaps\assorted\beany.bmp")) ScaleMode = vbPixels ' Set MaskColor property. ImageList1.MaskColor = vbGreen ' Set the form's BackColor to white. Form1.BackColor = vbWhite End Sub Private Sub Form_Click() Static intCount As Integer ' Static variable to count images. ' Reset variable to 2 if it is over the ListImages.Count value. If intCount > ImageList1.ListImages.Count Or intCount < 1 Then intCount = 2 ' Reset to second image End If ' Overlay ListImage(1) over ListImages 2-3. Picture1.Picture = ImageList1.Overlay(intCount, 1) ' Increment count. intCount = intCount + 1 ' Create variable to hold ImageList.ImageWidth value. Dim intW intW = ImageList1.ImageWidth ' Draw images onto the form for reference. Use the ImageWidth ' value to space the images. ImageList1.ListImages(1).Draw Form1.hDC, 0, 0, imlNormal

28

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

ImageList1.ListImages(2).Draw Form1.hDC, 0, intW, imlNormal ImageList1.ListImages(3).Draw Form1.hDC, 0, intW * 2, imlNormal End Sub Cdigo 5. Este exemplo carrega vrios bitmaps em um controle ImageList. Quando o form clicado um uma imagem da lista substituda por outra Imagem. Este exemplo necessita de um controle ImageList e um controle PictureBox.5 Set Picture1.Picture = ImageList1.ListImages(2).Picture Cdigo 6. Linha de comando para retornar a segunda imagem da coleo da ImageList1 para o controle Picture1. Caso a imagem da coleo seja um cone, poder ser utilizada a seguinte linha de cdigo. Set Picture1.Picture = ImageList1.ListImages(2).ExtractIcon Cdigo 7, Linha de comando para retornar a segunda imagem (cone) da coleo da ImageList1 para o controle Picture1.

B A Figura 9. A- configuraes do tamanho das imagens; B- coleo de imagens inseridas no ImageList. 4.1.2. Controle ListView (Lista de Visualizao) O controle ListView (Figura 10)permite que o programador apresente itens de vrias maneiras. Arranjados em colunas, em lista, com detalhes, cones pequenos, cones grandes. Como o gerenciador de arquivos do Windows, o Windows Explorer. A Tabela 7, demonstra os valores da propriedade View do controle ListView. Tabela 7. Constantes, valores e descrio do propriedade View do controle ListView. Constante lvwIcon lvwSmallIcon lvwList Valor 0 1 2 Descrio (Padro) Cada objeto ListItem representado por um cone de tamanho grande. Cada objeto ListItem representado por um cone de tamanho pequeno e um rtulo de texto que aparece direita do cone. Vrios itens so arranjados horizontalmente. Cada objeto ListItem representado por um cone de tamanho pequeno e um rtulo de texto que aparece a direita do cone. Os objetos ListItem so verticais em linha diferentes, e a

Exemplo retirado do arquivo de ajuda do Microsoft Visual Basic 6.0.

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

29

Constante

Valor

lvwReport

Descrio informao de texto organizada em colunas. Cada objeto ListItem representado por um cone de tamanho pequeno e um rtulo. Os cones rtulos aparecem em colunas. Colunas adicionais so utilizadas para exibir texto adicionais, ou propriedades.

Figura 10. Controle ListView, exibindo cones pequenos. Os itens exibidos no controle ListView so chamados (naturalmente) de objetos ListItem. Um objeto ListItem tem suas prprias propriedades que descrevem o item, entre as quais h algumas mais importantes, exibidas na Tabela a seguir. Tabela 8. Propriedades do controle ListView. Propriedade Descrio Icons Retorna ou configura o ndice ou a chave para o cone associado ao objeto ListItem. Quando declarado aps o controle (ListView1.Icons), utilizado para indicar qual controle ImageList, contm os cones grandes6 a ser exibidos. SmallIcons Retorna ou configura o ndice ou a chave para o cone associado ao objeto ListItem. Quando declarado aps o controle (ListView1.SmallIcons), utilizado para indicar qual controle ImageList, contm os cones pequenos7 a ser exibidos. Selected Informa se LisItem foi selecionado (ou faz sua seleo). SubItems Retorna ou configura a string representando os dados do subsitema associado com um determinado ListItem. Em geral utilizado para adicionar ou selecionar uma coluna, quando a propriedade View igual 3- lvwReoprt View Configura a forma de exibio do objeto ListItem, como visto no Quadro 7. Sintaxe para inserir um objeto ListItem. object.Add(index, key, text, icon, smallIcon) ou ListView1.ListItems.Add([Index], [Key], [Icon], [SmallIcon])

object index key text icon


6 7

Parte

Descrio Requerido. Uma expresso de objeto que possua uma coleo de ListItems. Opcional. Um inteiro (Integer) que especifica a posio onde voc quer inserir o ListItem. Se nenhum ndice for especificado, o ListItem adicionado no fim da coleo ListItems. Opcional. Uma expresso de string nica que pode ser usada para acessar um membro da coleo. Opcional. Uma string que associada ao controle de objeto de ListItem. Opcional. Um inteiro que fixa o cone para ser exibido a partir de um controle de

Em geral cones grandes possuem a dimenso de 32x32 pixels Em geral cones pequenos possuem a dimenso de 16x16 pixels

30

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

ImageList, quando o controle de ListView for configurado para viso de cone Opcional. Um inteiro que fixa o cone para ser exibido a partir de um controle ImageList, quando o controle ListView for configurado para viso de SmallIcon. Para poupar recursos do sistema, possvel o programador pode"amarrar" um controle ImageList ao controle ListView, atravs da propriedade (Custom), alm de poder especificar qual a ImageList, que possui cones pequenos (SmallIcon) e cones grandes (Icon), outra propriedade que poder ser alterada em design time ou run time a exibio da legenda das colunas (HideColumnHeaders), o valor do tipo booleano (True/False).

smallIcon

4.1.3. Controle ProgressBar (Barra de Progresso) A controle ProgressBar (barra de progresso), em geral utilizado para exibir o "andamento" de uma determinada tarefa (em geral "demorada") que est sendo desenvolvida pelo aplicativo, demonstrando ao usurio que o aplicativo no "travou" e est desempenhando a tarefa que foi determinada. O progresso poder se dar de duas formas, atravs de progresso quadro a quadro ou em faixa contnua (Figura 11). Que poder ser alterado na propriedade Scrooling. As propriedades Min e Max, permite configurar, respectivamente, o valor inicial (mnimo = 0) e o valor limite. J a propriedade Value, se refere a posio entre o intervalo j preenchido e o intervalo que falta para ainda a concluso do progresso.

Figura 11. Controles ProgressBar's exibindo os dois valores da propriedades Scrolling (0 ccScrollingStandard e 1- ccScrollingSmooth) Para simular um progresso insira no Form1 um controle ProgressBar, um TextBox e um CommandButton, e em segunda escreva as seguintes linhas de cdigo no evento Click do boto. Private Sub Command1_Click() Dim i As Integer pgbTarefa.Min = 0 pgbTarefa.Max = Text1.Text pgbTarefa.Value = pgbTarefa.Min For i = 0 To Text1.Text pgbTarefa.Value = i Next i End Sub Cdigo 8. Rotina simples para exibir o progresso de um controle ProgressBar. O Cdigo 8 no verifica se o valor digitado na caixa de texto Text1, numrico, portanto para que no ocorra erro digite somente valor numrico positivo. Outra informao que, quanto maior for o valor maior ser o tempo para que o preenchimento do progresso seja efetuado. Inicialmente no Cdigo 8, declaramos uma varivel privada i, com Integer, para ser utilizada no lao For-Next, que conta cada incremento a partir do valor 0 a adiciona o valor 1 a varivel i cada vez que o lao e reiniciado, at que o valor de i seja igual ao valor digitado na caixa de texto. O valor mnimo (Min) da barra de progresso foi atribudo como 0 e o valor mximo

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

31

(Max), foi atribudo ao valor digitado na caixa de texto (se a caixa de texto estiver vazia ou com valor no numrico positivo o Visual Basic retorna um erro (Run-time error '13': Type mismatch). Para testa o progresso, basta inserir, por exemplo, o valor 1.000 ou 2.000 na caixa de texto e clicar o boto CommnadButton1. 4.1.4. Controle StatusBar (Barra de Status) O controle StatusBar, fornece a o usurio informaes adicionais de status do seu aplicativo tais como: se as tecla Caps Lock, Num Lock, Insert est ativar ou no, Data e Hora do Sistema operacional, etc.(Figura 12). Por exemplo, o processador de texto Microsoft Word, utiliza o controle barra de status para informara ao usurio qual a pgina que est sendo editada, qual seo, qual linha e coluna e assim por diante (Figura 13). Cada barra de status, poder ser dividido em no mximo em 16 painis (panels), cada Painel possui as seguintes propriedades: 1. Index o valor de posicionamento do painel dentro do controle StatusBar (somente leitura); 2. Text o texto que dever ser exibido no painel, esta propriedade dever est associada com valor 0 sbrText da propriedades Style; 3. ToolTipText a mensagem de dica que ser exibida quando o usurio passar e parar o mouse no painel; 4. Key um valor nico que indica o painel; 5. Allignment especifica o alinhamento do contedo do painel. 6. Stye define o estilo e as informaes que ser exibida no painel (Tabela 9); 7. Bevel configura o painel para o modo de exibio. Os valores so: 0 sbrNoBevel, 1 sbrInsert (padro) e 2 sbrRaised. Estes valores exibem o painel respectivamente, como plano, baixo relevo e auto relevo. 8. AutoSize esta propriedade define o ajuste do tamanho do painel. O valores so: 0 sbrNoAutoSize, 1 sbrSrping e 2 sbrContents. Estes valores definem respectivamente o tamanho do painel como sem ajuste, com ajuste de acordo com o espao que falta at a barra de status completar o tamanho da janela e ajuste de acordo com o contedo do painel; 9. MinimumWidth especifica o tamanho mnimo que ao painel dever Ter; 10. Actual Width Exibe o tamanho atual do painel (somente leitura); 11. Picture especifica a figura que dever ser exibida no painel. Em geral utiliza-se figuras com tamanho de 16x16 pixels. Esta imagem poder ser tambm carregada de um controle ImageList, com mostra o Cdigo 6 e 7; 12. Enabled habilita ou no o painel em run time; 13. Visible exibe ou no o painel em run time.

Figura 12. Controle StatusBar, exibindo vrias informaes adicionais.

Figura 13. Controle StatusBar do processador de textos Microsoft Word. Private Sub Form_Load() sbrMain.Panels(1).Picture = imlIcon16.ListImages(1).Picture End Sub Cdigo 9. Linha de comando para extrair a imagem de Index 1 contida num controle ImageList e retorna-lo para o painel a propriedade Picture da Barra de status com o Index 1. Tabela 9. Constantes, valores e descrio da propriedade Style do Controle StatusBar.

32

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Constante sbrText sbrCaps sbrNum sbrIns sbrScrl sbrTime sbrDate

Valor 0 1 2 3 4 5 6

Descrio (Padro) Texto e ou bitmap (figura). Especifica o texto atravs da propriedade Text; especifica a propriedade Picture, como o mtodo LoadPicture ou atravs da Property Page ou como demonstrado no Cdigo 8. Caps Lock. Exibe as letras CAPS em negrito quando a tecla Caps Lock ativada, ou ento desabilita o painel. Number Lock. Exibe as letras NUM em negrito quando a tecla Num Lock ativada, ou ento desabilita o painel. Exibe as letras INS em negrito quando a tecla Insert (Ins) ativada, ou ento desabilita o painel. Exibe as letras SCRL em negrito quando a tecla Scrool Lock ativada, ou ento desabilita o painel. Exibe o horrio atual do sistema operacional Exibe a data atual do sistema operacional

possvel adicionar (at no mximo 16 painis) em tempo de execuo (run time) atravs de linhas de comando, ou mesmo especificar uma imagem a partir de uma imagem existente no disco rgido (HD Hard Disk) ou ainda alterar as propriedade do controle StatusBar, como pode ser visto no (Cdigo 9) Private Sub Form_Load() Dim pnlPanel As Panel sbrMain.Panels(1).Text = "Controle StatusBar" Set pnlPanel = sbrMain.Panels.Add(, , , sbrTime) Set pnlPanel = sbrMain.Panels.Add(, , , sbrData) Set pnlPanel = sbrMain.Panels.Add(, , , sbrCaps) Set pnlPanel = sbrMain.Panels.Add(, , , , LoadPicture(App.Path _ & "\graphics\icons\Win95\Desktop.ico")) Set pnlPanel = sbrMain.Panels.Add(, , , , imlIcon16.ListImages(1).Picture) End Sub Cdigo 10. Controle StatusBar. Atribuindo um texto ao painel 1 e Adicionando painis e figuras. 4.1.5. Controle ToolBar (Barra de Ferramentas) O controle ToolBar (Figura 14), facilita a construo de uma barra de ferramentas, estilo Windows, ou seja como pode ser visto no Windows Explorer, por exemplo. A barra de ferramenta um dos controles mais utilizados em aplicativos por ser intuitiva, ou seja, fornece ao usurio a real funo de cada boto contido na barra de ferramenta.

Figura 14. Controles ToolBar's alinhados no topo da janela e em baixo e com a propriedade Style 1 tbrFlat e 0 tbrStandard, respectivamente. As propriedades Gerais do controle Toolbar (Figura 15 e 16) so:

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

33

1. MousePointer permite alterar o tipo de cursor que ser exibido pela Barra de ferramenta; 2. ImageList o controle ImageList associado que contm os cones que sero exibidos pela barra de ferramentas; 3. DisabledImageList - o controle ImageList associado que contm os cones que sero exibidos pela barra de ferramentas quando o boto estive desabilitado; 4. HotImageList - o controle ImageList associado que contm os cones que sero exibidos pela barra de ferramentas quando o usurio passa o mouse por cima do boto8; 5. HelpContextID Nesta propriedade o programador dever atribuir o nmero do tpico de ajuda, que foi especificado no projeto da ajuda, na seo MAP; 6. HelpFile Nesta propriedade o programador dever especificar o caminho lgico onde encontra-se o arquivo de ajuda, caso este seja diferente do arquivo de ajuda do programa/aplicativo; 7. AllowCostumize permite que o usurio a partir de um duplo clique possa personalizar a barra de ferramentas; 8. Wrappable permite que a barra de ferramentas possa ser exibida "com quebra" caso o tamanho da janela seja menor que a soma das larguras dos botes; 9. ShowTips permite exibi ou ocultar as dicas dos botes; 10. Enabled habilita ou desabilita a barra de ferramentas; 11. Appearance Permite exibir a barra de ferramentas em 3D (cc3D - Padro) ou plano (ccFlat); 12. BorderStyle Altera o estilo da borda da barra de ferramentas, para ccNone (Sem borda Padro) ou ccFixedSingle (com bordas); 13. TextAlignment Permite alinhar o texto abaixo do boto ou ao lado tbrTextAlignBottom (Alinha abaixo) e tbrTextAlignRight (Alinha ao lado); 14. Style - permite alterar o estilo dos botes para 3D (tbrStandard - Padro) ou plano (tbrFlat).

Geralmente quanto a propriedade HotImageList vinculada a um controle ImageList, esta contm cones ou figuras coloridas e a propriedade ImageList vinculada a um controle ImageList com cones ou figuras com colao em escala de cinza ou cores esmaecidas. Dando assim o efeito que poder ser visto no Windows Explorer, Internet Explorer, etc.

34

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 15. Caixa de propriedades geral de uma barra de ferramentas (aba General).

Figura 16. Caixa de propriedades dos botes de uma barra de ferramentas (aba Buttons). 4.1.6. Controle TreeView (rvore de Visualizao) Este controle muito utilizado quando se quer exibir/visualizar dados de forma hierrquica, como ocorre no Windows Explorer nas pastas exibidas direita da janela. Outro exemplo seria exibir dados de uma banco de dados, ou seja, dados de um mesmo autor agrupados hierarquicamente. O controle TreeView, possui uma Property Page (Figura 17), com praticamente todas as propriedades exibidas na janela propriedades. A seguir iremos especificar as propriedades mais utilizadas no controle. A propriedade Style fornece o estilo que ser exibido os ns (nodes) do controle os valores vo de 0 a 7, como seguem: 0 Somente texto (tvwTextOnly). 1 Imagem e texto (tvwPictureText). 2 Mais/menos e Texto (txwPlusMinustext). 3 Mais/menos, imagem e texto (txwPlusPictureText). 4 Linhas e texto (txwTreelinesText). 5 Linhas, imagem e texto (txwTreelinesPictureText). 6 Linhas, mais/menos e texto (txwTreelinesPlusMinusText). 7 (Padro) Linhas, mais/menos, imagem e texto (txwTreelinesPlusMinusPictureText). As demais propriedades so: 1. MousePointer permite alterar o tipo de cursor que ser exibido pelo controle; 2. LineStyle retorna ou seta o estilo de linhas exibidas entre os Nodes. Os valores so 0tvwTreeLines e 1 -tvwRootLines; 3. LabelEdit configura os node para que o texto possa ser editado ou no com um duplo clique. Os valores so 0 tvwAutomatic (editado com duplo clique) e 1 tvwManual (no editvel);

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

35

4. ImageList configura a o controle ImageList que contm as imagem que sero exibidas nos nodes;9 5. BorderStyle configura se o controle ir exibir as borad ou no. Os valores so 0 ccNone e 1 ccfixedSingle; 6. Appearance configura a aparncia do controle, se 3D ou plano. Os valores so 0 ccFlat (plano) e 1- cc3D (tridimensional); 7. Indentation configura a largura indentation, ou seja, a largura entre o imagem ou o sins menos/mais do node e o texto. O valor padro : 566,9292; 8. PathSeparator configura o tipo de caractere que ser utilizado como separador de nodes. O valor padro \; 9. HideSelection configura o controle para exibir uma marcao no ltimo node selecionado quando o controle perde o foco. Quando selecionado o texto no marcado, quando no selecionado o node fica marca com uma colorao amena, em geral cinza, quando o controle perde o foco; 10. Sorted configura o controle para distribuir o texto inserido nos nodes em ordem alfabtica, quando esta opo e marcada ou setada; 11. FullRowSelected seleciona todo a linha quando o texto do node selecionado; 12. Enabled habilita o desabilita o controle; 13. CheckBoxes quando esta opo e marcada ou setada, cada node exibira um CheckBoxes ( ).

Figura 17. Caixa de propriedades dos botes de um controle Treeview (aba General).

As imagem dentro do controle ImageList, devero ser especificada o valor key, que devero ser nicos, ou seja, no podem ter valor igual. O valor key ser utilizado para especificar a imagem que ir ser exibida pelo Node, quando ele adicionado no controle TreeView. Em geral o nome das chaves (key) so dadas em minsculo, pois existe uma sensibilidade entre maiscula e minscula, ou seja o parmetro Case Sensitive.

36

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 18. Exemplo de um controle Treeview, com um node pai (cones) e 4 nodes filhos. LineStyle igual a 1 tvwRootLine. Para inserir nodes num controle Treeview, basta setar os valores no mtodo Add da propriedade Nodes. Como mostra o Cdigo 11. A sintaxe para adio de nodes : Object.Nodes.Add([relative], [relationship], [key], [text], [image], [selectedimage]) Parte object relative Descrio Requerido. Uma expresso de objeto que possua uma coleo de ListItems. Opcional. O nmero de ndice ou chave de um objeto de Node pr-existente. A relao entre o novo node e o node pr-existentes verificado no prximo parmetro, relationship. Opcional. Especifica a colocao relativa do objeto Node, como descritas na Tabela 10. Opcional. Uma expresso de string nica que pode ser usada para acessar um membro da coleo. Opcional. Uma string que associada ao controle de objeto de ListItem. Opcional. O ndice ou key de uma imagem em um controle de ImageList associado. Opcional. O ndice ou key de uma imagem em um ImageList associado ao controle a imagem exibida quando o Node for selecionado.

relationship key text image selectedimage

Tabela 10. As constantes para relationship so:10 Constante tvwFirst tvwLast tvwNext tvwPrevious tvwChild Valor 0 1 2 3 4 Descrio First. The Node is placed before all other nodes at the same level of the node named in relative. Last. The Node is placed after all other nodes at the same level of the node named in relative. Any Node added subsequently may be placed after one added as Last. (Default) Next. The Node is placed after the node named in relative. Previous. The Node is placed before the node named in relative. Child. The Node becomes a child node of the node named in relative.

Private Sub Form_Load() Dim xNode As Node Set xNode = TreeView1.Nodes.Add(, , , "cones", "vb") Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "info")
10

"Informao",

Extrado do arquivo de ajuda do Microsoft Visual Basic 6.0

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

37

"inter") "exc")

Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Interrogao", Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Exclamao",

Set xNode = TreeView1.Nodes.Add(1, tvwChild, , "Critico", "stop") xNode.EnsureVisible End Sub Cdigo 11. Adio de nodes num controle TreeView. Para remover um node basta seguir o exemplo do Cdigo 12. A sintaxe para o mtodo Remove Object.Nodes.Remove(index) Private Sub Form_Click() TreeView1.Nodes.Remove (1) End Sub Cdigo 12. Removendo um node do controle TreeView. 4.1.7. Controle Slider O controle Slider (Figura 19) resume-se em uma "rgua" e um cursor. O cursor da rgua pode ser deslocado atravs do mouse ou pelas setas de direo do teclado. Atravs de sua movimentao pode-se obter o valor relativo atravs da propriedade Value. O controle possui duas propriedades importantes que determinam o intervalo entre o valor mnimo e mximo que a propriedade value poder ser setada. So elas Min e Max. A propriedade LargeChange, especifica a freqncia de deslocamento do Slider, quando acionada as teclas Pagedown ou PageUp quando o controle recebe o foco ou quando clicado o ponteiro do Mouse. Mcomo este um controle pouco utilizado em aplicaes sugiro consultar o arquivo de ajuda do Visual Basic, para maiores detalhes sobre propriedades, mtodos e eventos deste controle.

Figura 19. Controle Slider 4.2. Exerccios 1. Crie um pequeno projeto utilizando os seguintes controle ToolBar, ImageList e StatusBar. Neste projeto adicione 3 cones ao controle ImageList e em seguida crie 3 botes no controle ToolBar. No controle StatusBar adicione um Pannels e adicione a imagem 2 do controle ImageList atravs de cdigo. Os cdigos devero se escrito abaixo e no projeto a ser entregue para anlise. Private Form_ ()

End Sub

38

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

2. Utilizando o controle TreeView adicione via cdigo seis nodes com valor text livre entretanto os valores Image e SelectedImage, diferente para cada node. O primeiro node dever ser pai e os demais devero ser filhos. Adicione comentrio para cada linha de comando escrita. Dica Lembre-se da coleo de imagens. Private Form_Load() 'Begin load event of this form

End Sub 'End or close load event of this form 3. Quanto painis (pannels) possvel adicionar num controle StatusBar? poss;ivel adiciona-los via cdigo, caso verdadeiro crie um exemplo, para maiores informaes verifique a ajuda do Visual Basic ________________________________________________________________________________ Private Form_Load() 'Insira aqui o cdigo para inserir um novo painel ao controle StatusBar

End Sub 4. possvel alterar em Run-time (em tempo de execuo) o valor da(s) propriedade(s): Scrolling de um controle ProgressBar.............................: ( ) Sim ( ) No

Style de um controle StaturBar......................................: ( ) Sim ImageHeight e ImageWidth de uma controle ImageList..: ( ) Sim Identation de um controle TreeView..............................: ( ) Sim Gridlines de um controle ListView...................................: ( ) Sim Min e Max de um controle ProgresBar.............................: ( ) Sim Name de um controle TreeView......................................: ( ) Sim Align de um controle StatusBar.......................................: ( ) Sim LabelEdit de um controle TreeView..................................: ( ) Sim

( ) No ( ) No ( ) No ( ) No ( ) No ( ) No ( ) No ( ) No

Microsoft Visual Basic Funes Data e Hora

39

5. FUNES DATA E HORA


As funes de data e hora so muito teis para um aplicativo, por exemplo a subtrao de uma data de nascimento e a data atual, para saber a idade de uma pessoa (funcionrios). Entre diversas outras funes. Veremos as forma de declarar as diversas formas de data e hora e um exemplo de subtrao. As funes de data aceitos pelo VB, so, Date, DateValue, Format. Abaixo segue os formatos das funes de datas. 5.1. Date Datas com formato invlidos, devolver uma mensagem "Illegal function call",(Chamada ilegal de funo), em tempo de execuo (Run Time). Date = "mm-dd-aaaa" 'Devolva a dada da seguinte forma ms-dia-ano Date = "mm/dd/aaaa" 'Devolva a dada da seguinte forma ms/dia/ano Date = "dd.mm.aaaa" 'Devolva a dada da seguinte forma dia.ms.ano Date = "dd/mm/aaaa" 'Devolva a dada da seguinte forma dia /ms/ano 5.2. DataValue Datas com formato invlido gera um erro Type Mismatch, em tempo de execuo (Run Time), por exemplo: DataValue("30-02-2001"). DataValue("11-20-2000") DataValue("Novembro 11, 2000") DataValue("Dez 31, 2000") DataValue("31 Dezembro 2000") DataValue("31-Dez-2000") 5.3. Format Format (Now, "General Date") 'Devolve a seguinte data: 20/11/2000 00:44:26 Format (Now, "Long Date") 'Devolve a seguinte data: segunda-feira, 20 de novembro de 2000 Format (Now, "Medium Date") 'Devolve a seguinte data: 20-nov-00 Format (Now, "Short Date") 'Devolve a seguinte data: 20/11/00 Format (Now, "Long Time") 'Devolve a seguinte data: 00:49:34 Format (Now, "Medium Time") 'Devolve a seguinte data: 12:50 Format (Now, "Short Time") 'Devolve a seguinte data: 00:50 5.4. Projeto Comentado Para o nosso pequeno projeto insira os controles como especificados na Tabela 11: Tabela 11. Controles para o projeto idade. Controle Form Propriedade Name: Caption: BorderStyle: StartUpPosition: Name: Caption: Default: Name: Caption: Cancel: Name: Caption: Name: Atributo TelPrin Idade 0 Fixed Single 2 ScreenCenter cmdCalcular &Calcular True cmdFechar &Fechar True lbNascimento Data de Nascimento lbIdade

CommandButton CommandButton Label Label

40

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

TextBox TextBox TextBox TextBox

Caption: Name: Name: Name: Name:

Idade (dias, meses, ano) txtDtNasc txtDia txtMes txtAno

A seguir insira as seguintes linhas de cdigo: Private Sub cmdCalcular_Click() Dim DataNasc As Date 'Declara a varivel com Data If Not IsDate(txtDtnasc.Text) Then 'Se a data digitada no for vlida... MsgBox "Data '" & txtDtnasc.Text & "' invlida" '...exibe esta mensagem... txtDtnasc.Text = Empty '... limpa a caixa de texto de data de nascimento e ... txtDtnasc.SetFocus '... devolve a ela o foco. Else 'Se no txtDia.Text = Empty 'Limpa a caixa de texto de dias vividos txtMes.Text = Empty 'Limpa a caixa de texto de meses vividos txtAno.Text = Empty 'Limpa a caixa de texto de anos vividos DataNasc = txtDtnasc.Text 'Devolve a varivel DataNasc o valor da data digitada txtDia.Text = "Dias vividos " & Date - DataNasc & " dias" 'Exibe o nmero de dias vividos txtMes.Text = "Meses vividos " & Fix((Date - DataNasc) / 12) & " meses" 'Exibe o nmero inteiro de meses vividos txtAno.Text = "Anos vividos " & Fix((Date - DataNasc) / 365) & " anos" 'Exibe o nmero inteiro de anos vividos End If End Sub Private Sub cmdFechar_Click() End 'Finaliza a aplicao End Sub Cdigo 13. Projeto Calculadora de dias, meses e anos vividos

Figura 20. Interface da calculadora de idade

Microsoft Visual Basic Controlando as verses e informaes do seu aplicativo

41

6. CONTROLANDO AS VERSES E INFORMAES DO SEU APLICATIVO


sempre interessante oferecer informaes sobre as verses (Major, Minor, Revision) do seu aplicativo e controlar as informaes adicionais, tais como o cone do arquivo executvel, o ttulo do aplicativo (Title), comentrios (Comments), nome da empresa produtora do softwares (Company Name), Descrio do Arquivo (File Description), Copyrigth (Legal Copyright), Marcas Registradas (Legal Trademarks), Nome do Produto (Product Name). A seguir a descrio de cada campo.

Figura 21. Caixa de dilogo de controle verses e informaes do aplicativo. Version Number Cria o nmero de verso para o projeto. Major Nmero principal de lanamento do projeto; 0 9999. Minor Nmero secundrio de lanamento do projeto; 0 9999. Revision Nmero de verso de reviso do projeto; 09999. Auto Increment Se selecionado, incrementa automaticamente o nmero de Revision com um cada tempo que voc executar o comando Make Project para este projeto. Application Permite identificar um nome e cone para seu projeto. Title Nome do aplicativo. Icon cone para o aplicativo. Version Information Permite fornecer informaes especficas sobre a verso atual de seu projeto. Type Voc pode entrar com as informaes do nome da companhia, descrio do arquivo, direitos autorais, marcas registradas legais, nome do produto e comentrios. Value O valor para o tipo de informaes selecionadas na caixa de Tipo (Type). Para exibir as informaes na tela de informaes (About) Figura 22 inseridas nas propriedades do projeto, insira num form os controles como na Tabela 12 abaixo: Tabela 12. Controles para exibir as verses e as informaes de um projeto. Controle Form Propriedade Name: Caption: Atributo frmAbout Sobre - Tutorial do Microsoft Visual Basic

42

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

CommandButton Label Label

Label

Label Label Label Label

BorderStyle: StartUpPosition: Name: Caption: Name: Caption: Align: Name: Caption: Align: Name: Caption: Autosize: WordWrap: Name: Caption: Autosize: WordWrap: Name: Caption: Name: Caption Name: Caption

5.0 0 Fixed Single 2 ScreenCenter cmdOK &OK lbTitulo Titulo Right Justify lbVersao Verso Right Justify: lbDesc Descrio True True lbComentarios Comentrios True True lbCopyright Copyright lbTradeMarks Trademarks lbProduto Produto

Em seguida insira as seguintes linhas de comando. Private Sub cmdOk_Click() Unload Me 'Fecha o formulrio End Sub Private Sub Form_Load() lbTitle.Caption = App.Title 'Exibe o ttulo do aplicativo lbVersao.Caption = "Verso " & App.Major & "." & App.Minor & "." & App.Revision 'Exibe as verses Major, Minor e Revision lbDesc.Caption = "Descrio: " & App.FileDescription 'Exibe a descrio do aplicativo lbComentarios.Caption = "Comentrios: " & App.Comments 'Exibe os comentrios do aplicativo lbCopyright.Caption = "Copyright " & App.LegalCopyright 'Exibe os direitos autorais do aplicativo lbTradeMarks.Caption = "Trademarks: " & App.LegalTrademarks 'Exibe os direitos das marcas registradas do aplicativo lbProduto.Caption = "Produto: " & App.ProductName End Sub Cdigo 14. Projeto para exibir as informaes de um aplicativo

Microsoft Visual Basic Controlando as verses e informaes do seu aplicativo

43

Figura 22. Tela de informaes de um projeto.

Microsoft Visual Basic Trabalhando com funes numricas e financeiras

45

7. TRABALHANDO COM FUNES NUMRICAS E FINANCEIRAS


7.1. Funes Numricas Caso voc utilize programas cientficos, as funes numricas sero longas companheiras do seu dia-a-dia, com elas possvel no somente realizar clculos, mas desenhar curvas e retas. A seguir na tabela abaixo esto as principais funes numricas sua descrio. Tabela 13. Principais funes numricas utilizadas pelo Visual Basic e a descrio. Funo 1/Cos(x) 1/Sin(x) 1/Tan(x) 4*Atn(1#) Abs(x) Atn(x) Cos(x) E = Exp(1#) Exp(x) Fix(x) Hex(x) Log(x) Log(x)/Log(10) Log(x)/Log(n) Oct(x) Rnd(x) Sin(x) Sqr(x) Tan(x) x*180/4*Atn(1#) x*4*Atn(1#)/180 Descrio Devolve a secante de um ngulo x em radiano Devolve a cosecante de um ngulo x em radiano Devolve a cotangente de um ngulo x em radiano Devolve o valor de com dupla preciso Devolve o absoluto de um nmero x Devolve a arcotangente de um ngulo x em radiano Devolve o cosseno de um ngulo x em radiano Devolve o valor de e com dupla preciso Devolve a valor e (2,7182) elevado a um nmero x Devolve o nmero aproximado de um valor x Devolve o hexadecimal do nmero x Devolve o logaritmo natural de um nmero x Devolve o logaritmo na base 10 de um nmero x Devolve o logaritmo na base n de um nmero x Devolve o octagonal do nmero x Devolve o nmero radomizado de uma valor x Devolve o seno de um ngulo x em radiano Devolve a raiz quadrada de um nmero x Devolve a tangente de um ngulo x em radiano Converte o valor x radiano para grau Converte o valor de x grau para radiano

7.2. Funes Financeiras O Visual Basic oferece funes financeiras pr-fromatadas, evitado que o programador passe horas quebrando cabea para motar um rotina para cculo de aopsentadoria por exemplo. A seguir veremos as principais funes financeiras oferecidas pelo Visual Basic e sua sintaxe. 7.2.1. Funo Pmt (Pagamento de Anuidade Baseado num Perodo) A sintaxe para a funo : Pmt(rate, nper, pv[, fv[, type]]) Pmt (TaxaPorPeriodo, NumPeriodos, ValorInicial [, ValorFinal [, QuandoPaga]]). Para ficar mais simples veja o exemplo abaixo. Para calcular uma hipoteca de $100.000,00 de 30 anos a 8%, utilize: Hipoteca = Pmt(0.08/12,30*12,100000, 0,1) TaxaPorPeriodo normalmente, taxa de juros estipilada por ano, mas voc paga todo ms. Portanto o valor da taxa anual deve ser 0.08 e a TaxaPorPeriodo 0.08/12. NumPeriodos Este o nmero de perodos, ou seja, se o pagamento mensal num perodo de 30 anos o NumPeriodos deve ser 30*12. Ara uma hipoteca de pagamento quinzenal o valor do NumPeriodos seria 30*26. ValorInicial o valor do saldo inicial. ValorFinal em uma hipoteca o valor seria zero. Em um plano de poupana, insto seria a quantia que voc gostaria de reservar para a aposentadoria, por exemplo. QunadoPaga voc paga no incio do perodo ou no final? Utilize 0 (zero) para o finla do ms e 1 para o incio.

46

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Embora voc tenha de utilizar esses nomes para os parmetros se voc os utiliza como argumentos nomeados, a notao da Microsoft no enfatiza suficientemente Que as unidades utilizadas para as vrias entradas devem ser as mesmas. Por exemplo, se a taxa calculada utilizando meses, nper tambm tem de ser calculada utilizando meses. 7.2.2. Funo FV (Valor Futuro de Anuidade) Est funo utilizada, por exemplo, para o clculo de aposentadoria, porque ela fornece o valor futuro de uma anuidade com base em pagamentos (ou retiradas) peridicas e uma taxa de juros constante. A sintaxe para a funo : FV(rate, nper, pmt[, pv[, type]]) , para melhor entendimento FV(TaxaJurosPorPeriodo, NumPeriodos, PagamentoPOrPeriodo [, ValorInicial [, QuandoDevido]]) Os dois primeiros argumentos devem ser expressos pelas mesmas unidades. E, como para todas as funes financeiras, os valores pagos so representados por nmeros negativos; e os valores recebidos so representados por nmeros positivos. 7.2.3. Funo IPmt (Taxa de Juros para Durante um Perodo) Esta funo fornece a taxa de juros para durante um perodo de uma anuidade com base em pagamentos iguais e perodos e uma taxa de juros constante. Por exemplo, voc poderia utiliz-la para verificar os juros pagos em um determinado ano que os computadores da empresa hipotecria esto relatando Receita Federal. A sintaxe para a funo IPmt(rate, per, nper, pv[, fv[, type]]), para melhor entendimento IPmt(TaxaJurosPeriodo, NumPeriodos [, ValorInicial [,QuandoDevido]] ) 7.2.4. Funo NPer (Nmero de Perodos para Atingir uma Anuidade) Esta funo informar quanto tempo (o nmero de depsitos/retiradas peridicas) levar para acumular uma anuidade. A sintaxe : NPer(rate, pmt, pv[, fv[, type]]) 7.2.5. Funo PV (Presente Valor Presente Baseado num Perodo) Esta funo informa quanto vale hoje os pagamentos peridicos feitos no futuro. A sintaxe : PV(rate, nper, pmt[, fv[, type]]) 7.2.6. Funo NPV (Valor Presente Lquido) Est funo calcula o valor presente lquido. Esta funo utilizada, por exemplo, se voc comea pagando com um custo inicial, mas depois obtm dinheiro em anos sucessivvos. A sintaxe : NPV(rate, values()), ou melhor NPV(TaxaPorPeriodo, ArrayOf()) necessrio preencher o array com valores aproprieados na ordem coreta. Por exemplo, a primeira entrada poderia ser um nmero positivo representado o valor recebido. Pelo menos um entrada tem que ser positiva e uma entrada tem que ser negativa. Esta funo mais geral que a funo PV, pois a utilizao de uma array permite que o valor recebido ou desembolsado varie com o tempo. 7.2.7. Funo Rate (Taxa por Perodo) Esta funo fornece a taxa de juros por perodo para uma anuidade. Voc utilizaria isso para verificar a taxa de juros reais que estaria pagando se realmente houvesse a promoo padro de "Por apenas $30,00 por ms durante dois anos" Sintaxe : Rate(nper, pmt, pv[, fv[, type[, guess]]])

Microsoft Visual Basic Iniciando com a SQL (Structured Query Language)

47

surgiu com a terceira gerao de banco de dados, os RDBs-Relational Databases, ou seja, banco de dados relacionais. A SQL uma linguagem padro para o gerenciamento de banco de dados, e no nem estruturada (Structured) e no esta limitada somente a consultas (Queries) em banco de dados. Na verdade podemos dizer que SQL uma linguagem para definir e manipular bancos de dados relacionais e praticamente todos os produtos de bancos de dados relacionais que esto no mercado suporta SQL. Infelizmente ainda no existe uma padronizao da SQL; embora a portabilidade seja grande, dependendo do produto que se est utlizando (Oracle, Sybase, Informix, etc.) haver diferenas na sintaxe das declaraes. Atualmente o padro SQL-92 o mais utilizado. No nosso caso usaremos as declaraes SQL utilizadas no Microsoft Access, pois estaremos trabalhando em nvel de desktop. Ao utilizar a SQL em seu cdigo voc ter muitos benefcios; Primeiro ir ganhar tempo, pois a quantidade de linhas de cdigo necessrias para realizar uma tarefa via SQL menor que o mtodo procedural via DAO. Seus projetos tambm ficaro mais rpidos, pois geralmente a SQL e mais rpida que o mtodo procedural via DAO. A portabilidade sua aplicao ser maior visto que a SQL aceita pelos princi-pais bancos de dados relacionais (Oracle, Sybase,etc.). Creio que estes motivos j so suficientes para voc dar uma olhada no que a SQL pode fazer por voc e por seu cdigo. Com a SQL podemos realizar as seguintes tarefas: Criao de Bases de Dados (Ver Banco de Dados). Segurana de acesso aos Dados. Recuperar informaes e Integridade de transaes. Manipulao e controle de bases de dados. Se voc tem uma cpia do Access, sua incurso no mundo SQL ser facilitada, pois o Access praticamente escreve em SQL para voc, depois voc s precisar copiar e colar as instrues no seu cdigo em Visual Basic. Mas vale a pena aprender pelo menos as instrues mais importantes em SQL. Com isso voc j conseguira usar muito do seu potencial. Talvez o maior problema para os que j utilizavam uma linguagem procedural (Basic, Clipper, Fortran, Cobol, etc), ao lidar com a SQL seja o seguinte: Voc tem que mudar a forma de pensar ao programar com SQL. Estas linguagens ditas da terceira gerao, so caracterizadas por comandos que dizem ao computador exatamente o que fazer em estruturas sequenciais executadas passo a passo. So chamadas de linguagens procedurais. A SQL,por outro lado, caracterizada por ser uma linguagem declarativa, ou seja, ela diz ao computador o que quer que ele faa, sem se preocupar de que forma o trabalho ser realizado, o que importa o resultado. A SQL composta de subconjuntos de comandos para executar diferentes tarefas. Assim podemos dizer que a SQL suporta: Uma linguagem de definio de dados (DDL) Uma linguagem de manipulao de dados (DML) Uma linguagem de segurana de dados (DCL) A DDL permite criar e modificar e excluir a estrutura de uma tabela e seus ndices; seus principais comandos so: CREATE Cria tabelas, campos e ndices num banco de dados.

8. INICIANDO COM A SQL (STRUCTURED QUERY LANGUAGE) A SQL - Structured Query Language (Linguagem de Consulta Estruturada) praticamente

48

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

DROP Remove tabelas e ndices de um banco de dados. ALTER Altera a estrutura de uma tabela de um banco de dados. A DML permite manipular os dados (Inserir, Excluir e Atualizar) bem como executar consultas atravs da recuperao de subconjuntos de dados para posterior tratamento. seus principais comandos so: SELECT Seleciona um conjunto de registros de uma ou mais tabelas usando um critrio especfico. INSERT Adiciona dados a uma tabela. UPDATE Atualiza os dados de uma tabela segundo critrios especficos. DELETE - Remove registros de uma tabela. A DCL permite a implementao da segurana interna do Banco de dados.Seus comandos principais so GRANT e REVOKE, mas como no suportada pela plataforma Access, no iremos utiliz-la. 8.1. Criando Tabelas via SQL. Vamos criar via SQL as tabelas atravs da a estrutura dos dados que so dados a seguir: TblAlunos TblCursos TblNotas TblProfessor codaluno codcurso codaluno codprofessor nome nomecurso codcurso nome endereco codprofessor nota endereco telefone ano telefone nascimento bimestre nomepai Observacao nomemae observacao Periodo serie numero Obs : Codaluno , Codcurso, CodProfessor so chaves primrias de suas respectivas tabelas. Para exercitar iremos definir os relacionamentos entre as tabelas da seguinte forma (figura 1.0 abaixo:

Figura 23. Estrutura do banco de dados com quatro tabelas. A tabela tblprofessor pode ser definida como a seguir (Access SQL): CREATE TABLE tblprofessor (codprofessor INTEGER CONSTRAINT primarykey PRIMARY KEY, nome TEXT (50), endereco TEXT (50), telefone TEXT (15) );

Microsoft Visual Basic Iniciando com a SQL (Structured Query Language)

49

A instruo CREATE TABLE ir criar a tabela tblprofessor, com as definies da lista de campos entre parnteses, separados um dos outros por vrgulas. Cada descrio de campo possui duas partes: o nome do campo e o tipo de dados os quais so separados por um espao entre si. A clusula CONSTRAINT utilizada para definir a chave primria codprofessor. Para criar a tabela no VB execute a instruo CREATE TABLE passando-a como parmetro do mtodo Execute do objeto Database. Ex: db.Execute ("CREATE TABLE...") Os nomes dos tipos de dados utilizados pelo JET no igual aos nomes exigidos pelas instrues SQL. Veja na tabela a abaixo a correspondncia entre ambos: Tabela 14. Tipos de dados uportados pelo JET e pela A SQL Tipos de Dados SQL BIT BYTE COUNTER CURRENCY DATETIME SINGLE DOUBLE SHORT LONG LONGTEXT LONGBINARY TEXT Tipos de dados do JET YES/NO NUMERIC - BYTE COUNTER - Contador CURRENCY - Moeda DATE/TIME NUMERIC - SINGLE NUMERIC - DOUBLE NUMERIC - INTEGER NUMERIC - LONG MEMO OLE OBJECTS TEXT

A tabela TblCursos ser criada pela instruo: CREATE TABLE tblcursos (codcurso INTEGER CONSTRAINT primarykey PRIMARY KEY,nomecurso TEXT (15), Codprofessor INTEGER CONSTRAINT tblprofessorFK REFERENCES tblprofessor); A clusula CONSTRAINT utilizada para definir uma chave primria e uma chave externa. Note que existe uma relao de um para muitos entre a tabela TblProfessor e a tabela TblCursos, sendo que a coluna codprofessor da tabela TblCursos, uma chave estrangeira (Foreign Key - FK ) 8.2. ndices e Tabelas - Criar, Alterar e Excluir 8.2.1. Excluindo Tabelas Para excluir uma tabela via SQL usamos a instruo DROP TABLE nome da tabela. Assim para excluir a tabela tblalunos criada anteriormente fazemos: DROP TABLE tblalunos A tabela e todo o seu contedo so excluidos. 8.2.2. Alterando Tabelas Para alterar uma tabela, adicionando ou excluindo um campo da tabela, usamos a instruo: ALTER TABLE 1- Na incluso de um campo temos que especificar o NOME, TIPO e TAMANHO do campo, e usar a clusula ADD COLUMN Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos: ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50)

50

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

2- Na excluso de um campo basta especificar o nome do campo e usar a clusula DROP COLUMN O cdigo abaixo exclui o campo NOME da tabela tblalunos ALTER TABLE tblalunos DROP COLUMN nome Note que no ser possvel excluir um campo empregado em um ndice ou em uma relao. 8.2.3. Criando ndices Podemos criar um ndice de um nico campo ou um ndice de vrios campos com a instruo: CREATE INDEX. Na criao do ndice devemos informar o nome do ndice o nome da tabela e pelo menos um campo a ser includo como ndice. Assim se quisermos criar um ndice pela data de nascimento na tabela tblalunos fazemos: CREATE INDEX nascimento ON tblalunos (nascimento) A instruo abaixo cria um ndice chamado series, usando os campos serie e periodo da tabela tblalunos, sendo que serie ser usado na ordem ASCENDENTE e periodo na ordem DESCENDENTE. CREATE INDEX series ON tblalunos(serie ASC, periodo DESC) 8.2.4. Excluindo ndices Para excluir um ndice de uma tabela utilize a instruo DROP INDEX, devemos informar o nome do ndice e o nome da tabela. Assim para excluir o ndice serie criando anteriormente fazemos: DROP INDEX series ON tblalunos 8.3. Testando As Instrues SQL Para criar e testar todas essas instrues SQL voc pode codific-las direto no Visual Basic e executar o cdigo para ver o resultado, para isto voce dever usar o mtodo Execute (ver a seguir) do objeto DataBase, mas voc pode usar os seguintes meios: 1-) O aplicativo VISDATA que acompanha o Visual Basic 2-) O Microsoft Access 3-) O Microsoft Query (para usurios do Excel ou Office) aconselhado a evitar a codificao quando estiver testando as instrues, pois tanto o VISDATA como o Access so mais fcies de usar e lhe do o resultado de imediato. 8.4. SQL - Criando Consultas Parametrizadas O Microsoft Access nos d a possibilidade de criar e armazenar consultas dentro do arquivo de banco de dados. A vantagem em armazenar as consultas no banco de dados que para executar uma instruo SQL o JET verifica erros de sintaxe, depois ele tenta otimizar a instruo e a seguir executa a instruo, tudo isto leva tempo e a coisa piora se voc estiver executando as mesmas instrues SQL diversas vezes, pois o JET ter que refazer tudo novamente. Ao criar e armazenar definies de consultas atravs de instrues SQL o Access analisa a instruo e a otimiza s ento ele armazena a instruo original e a otimizada, quando for executar a instruo o trabalho estar feito e o tempo de execuo ser diminuido.

Microsoft Visual Basic Iniciando com a SQL (Structured Query Language)

51

Cada consulta armazada em um banco de dados Access um objeto QueryDef, o conjunto de objetos QueryDef compem a coleo QueryDefs do objeto Database. Ento uma QueryDef uma consulta SQL pr-compilada e pr-otimizada. Para criar uma QueryDef usamos o mtodo CreateQuery do objeto DataBase ou a criamos diretamente usando o prprio Microsoft Access. O CreateQuery necessita de dois parmetros: o nome da QueryDef e a instruo SQL que o cria. Vejamos com o criar uma consulta SQL e armazen-la no banco de dados: Para criar uma consulta chamada Lista_Alunos , que lista todos os alunos por ordem alfabtica da tabela tblalunos e armazen-la no banco de dados Escola.mdb, fazemos o seguinte: Dim db as Database Dim qd as QueryDef set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER BY nome" Uma vez criada a QueryDef podemos execut-la e manipul-la como um recordset: Dim Dim set set db as Database dyn as Recordset db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)

Ou elimin-la : db.Querydefs.Delete "Lista_alunos" Para tirar maior proveito das QueryDefs costuma-se cri-las de forma que aceitem parmetros, para isto usamos a palavra-chave PARAMETERS para passar um ou mais parmetros para as consultas SQL. Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma determinada srie, para isso criamos a consulta e passamos o parmetro da srie desejada : Dim db as Database Dim qd as QueryDef Dim dyn as Recordset Dim Sql as String set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie = pSerie " sql=sql & " ORDER BY nome " set qd=db.CreateQueryDef("Lista_alunos", Sql ) qd.Parameters("pSerie")= "1" set dyn= qd.OpenRecordset() 8.4.1. Mtodos de QueryDef Os mtodos usados pelas QueryDefs so: Execute e OpenRecordset. O mtodo Execute usado para executar comandos de ao como DELETE ou UPDATE que no retornam um conjunto de registros , usado tambm para criar tabelas e ndices via instruo SQL. O mtodo OpenRecordset usado para retornar um conjunto de registros como resultado da consulta.

52

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Assim para apagar todos os alunos inativos, fazemos: Dim db as Database Dim qd as QueryDef Dim dyn as Recordset Dim Sql as String set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") sql= "DELETE * FROM tblalunos WHERE ativo=False " set qd=db.CreateQueryDef("Apaga_alunos", Sql ) qd.Execute As QueryDef possuem as seguintes propriedades: MaxRecords - fixa um limite que um QueryDef pode retornar Name - Armazena e define o nome de um consulta RecordsAffected - armazena o nmero de registros afetados por um comando Execute. SQL - Retorna o comando SQL que originou a consulta.

Microsoft Visual Basic Trabalhando com banco de dados Access

53

9. TRABALHANDO COM BANCO DE DADOS ACCESS


Aplicao que acessem bancos de dados so sempre requeridas seja no comrcio em geral, como por grandes empresas e por que no pela agropecuria. Desta forma iremos detlhas inicialmente como acessar um banco de dados Access e os principais procedimentos, eventos que o DBEngine (Motor de banco de dados DAO 3.5) pode nos oferecer. 9.1. Criando um Banco de Dados Um banco de dados composto principalmente por tabelas e dentro de cada tabela termos campos onde sero armazenados os dados. Estes campos podem ter tamanho como tipo de dado a ser armazenados diferentes. So eles: Tabela 15. Tipos de dados suportados pelo banco de dados Access Tipo de Dado Boolean Byte Integer Long Currency Single Double Date/time Text Long Binary (Ole Object) Memo GUID Constante no Visual Basic dbBoolean dbByte dbInteger dbLong dbCurrency dbSingle dbDouble dbDate dbText dbLongBinary dbMemo dbGUID Descrio Verdadeiro/Falso Byte 0-255 Inteiro Longo Moeda Simples Duplo (negativo/positivo) Data ou hora Texto at 255 caracteres Objeto OLE (figura, arquivo, etc). Memorando texto longo Global Unique Identifier

Recomenda-se ao programador estruturar bem o banco de dados antes mesmo de escrever se quer uma linha de comando no Visual Basic, ou seja, lanar mo de um bom organograma para que o banco de dados seja bem estruturado e a partir da comear a escrever as linhas de cdigo que daro acesso, s informao, podendo o usurio inserir, editar e excluir os dados contidos na base de dados. Existem vrios materiais gratuitos na Internet sobre como estruturar um banco de dados e mesmo sobre o programa Microsoft Access, portanto necessrio que o programador entenda bem das estrutura do banco de dados que pretende trabalhar e com certeza entender sobre SQL pelo menos o bsico.
Banco de Dados Tabela Disciplinas Codigo 125 254 632 Disciplina Portugus Matemtica Histria do Brasil Tabela Exame Ident 1 2 3 IDAluno 001 001 001 IDExame 125 254 632 Nota 8,0 8,5 9,0 Codigo 001 002 003 Tabela Alunos Nome Joo da Silva Jos Amrico de Novaes Marcelo Paes Gulart

Figura 24. Organograma simples de um banco de dados. As linhas pontilhadas indicam o relacionamento entre as tabelas.

54

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

9.2. O Modelo DAO (Data Access Object) O DAO (Data Access Object - Objeto de Acesso a Dados) uma hierarquia de classe, equivalentes a uma viso logica de um sistema relacional de dados, utilizada para criara objetos de acesso. Como se trata de uma hierarquia, muitas dessas classes pertencem a uma coleo que, por sua, vez pertence a outras, como ilustra o a Figura 25. O DBEngine possui uma coleo chamada Workspaces, que pode conter um ou mais objetos Workspace. Um objeto Workspace estabelace um rea de trabalho uma sesso para um usurio, contendo m;utiplas bases ou conexes abertas e mecanismos para o gerenciamento de transaes (uma srie de alteraes de dados inclusive de bases externas). Quando um objeto Workspace referenciado pela primeira vez no cdigo, automaticamente criada uma rea padro (DBEngine.Workspace(0)) e os valores para as propriedade Name (nome da "workspace") e UserName (nome do usurio) so, respectivamente, "#Default Workspace#" e "Admin". Como a DAO um conjunto de classes, para declarar os objetos no cdigo nasta informar seu nome e o tipo ao qual se refere: Dim WS As Workspace
DBEngine WorkSpace Database Container Document QueryDef Field Parameter RecordSet Field Relation Field TableDef Index Field Field Error

User Group

Group User

Figura 25. Hierarquia de Classes DAO Objetos membros de uma coleo so acessados atravs de ndices (a partir de zero). Assim, por exemplo, para identificar de modo completo a coluna Cdigo do primeiro TableDef numa coleo TableDefs do primeiro Database de uma coleo Databases do primeiro Workspace de uma coleo Workspaces do Dbengine, escrevemos: DBEngine.Workspaces(0).Databses(0).TableDefs(0).Fields("nome") Este exemplo nos faz lembrar que, quando a referncia a um membro for explcita , isto , no desejarmos utilizar um ndice da coleo, as duas formas seguintes so equivalentes: Tabela.Fields("Nome") Tabela.Fields!Nome A programao com objetos de acesso a dados consiste na criao de variveis a fim de configurar as propriedades e invocar os mtodos desses objetos. Por exemplo: Dim Area AS Workspace, Banco As Database, Tabela As Recordset Set Area = DBEngine.Workspace(0) Set Banco = Area.OpenDataBase(App.Path & "\sample.mdb")

Microsoft Visual Basic Trabalhando com banco de dados Access

55

Set Tabele = Banco.OpenRecordSet ("Clientes") Tabela.Index = "Nome" O mtodo OpenDatabase do objeto Area invocado para efetuar a abertura da base de dadoa "sample.mdb" e fazer a atribuio da varivel de objeto Banco. O mesmo acontece com o mtodo OpenRecordSet de Banco: utilizado para criar um "recordeset"(um conjunto de registros que representam uma tabela ou o resultado de uma consulta na base de dados) e fazer a atribuio varivel de objeto Tabela. Depois disso, podemos atribuir proproedade Index do objeto Tabela o ndice "nome"". Para o programador poder trabalhar com banco de dados este dever referenciar a biblioteca (DLL) que ir geenciar o banco de dados. A biblioteca mais recomendada a MS DAO 2.5/3.0 Compatibility Libary e MS DAO 2.5/3.5 Compatibility Libary, para evitar problemas de compatibilidade entre verses e abertura das bases de dados criadas pelo Visual Basic ou pelo MS Access. Caso o programador esteja trabalhancdo com VB6 pode realizar o download do MDAC v2.6 ou 2.7 (Microsoft Data Access Compnents v2.7) no site da Microsoft pois este pscote possui ao verso 3.6 do DAO que permite acesso baco de dado do MS Access 2000 Este pacote tambm requerido para que se faa a instalao do Service Pack 5 do VB. Para referenciar uma destas bibliotecas, basta acessar o menu Project/Reference e selecionar a biblioteca desejada. 9.3. Abrindo um Banco de Dados possvel abrir ou acessar um banco de dados diretamente do motor (DBEngine) ou atravs do controle de dados DataControl, que um controle padro da biblioteca do Visual Basic. Devemos fazer alguns comentrios de acesso a banco de dados no que se refere ao tipo de acesso como mostra a tabela a seguir. 9.3.1. Recordset

9.3.1.1. dbOpenTable Permite acesso a somente uma tabela do banco de dados e lhe permite trabalhar os dados. No possvel utilizar uma instruo SQL para extrair dados, somente o nome da tabela. Por Exemplo: Dim tblPais As Recordset Set tblPais = Dbase.OpenREcordSet ("Paises", dbOpenTable) Cdigo 15. Rotina para acesso a dados de uma tabela utilizando a instruo dbOpenTable 9.3.1.2. dbOpenDynaset Permite extrair dados de uma ou mais tabelas usando uma instruo SQL. O conjunto de dados retornado atualizvel. Um dynaset no consiste em dados reais, mas em vez disso uma lista das referncias para as localizaes de dados dentro das tabelas. Tipicamente o programador utilizaria um dynaset em uma tela de edio onde os dados esto sendo apresentados para os usurios para adio, edio e excluso. Por exemplo: Dim tblPais As Recordset Set tblPais = Dbase.OpenREcordSet ("SELECT * FROM Paises ORDER BY SIGLA", dbOpenDynaset) Cdigo 16. Rotina para acesso a dados de uma tabela utilizando a instruo dbOpenDynaset, utilizando instrues SQL.
Como um dynaset consiste em uma coleo de referncias e no de dados reais, ele no acessa os dados subjacentes at que um campo seja referenciado no aplicativo. Desse modo, o programador tema a certeza de que os dados apresentados so atuais, um detalhe importante em sistemas multiusurios.

56

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

9.3.1.3. dbOpenSnapshot Como um dynaset, um snapshot permite extrair dados de uma ou vrias tabelas usando uma instruo SQL, mas o conjunto do resultado no editvel. Um snapshot consiste em uma cpia fixa dos dados reais que existem no banco de dados ao tempo que o Sanpshot criado. Uma vez que uma snapshot seja criado, os dados retornados tornam-se independentes da cpia original no disco, e as referncias subsequentes a um campo snapshot podem no necessariamente refletir os dados subjacentes mais atuais. Como os snapshots no precisam verificar o disco toda vez que um campo referenciado, eles so consideravelmente mais rpidos que os dynasets. necessrio ter cuidado ao utilizar um sanpshot. Como est extraindo os dados para a estao de trabalho, consideravelmente mais memria utilizada do que ao criar um dynaset. Uma vez que a memria pode ficar toda ocupada, o VB comear a transferir dados para o disco. Neste ponto, a degradao no desempenho comear a ser sentida. Se o snapshot for grande o bastante e o espao de transferncia ficar todo ocupado, o aplicativo ir diparar mensagem de erro ou mesmo poder ficar paralisado. 9.3.1.4. dbOpenFowardOnly Os recordsets do tipo Foward-only permitem que os usurios passem uma vez por um recordset. Esta opo til para as operaes tais como quando se est carregando uma caixa de combinao (ComboBox) ou uma caixa de listagem (ListBox) com os dados de uma tabela como mostra o Cdigo 17. Public Sub CarregaDados(oList As ListBox) Dim oDataBase As Database Dim snpDici As Recordset
'oList o nome do da caixa de listagem que ir receber os dados do recordset 'Esta subrotina acessa a base de dados NWind.mdb padro do VB Set oDataBase = DBEngine.OpenDatabase(App.Path & "\Nwind.mdb") 'Esta sub-rotina assume uma tabela com pelo menos duas colunas: CompanyName e descr Set snpDici = oDataBase.CreateSnapshot("SELECT * FROM Customers ORDER BY CompanyName", dbForwardOnly) 'Percorre listagem o Snapshot em um lao e acrescenta os dados na caixa de

Do While Not snpDici.EOF oList.AddItem snpDici!ContactName & vbTab & snpDici!CompanyName snpDici.MoveNext Loop snpDici.Close Set snpcdic = Nothing End Sub 'Para carregar os dados acrescente a seguinte linha de comando no evento Load Private Sub Form_Load() CarregaDados Me.List1 End Sub

Microsoft Visual Basic Trabalhando com banco de dados Access

57

Cdigo 17. Preenchendo uma caixa de listagem com dados de uma tabela utilizando o recordeset do tipo Foward-only.

9.3.1.5. dbAppendOnly Permite o usurio acrescentar novos registros, porm impede a edio e excluso dos registros existentes, inclusive dos que ele adicionou. 9.3.1.6. dbReadOnly Permite somente a consulta de dados, ou seja, no possvel acrescentar, editar ou excluir
dados.

9.3.1.7. dbSeeChanges Dispara um erro de execuo se um usurio estiver alterando os dados que outro usurio estiver editando. Este tipo de recordset ideal para rede multiusurios.
9.3.2. Utilizando o Motor do Banco de Dados DBEngine Para abrir um banco de dado necessrio referenciar a biblioteca DAO desejada. A sintaxe de abertura de um banco de dados Access como segue: Set database = workspace.OpenDatabase (dbname, options, read-only, connect) Tabela 16. The OpenDatabase method syntax has these parts11. Part database workspace dbname options read-only connect Description An object variable that represents the Database object that you want to open. Optional. An object variable that represents the existing Workspace object that will contain the database. If you don't include a value for workspace, OpenDatabase uses the default workspace. A String that is the name of an existing Microsoft Jet database file, or the data source name (DSN) of an ODBC data source. See the Name property for more information about setting this value. Optional. A Variant that sets various options for the database, as specified in Settings. Optional. A Variant (Boolean subtype) value that is True if you want to open the database with read-only access, or False (default) if you want to open the database with read/write access. Optional. A Variant (String subtype) that specifies various connection information, including passwords.

'This example uses the OpenDatabase method to open one Microsoft Jet database. Sub OpenDatabaseX() Dim wrkJet As Workspace Dim dbsNorthwind As Database ' Create Microsoft Jet Workspace object. Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) ' Open Database object from saved Microsoft Jet database ' for exclusive use. MsgBox "Opening Northwind..." Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True)
11

Extrado do Arquivo de Ajuda do Visual Basic v5.0

58

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

End Sub Cdigo 18. Rotina para abertura de uma base de dados MS Access12. Caso a base de dados possuir uma senha esta dever ser informada como segue o exemplo abaixo: Sub OpenDatabaseX() Dim wrkJet As Workspace Dim dbsNorthwind As Database ' Create Microsoft Jet Workspace object. Set wrkJet = CreateWorkspace("", "admin", "", dbUseJet) ' Open Database object from saved Microsoft Jet database ' for exclusive use, don't read-only, and with password. MsgBox "Opening Northwind..." Set dbsNorthwind = wrkJet.OpenDatabase("Northwind.mdb", True, False,";PWD=senha") End Sub Cdigo 19. Rotina para abertura de uma base de dados MS Access com senha. 9.3.3. Utilizando o Controle DataControl Para Ter acesso a um banco de dados atravs do controle Data, inicialmente o programador dever inserir um deste controle no formulrio. No evento Load as seguintes linhas de cdigo devero ser especificadas. Private Sub Form_Load() With Data1 .DatabaseName = App.Path & "\Nwind.mdb" 'Abre o banco de dados .RecordSource = "Customers" 'Especifica qual a tabela o controle dever acessar os dados End With End Sub Cdigo 20. Rotina para acesso a um banco de dados do tipo MS Access. 9.4. Acessando Dados de uma Tabela O acesso a dados de uma determinada tabela pode ser feito atravs do controle DataControl ou atravs de uma instruo SQL. 9.4.1. Acesso Dados de uma Tabela Utilizando o DataControl Como foi visto no tpico Utilizando o Controle DataControl, o acesso ao banco de dados e o acesso a uma tabela, porm no somente atravs de cdigo o programador poder especificar a tabela que o controle dever acessar, pois na janela propriedades e na propriedades RecordSource este valor (nome da tabela) poder ser especificado. Obviamente que este procedimento d menor flexibilidade ao programador, caso ele queira alterar o valor, mas como quase tudo no Visual Basic possvel, caso voc tenha especificado o valor e queira alter-lo, basta modifica-lo via cdigo, como demonstrado no Cdigo 20. 9.4.2. Acesso Dados de uma Tabela Utilizando Instruo SQL O acesso a dados de uma tabela com certeza fica mais dinmico quando lanamos mo das instrues SQL, portanto conhecimentos bsicos desta linguagem so requeridos ara se trabalhar com banco de dado seja ele qual for. A flexibilidade de ordenar, agrupar e mesmo filtrar dados proporcionada pela SQL sempre bem vinda em aplicao crticas e que usam banco de dados

12

Extrado do Arquivo de Ajuda do Visual Basic v5.0

Microsoft Visual Basic Trabalhando com banco de dados Access

59

robustos. Apesar do MS Access ter suas limitaes, o uso de instrues SQL torna mais rpido o acesso aos dados. possvel utilizar as instrues SQL em conjunto com o DataControl, como podemos verificar no Cdigo 21. Private Sub Form_Load() With Data1 .DatabaseName = App.Path & "\Nwind.mdb" 'Abre o banco de dados 'Especifica qual a tabela o controle dever acessar os dados via instruo SQL 'O asterisco(*) indica que todos os campos da tabela sero carregados, entretanto nunca especifique o asterisco juntamente com a instruo SQL GROUP BY, pois o motor do banco de dados exibir um erro de sintaxe de instruo SQL. .RecordSource = "SELECT * FROM Customers ORDER BY CompanyName" End With End Sub Cdigo 21. Rotina para acesso a dados de uma tabela via instruo SQL 9.5. Adicionando, Localizando, Editando e Excluindo Dados de uma Tabela Agora vamos exemplificar como podemos adicionar, edita r e excluir dados em uma tabela. 9.5.1. Adicionado Dados Para preparar a tabela para receber um novo registro necessrio que o nmero de registro de uma tabela seja verificado, evitando assim erros, no cdigo que segue possvel verificar o teste do n. de registro da tabela e em seguida atravs de estrutura de deciso especificar a linha de comando desejada (declarao) Public Sub AddNew() With Data1 'Inicia o lao with 'Verifica o nmero de registro da tabela If .Recordset.RecordCount <> 0 Then 'Se for diferente de zero 'Move o registro para o ltimo .Recordset.MoveLast 'Prepara a tabela para adicionar um novo registro .Recordset.AddNew Else 'Seno 'Somente prepara a tabela para adicionar um novo registro .Recordset.AddNew End If End With 'Finaliza o lao with End Sub Cdigo 22. Rotina para preparar uma tabela para receber novos dados (registro) Obviamente que antes de iniciar uma rotina desta, o banco de dados e a tabela deveram ter sido especificados, pois se no este procedimento ir gerar um erro. Com a utilizao do DataControl possvel vinculara TextBox, ListBox, Label, ComboBox e outros controles que possuam as propriedade DataField e DataSource. A propriedade DataField especifica qual o campo da tabela o controle estar vinculado e a propriedade DataSource, especifica a qual controle DataControl o objeto est vinculado, ou seja, se o programador especifica o caminho do banco de dados e o nome da tabela em um controle Data (nome=Data1)e em seguida especifica as propriedades de uma caixa de texto, DataSource como Data1 e DataField

60

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

como Code, significa que a caixa de texto estar ligada aos dados da tabela do banco de dados especificada e exibir os dados do campo Code. Vale lembrar que estas propriedades poder ser alterada via cdigo, ou seja, em Run-Time. Aps o preparo da tabela para receber o novo registro necessrio ao final salva-lo, pois por se s o mtodo AddNew, no garante a adio no banco de dados. Para adicionar um registro sempre necessrio iniciar o mtodo AddNew e em seguida o mtodo UpdateRecord, como pode ser visto no Cdigo 23. Public Sub SaveReg () 'Salva fisicamente os dados no registro preparado pelo mtodo AddNew Data1.UpdateRecord 'Cria um Bookmark (marca), onde aps o registro ser salvo o banco de dados aponta para o ltimo registro modificado, neste caso o registro recm adicionado Data1.Recordset.Bookmark = Data1.Recordset.LastModified End Sub Cdigo 23. Rotina para gravar dados em uma tabela do banco de dados. 9.5.2. Localizando Dados Antes de editar um dado necessrio localiza-lo de forma precisa e rpida, nesta hora entra a perspiccia do programador. Existem duas formar de localizar um determinado registro dentro da tabela. So elas via as instruo do prprio DataControl ou via SQL. Vale lembrar que as instrues do SQL d ao programador maior flexibilidade para trabalhar do que as instrues do DataControl. Para localizar um determinado dado o programador deve ter em mente quais o campos podero ser utilizados para localizar, ou seja, numa tabela com 20 campos, necessrio que alguns deles seja utilizado como fontes de pesquisa. Para exemplificar, digamos que destes 20 campos escolhemos 4 (codigo, produto, tipo, fornecedor). Assim o Cdigo 24 exemplifica de forma simples como localizar os dados atravs do DataControl e SQL. 'Localizando dados atravs do DataControl Public Sub Localiza(sDado As String) Data1.Recordset.FindFirst " campo ='" & sDado & "'" End Sub 'Localizando dados atravs da SQL Public Sub Localiza (sDado As String) Dim rsLocal As Recordset Set rsLocal = DB.OpenRecordset _ ("SELECT * FROM tabela WHERE campo ='" & sDado & "'" _ , dbOpenSnapshot) End Sub 'No local onde est escrito campo voc pode substitui pelo verdadeiro nome do campo, obviamente deve-se tomar cuidado no momento de especificar este nome pois se o campo no existir o Visual Basic gera um erro "Item Not found in this collection" Cdigo 24. Rotina para localizar dados dentro de uma tabela, utilizando as instrues do DataControl e instrues SQL.

Microsoft Visual Basic Trabalhando com banco de dados Access

61

O DataControl possui ainda outras variantes para pesquisa, so elas: FindLast, FindNext, FindPrevious. FindFirst localiza o primeiro registro de acordo com o parmetro passado; FindLast localiza o ltimo registro de acordo com o parmetro passado; FindNext localiza o registro seguinte ao primeiro de acordo com o parmetro passado; FindPrevious localiza o registro anterior ao localizado de acordo com o parmetro passado. Outra instruo que pode ser utilizada pelo DataControl Seek, porm este tipo de instruo somente aceito em RecordSet do tipo Table. Outro inconveniente de te mtodo e que o ndice deve ser indicado na propriedade Index do DataControl. A instruo de consulta da SQL tambm possui flexibilidade, por exemplo, filtrar todos os produtos com um determinado cdigo. Neste momento lanamos mo da instruo LIKE. Como mostra ao Cdigo 25. Public Sub Localiza (sDado As String) Dim rsLocal As Recordset Set rsLocal = DB.OpenRecordset _ ("SELECT * FROM tabela WHERE campo LIKE'" & sDado & "'" _ , dbOpenSnapshot) End Sub Cdigo 25. Rotina para filtrar os dados de uma tabela Dentro da instruo LIKE possvel utilizar caracteres curinga, tais como: *, ?, %, _. Entretanto o trema (') e restringido por esta instruo e gera um erro quando por exemplo o registro a ser localizado tiver a seguinte forma: D'Avila.

9.5.2.1. Exemplo de como Localizar Dados13 Para este exemplo voc precisar dos seguintes objetos num formulrio: Controle Propriedade Atributo Name: OpLTitulo OptionButton Caption: L&ocalizar no Ttulo Value: True OpLDica Name: OptionButton Lo&calizar no texto da dica Caption: False Value: ComboBox Name: cboLocal Treeview Name: tvwLocal ImageList Name: imgTVW Name: cmdSearch CommandButton Caption: &Localizar
Private Sub cmdSearch_Click() On Error GoTo Err_Local 'Se houver algum erro o programa ir redirecionar para Err_Local Dim xNode As Node 'Declara a varivel xNode como Node Dim rsTitle As Recordset 'Declara a varivel rsTitle como RecordSet If Trim(cboLocal.Text) = Empty Then 'Se no tiver nenhuma palavra digitada a seguinte mensagem MsgBox "Digite com pelo menos uma palavra para iniciar a pesquisa no banco de dados!", vbExclamation, Titulo Exit Sub
13

Cdigo extrado do programa Lizaro Visual Basic Dicas v3.0

62

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

End If Me.tvwLocal.Clear 'Limpa os nodes do Treeview cboLocal.AddItem cboLocal.Text 'Adiciona a palavra digitada no List do ComboBox 'Localiza o ttulo a partir de pelo menos uma palavra digitada no ComboBox. If Me.opLTitulo.Value Then 'O caractere curinga asterisco(*), permite localizar a palavra em aulauer parte do campo titulo Set rsTitle = DB.OpenRecordset("SELECT * FROM tbdicas WHERE titulo LIKE '*" & Me.cboLocal.Text & "*'") Else 'Essa opo somente permite localizar o titulo exatamente como ele foi inserido na tabela Set rsTitle = DB.OpenRecordset("SELECT * FROM tbdicas WHERE dica LIKE '" & Me.cboLocal.Text & "'") End If If rsTitle.RecordCount <> 0 Then 'Se registro(s) que satisfao a pesquisa fome localizado 'Os titulo sero inserido num Treeview 'Inicia o lao at que o ltimo registr que satisfaa a consulta sej alcanado Do Until rsTitle.EOF Set xNode = tvwLocal.Nodes.Add(, , , rsTitle!Titulo) xNode.Image = "dica" 'Na ImageList dever conter uma imagem (cone) com o valor key igual a dica xNode.SelectedImage = "vis" 'na ImageList dever conter uma imagem (cone) com o valor key igual a vis rsTitle.MoveNext 'Move o registro para o prximo 'finaliza o lao qunado o final da pesquisa/consulta for alcanada Loop Else 'Caso nenhum registro for encontrado exibida a seguinte mensagem MsgBox "A(s) palavra(s) '" & cboLocal.Text & "'" & vbCrLf & _ "no foi(am) localizada(s) no banco de dados!", vbExclamation, Titulo End If Exit Sub Err_Local: Call SaveErros 'Chama uma rotina para exibir erros End Sub Cdigo 26. Rotina para localiza dados dentre de uma tabela, utilizando SQL e em seguinda preenchendo uma TreeView com os dados encontrados. Uma sugesto para o layout do exemplo anterior mostrado na Figura 26.

Microsoft Visual Basic Trabalhando com banco de dados Access

63

Figura 26. Layout para pesquisa de dados do programa Lizaro Visual Basic Dicas v3.0 9.5.3. Editando Dados Sempre necessitamos alterar dados dentro de uma tabela, pois os dados so dinmicos ou mesmo pelo fato do digitador ter errado alguma coisa na hora de inserir as informaes, portanto sempre bem vinda a opo editar dados em um projeto que possuam conexo com banco de dados. O Cdigo 27 ilustra de forma simples uma rotina de como editar um registro de uma tabela. Public Sub EditReg() Data1.Recordset.Edit End Sub Cdigo 27. Rotina para editar um registro gravado em uma tabela do banco de dados. 9.6. Compactando e Recuperando um Banco de Dados Sempre que valores so inseridos ou excludos das tabelas de um banco de dados, espaos vazios acabam sendo criados, assim para limpara este espao vazios necessrio compactar o banco de dados para tal. Outro recurso que o DBEngine (motor do banco de dados) oferece a recuperao de um banco de dados. Esta opo funciona quando o banco de dados est corrompido por algum motivo, assim ele no poder ser acessado pelo DBEngine e consequentemente pelo programa. Assim est duas rotina so bem vindas no incio da aplicao que trabalha com banco de dados, obviamente recupera-se e depois compacta-se. Outro detalhe para estas operaes funcionarem sem erro a base de dados no poder est sendo utilizada por outro usurio, ou seja, dever estar fechada. Devemos ressaltar que a compcatao e restaurao (reparao) abordada aqui somente servem somente para banco de dados MS Access e recomendamos uma leitura mais detalhada da ajuda do Visual Basic para melhor esclarecimento de todas as opes oferecidas por estes mtodos. 9.6.1. Compactando Banco de Dados Agora veremos duas rotinas para compactar o banco de dados com senha e sem senha, como segue abaixo lembre-se que o banco de dados dever esta fechado. Sub Compacta_Database() Dim dbsNorthwind As Database 'Fecha o banco de dados para evitar erros dbsNorthwind.Close 'Verifica se j existe um arquivo com o nome do arquivo a ser compactado

64

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

If Dir("NwindBackup.mdb") <> "" Then Kill "NwindBackup.mdb" 'Cria uma versao compactada do banco de dados DBEngine.CompactDatabase "Northwind.mdb", "NwindBackup.mdb", dbLangGeneral Set dbsNorthwind = OpenDatabase("NwindBackup.mdb") End Sub Cdigo 28. Rotina para compactar um banco de dados sem senha.14 Sub Compacta_Database() Dim dbsNorthwind As Database 'Fecha o banco de dados para evitar erros dbsNorthwind.Close 'Verifica se j existe um arquivo com o nome do arquivo a ser compactado If Dir("NwindBackup.mdb") <> "" Then Kill "NwindBackup.mdb" 'Cria uma versao compactada do banco de dados DBEngine.CompactDatabase "Northwind.mdb", "NwindBackup.mdb", dbLangGeneral,,";pwd=senha" Set dbsNorthwind = OpenDatabase("NwindBackup.mdb") End Sub Cdigo 29. Rotina para compactar um banco de dados com senha.15 9.6.2. Recuperando Banco de Dados Sub Repara_Database() Dim erro_Loop As Error If MsgBox("Deseja reparar o arquivo Northwind ?", _ vbYesNo) = vbYes Then On Error GoTo Erro_Repara DBEngine.RepairDatabase "Northwind.mdb" On Error GoTo 0 MsgBox "Fim Do processo de reparao !" End If Exit Sub Erro_Repara: For Each erro_Loop In DBEngine.Errors MsgBox " A reparao falhou...!" & vbCr & "Erro errLoop.Number & _ vbCr & erro_Loop.Description Next erro_Loop End Sub Cdigo 30. Rotina para recuperar um banco de dados corrompido.16 numero: " &

9.7. Salvando e Recuperar Figuras num Banco de Dados em Campo OLE Sem pre existe a seguinte pergunta "E se eu quiser salvar uma figura dentro de uma banco de dados pssvel?" A resposta sim porm a mo de obra pode ser grande at se obter um
14 15 16

Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0 Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0

Microsoft Visual Basic Trabalhando com banco de dados Access

65

cdigo limpo e funcional, abaixo exemplificaremom como salvar e recuperaruma figura de um campo OLE de banco de dados. Entretanto inserir figuras dentro de uma tabela (banco de dados) sempre deixa o acesso a este banco de dados muito lento, primciplamente se os recursos da mquina for escassos. Desta forma prefira somente salvar o caminho da figura no HD (HardDisk Disco Rgido) da figura dentro de um campo na tabela e no momento que a aplicao requerer a figura ela ir buscar no caminho fsico. Bom mas j que a dvida surege eis abaixo a rotina limpa e funcional para armazenar e recuperar uma imagem a partit de um banco de dados. Dim dbTest As Database Dim rstAlbum As Recordset Dim FileLen&, X%, lngOffset&, Chunks%, lngTotalSize& Dim Arr() As Byte Const ArrSize As Integer = 16384 Sub ReadPictureFromDb() On Error Resume Next Open "d:\picture.gif" For Binary Access Write As #1 lngTotalSize = rstAlbum!Picture.FieldSize Chunks = lngTotalSize \ ArrSize Fragment = lngTotalSize Mod ArrSize ReDim Arr(ChunkSize) Arr() = rstAlbum!Picture.GetChunk(lngOffset, ArrSize) Put #1, , Arr() lngOffset = lngOffset + ArrSize With rstAlbum Do While lngOffset < lngTotalSize Arr() = !Picture.GetChunk(lngOffset, ArrSize) Put #1, , Arr() lngOffset = lngOffset + ArrSize Loop Close #1 Close End With End Sub Sub SavePictureToDb() rstAlbum.AddNew Open "c:\picture.gif" For Binary Access Read As #1 FileLen = LOF(1) Chunks = FileLen \ ArrSize Fragment = FileLen Mod ArrSize ReDim Arr(Fragment) With rstAlbum Get #1, , Arr() !Picture.AppendChunk Arr() ReDim Arr(ChunkSize) For I = 1 To Chunks Get DataFile, , Arr() !Picture.AppendChunk Arr() Next Close #1 .Update End With End Sub Private Sub Form_Load() Set dbTest = OpenDatabase("d:\db1.mdb", True) Set rstAlbum = dbTest.OpenRecordset("select * from Album", dbOpenDynaset)

66

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

SavePictureToDb ReadPictureFromDb Set rstAlbum = Nothing dbTest.Close End Sub Cdigo 31. Rotina para salvar e recuperar uma figura dentro dum campo OLE de um banco de dados17.

9.8. Acessando Outros Bancos de Dados Com o Microsoft JET possvel acessar e atualizar outras bases de dados alm do Access. As bases suportadas pelo MSJET so: FoxPro (verses 2.0, 2.5, 2.6, 3.0 e DBC), dBase (verses III, IV e 5.0), MS Excel (verso 3.0, 5.0, 6.0, 7.0, 8.0, ou posteriores), Lotus ( WKS, WK1, WK3 e WK4), HTML, MS Exchange e arquivos ASCII (texto, separados por ponto e vrgula). Entretanto alguns mtodos aplicados ao banco de dados Access, no podem ser aplicados a estas bases de dados, tais como: CompactDatabase, CreateDatabase, CreatField, CreateQueryDef, RepairDatabase e os objetos container, Document, QueryDef e Relation. 9.8.1. Banco de Dados dBase Este tipo de banco de dados pode ser aberto indicando o caminho ("path") atravs do mtodo OpenDatabase, alm do caminho preciso indicar o tipo de acesso e o tipo de verso do banco de dados. No exemplo abaixo mostra o acesso a um banco de dados chamado "Registros.dbf", localizado no diretrio "C:\Aplicao\Bdados". Dim dBase as Database, Table as Recordeset Set dbase =DbEngine.OpenDatabase("C:\Aplicao\Bdados", False, False, "dBase III;") Set Table = dBase.OpenRecordeset("Regitros") 'O argumento dBase III pode ser substitudo por dBase IV ou dBase 5.0, de acordo com a verso do banco de dados. Cdigo 32. Rotina para acesso banco de dados dBase verso III. O MS Jet considera o caminho do bando de dados como o prprio e o banco de ados como se fosse uma tabala. Dim dBase as Database, Table as Recordeset Set dbase =DbEngine.OpenDatabase("C:\Aplicao\Bdados", False, False, "FoxPro 2.5;") Set Table = dBase.OpenRecordeset("Regitros") 'O argumento FoxPro 2.5 pode ser substitudo por FoxPro 2.0, FoxPro 2.6 ou FoxPro 3.0 de acordo com a verso do banco de dados. Cdigo 33. Rotina para acesso banco de dados FoxPro verso 2.5. Dim dBase as Database, Table as Recordeset Set dbase =DbEngine.OpenDatabase("C:\Aplicao\Bdados", False, False, "Excel 4.0;HDR=NO") Set Table = dBase.OpenRecordeset("Regitros#XLS") 'O argumento Excel 4.0 pode ser substitudo por Excel 3.0, Excel 5.0, Excel 6.0, Excel 7.0, etc. de acordo com a verso do banco de dados.

17

Exemplo retirado do programa Lizaro Visual Basic Dicas v3.0

Microsoft Visual Basic Trabalhando com banco de dados Access

67

'O argumento HDR, especifica se a primeira expresso da planulha deve ser ('HDR = YES') ou no ('HDR = NO') considerada como cabeclho das colunas, ou seja, se haver ou no os nomes das colunas Cdigo 34. Rotina para acesso banco de dados Excel verso 4.0. Dim dBase as Database, Table as Recordeset Set dbase =DbEngine.OpenDatabase("C:\Aplicao\Bdados", False, False, "Text;") Set Table = dBase.OpenRecordeset("Regitros") 'Note que o argumento Text no especifica verso, pois o arquivo de texo no necessita deste tipo de parmentro para ser reconhecido pelo MSJet ou por qualquer editor de textos. 'O arquivo contendo os dados, ou seja, que ser a tabaka da base de dados dever possuir a extenso 'TXT' Cdigo 35. Rotina para acesso banco de dados Texto.

68

Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Microsoft Visual Basic Trabalhando com o Controle MSChart no Visual Basic

69

10. TRABALHANDO COM O CONTROLE MSCHART NO VISUAL BASIC


Em aplicao com banco de dados sempre requerido que os dados sejam apresentados na forma de relatrios ou grfico, tamanaha a facilidade de anlise deste atravs destas duas ferramentas. Neste captulo iremos abordar a utilizao do controle Microsoft Chart v5.0. Com este controle possvel gerar grficos de barras, linha e pizza (torta), de oforma simples ou tridimensional.

Figura 27. Controle Microsoft Chart 5.0 Os dados que iro ser plotados no grafico tem origem em um banco de dados, ou mesmo com entrada manual, entretanto os valores inciais so aleatrios e so passveis de alterao em 'Design Time' Atravs da propriedade ChartType, possvel (Design ou Run Time), especificar o tripo de grfico que ser exibido. Assim a tabela seguinte detalha os valores, as contantes e o tipo de grfico exibido. Tabela 17. Tipo de grfico a serem exibidos pela propriedade Chartype, suas constante e valores18. Descrio Barra 3D Barra 2D Linha 3D Linha 2D rea 2D rea 3D Degrau 3D Degrau 2D Combinao 3D Combinao 2D Pizza ou Torta 2D Disperso 2D Valor 0 1 2 3 4 5 6 7 8 9 14 16 Constante VtChChartType3dBar VtChChartType2dBar VtChChartType3dLine VtChChartType2dLine VtChChartType3dArea VtChChartType2dArea VtChChartType3dStep VtChChartType2dStep VtChChartType3dCombination VtChChartType2dCombination VtChChartType2dPie VtChChartType2dXY

A sequncia de dados de um grfico (R1 a R5 na figura anterior) definida pela propriedades RowCount, enquanto a quantidade de colunas, pela propriedade ColumnCount. No grfico do tipo torta (pizza), RowCount representa a quantidade de "tortas" apresentadas e ColumnCount, a quantidade de fatias.

18

Extrado em parte do arquivo de ajuda do Micotsoft Visual Basic 6.0

70 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Alm das janelas de propreidades do VB, podemos abrir uma caixa de dilogo de propriedades do controle MSChart, como em todos a maioria dos controle ActiveX. 10.1. Criando um Grfico Manualmente19 O exemplo que se segue ir demonstrar como criar um grfico manualmente, inclusive a configurao do grfico. Obviamente que tais configuraes poderiam ser feitas em Design Time, entretanto como a configura a ser ealizada simples daremos preferncia pela configurao via cdigo, mostrando as propriedades do controle. Inicie um novo projeto no VB e em seguida insirra um controle Microsoft Chart Control e por fim insira o cdigo abaixo para platar os dados no grfico. Private Sub Form_Load() 'Determinado uma varavel array Dim Matriz(1 To 4, 1 To 4) With MSChart1'Inicia o lao With 'Configura as propriedades do controle .ShowLegend = True 'Exibir Legenda .Title = "Receitas/Despesas" .Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Meses" .Plot.Axis(VtChAxisIdY).AxisTitle.Text = "Valor em Reais ($)" 'Determina os valores da Matriz Matriz(1, 2) = "Receita" Matriz(1, 3) = "Despesas" Matriz(1, 4) = "Mdia" Matriz(2, 1) = "Abril" Matriz(3, 1) = "Maio" Matriz(4, 1) = "Junho" Matriz(2, 2) = 500 Matriz(2, 3) = 400 Matriz(2, 4) = (Matriz(2, 2) + Matriz(2, 3)) / 2 Matriz(3, 2) = 625 Matriz(3, 3) = 500 Matriz(3, 4) = (Matriz(3, 2) + Matriz(3, 3)) / 2 Matriz(4, 2) = 300 Matriz(4, 3) = 700 Matriz(4, 4) = (Matriz(4, 2) + Matriz(4, 3)) / 2 'Plota os dados no grfico .ChartData = Matriz End With 'Finaliza o lao With End Sub Cdigo 36. Cdigo para criao de um grfico de recietas/despesas e mdia dutrante trs meses. A figura abaixo demonstra como fica o grfico aps as linhas inseridas no evento Load do From.

19

Consulta ao livro Lima (1998)

Microsoft Visual Basic Trabalhando com o Controle MSChart no Visual Basic

71

Figura 28. Grfico de receitas/despesas de abril a junho apresentando a mdia de cada ms. Outro exemplo de grfico manual poder ser criado com exibio da estatstica pode ser visto no exemplo abaixo e figura seguinte: Private Sub cmdDesvio_Click() 'Exibe a linha de desvio padro MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsStddev End Sub Private Sub cmdMaximo_Click() 'Exibe a linha de valor mximo MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMaximum End Sub Private Sub cmdMedia_Click() 'Exibe a linha de valor mdio MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMean End Sub Private Sub cmdMinimo_Click() 'Exibe a linha de valor mnimo MSChart1.Plot.SeriesCollection.Item(1).StatLine.Flag = VtChStatsMinimum End Sub Private Sub cmdRegressao_Click() 'Exibe a linha de regresso MSChart1.Plot.SeriesCollection.Item(1) _ .StatLine.Flag = VtChStatsRegression End Sub Private Sub Form_Load() 'Determinado uma varavel array

72 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Dim Matriz(1 To 6, 1 To 2) With MSChart1 'Configurando as propriedades do controle .ShowLegend = False 'Oculta Legenda .Title = "Receitas/Despesas" .Plot.Axis(VtChAxisIdX).AxisTitle.Text = "Meses" .Plot.Axis(VtChAxisIdY).AxisTitle.Text = "Valor em Reais ($)" .Plot.AutoLayout = True 'Determinando os valores da Matriz Matriz(1, 1) = "Janeiro" Matriz(2, 1) = "Fevereiro" Matriz(3, 1) = "Maro" Matriz(4, 1) = "Abril" Matriz(5, 1) = "Maio" Matriz(6, 1) = "Junho" Matriz(1, 2) = 345 Matriz(2, 2) = 978 Matriz(3, 2) = 410 Matriz(4, 2) = 1520 Matriz(5, 2) = 200 Matriz(6, 2) = 280 'Modifica o tipo do grfico .chartType = VtChChartType2dLine '3 Grafico de linha 2D 'Plota os dados no grfico .ChartData = Matriz End With Cdigo 37. Cdigos para criao de um grfico manualmente e xibio de estatsticas.

Figura 29. Grfico criado com dados de entrada manual, exibindo as estatsticas.

Microsoft Visual Basic Trabalhando com o Controle MSChart no Visual Basic

73

10.2. Acessando Dados de um Banco de Dados para Plotar um Grfico A maneira simples de criar um grfico manualmente, no refletida para acesso de dados num banco de dados, por exemplo, muitas linhas de cdigos podero ser utilizadas. Apesar da entrada manual dos dados ser fcil algumas aplicaes podero requerer que estes dados tenham origem de uma ou mais tabelas ou mesmo consultas de um banco de dados. O exemplo que se segue ser utilizado um banco de dados Microsoft Access 97. Para o exemplo que se segue ser necessrio j ter criado a consulta 'cnsUF', agrupando por Estado e contando os nomes dos pesquisadores. Public Function Grafico(sCampo As String) Dim rsGrp As Recordset Dim rsDados As Recordset Dim qry As QueryDef Dim reg As Integer Dim i As Integer If sCampo = "estado" Then Set qry = DB.QueryDefs("cnsUF") Set rsGrp = qry.OpenRecordset rsGrp.MoveLast rsGrp.MoveFirst reg = rsGrp.RecordCount msGrafic.ColumnCount = 1 msGrafic.Title = "Grfico de pesquisadores por Estado" msGrafic.RowCount = reg msGrafic.Visible = True While Not rsGrp.EOF() For i = 1 To reg msGrafic.Row = i If Not IsNull(rsGrp!estado) Then msGrafic.RowLabel = rsGrp!estado Else msGrafic.RowLabel = "No especificou" End If msGrafic.Data = rsGrp!contardenomecompleto rsGrp.MoveNext Next Wend End If End Function Cdigo 38. Cdigo para extrair dados de um banco de dados Access 97, listando o nmero de pesquisadores por Estado20.

20

Cdigo extrado do programa Entomologistas do Brasil Manager v3.1

74 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Grfico de pesquisadores por Estado 30 30

25

25

20

20

15

15

10

10

Figura 30. Grfico plotado a partir dos dados de um banco de dados Access 97

Microsoft Visual Basic Tratando erros em sua aplicao

75

11. TRATANDO ERROS EM SUA APLICAO


sempre bem vindo tratar erros dentro de uma aplicao, porque nenhun software est livre de Bug. Assim iremos dar uma pequena idia de como montar uma rotina de tratamento de erro padro para toda a aplicao. 11.1. Os Objeto Err e Error do Visual Basic O Visual Basic tem seu prprio mecanismo de erros que trata os problemas medida que eese ocorrem. Quando um erro gerado no VB, as infirmaes sobre o erro so armazenadas no objeto Err (e o objeto Error se for um erro DAO). As propriedades desses objetos podem ser verificadas para determinar qual tipo de erro ocorreu. Alguns erros so resuperveis, outros no. 11.1.1. Propriedades dos ObjetosErr e Error As propriedades dos objetos Err e Error armazenam dados sobre o erro mais recente que ocorreu. Esses objetos podem ser usados para personalizar um arotina de tratamento de erro que guiar os usurios nos problemas. As propriedades dos objetos Err e Error incluem: Description, HelpFile, HelpContext, Number, Source e LastDLLError.

11.1.1.1. Propriedade Description A propriedade Description armazena a descrio definida do sistema de um erro que acabu de ocorrer. Essa descrio normalmente uma explicao tcnica do problema voltada para os programadores, de modo que melhor no exibir a propriedades sozinh para o usurio. Uma explicao mais detalhada muito conveniente. 11.1.1.2. Propriedades HelpFile/HelpContext A propriedades HelpFile armazena o nom do arquivo de ajuda onde pode ser encontrada assistncia sobre um erro. Esse arquivo de ajuda ser carregado pelo sistema da ajuda quando a tecla F1 for pressionada. HelpContext uma referncia de pginado arquivo de ajuda que pode ser usada para levar o usurio diretamente pgina onde o texto especificado de ajuda est localizado. 11.1.1.3. Propriedades Number A propriedade Number armazena um valor numrico que identifica, de forma exclusiva, um erro dentro da coleo de erros definidos pelo Visual Basic. Por exemplo, o erro diviso por zero retorna o nmero 11. 11.1.1.4. Propriedades Source Indica o nome do objeto que gerou um erro. 11.1.1.5. Propriedades LastDLLError Retorna o cdigo de erro produzido por uma funo DLL (Dynamic Link Libary- Biblioteca de Vnculo Dinmico). Se a funo falhar, um cdigo de erro armazenado na propriedade LastDLLError, que pode ento ser consultada para determinar o tipo ou causa da falha.
11.1.2. Mtodos do Objeto Err Como mancionado anteriormente os objetos Err e Error compartilham propriedades mas no mtodos. Os dois mtodos a seguir Clear e Raise somente se aplica ao objeto Err.

11.1.2.1. Mtodo Clear O mtodo Clear renicializa todas as propriedades do objeto Err para uma condio de nenhum erro. Todos os valores numricos so definidos como zero e as propriedades do texto

76 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

como strings de tamanho zero. Clear dever ser chamada sempre que uma condio de erro for tratada pela rotina de tratamento de erros para evitar que o mesmo erro seja disparado duas vezes.

11.1.2.2. Mtodo Raise Raise gera um erro de execuo. Ele usado para testar as condies de erro.
11.2. Erros Relacionado a Banco de Dados Relacionar aqui todos os erros tratveis do Visual Basic seria difcil, mas vamos tentar listar os principais fornecendo o seu nmero e descrio, vamos l: Para tratamento de erros do banco de dados recomendada a leitura do arquivo JETERR35.HLP. O caminho deste arquivo no disco rgido em geral "C:\Arquivos de programas\DevStudio\VB\Help\jeterr35.hlp". Caso voc possua o Microsoft Office em portugus instalado ou somente o Microsoft Access, no h necessidade de traduzir as mensagens, leas estolistadas em portugus. Abaixo segue os principais erros relacionados banco de dados Naturalmente voc deve estar preparado para prever os erros potenciais e planejar o seu tratamento, para isso devera conhecer os principais erros relacionados ao seu ambiente de trabalho. Tabela 18. Erros genricos relacionados operao de banco de dados Nmero 3005 3006 3008 3009 3010 3015 3019 3020 3021 3022 3023 3034 3036 3037 3040 3044 3046 Mensagem Database Name' isn't a valid database name. Database 'name' is exclusively locked. Table 'name' is exclusively locked. Couldn't lock table 'name'; currently in use. Table 'name' already exists. 'Index name' isn't an index in this table. Operation invalid without a current index. Update Or CancelUpdate without AddNew Or Edit. No current record. Duplicate value In index, primary key, Or relationship. Changes were unsuccessful. AddNew Or Edit already used. Commit Or Rollback without BeginTrans Database has reached maximum size. Can't open any more tables or queries. Disk I/O Error during read. 'Path' isn't a valid path. Couldn't save; currently locked by another user.

Tabela 19. Erros relacionados a bloqueio de registros Nmero 3027 3158 3167 3186 3187 3188 3189 Mensagem Can't update. Database or object is read-only. Couldn't save record; currently locked by another user. Record is deleted. Couldn't save; currently locked by user 'name' on machine 'name'. Couldn't read; currently locked by user 'name' on machine 'name'. Couldn't update; currently locked by another session on this machine. Table 'name' is exclusively locked by user 'name' on machine 'name'.

Microsoft Visual Basic Tratando erros em sua aplicao

77

Nmero 3197 3260 3261

Mensagem Data has changed; operation stopped. Couldn't update; currently locked by user 'name' on machine 'name'. Table 'name' is exclusively locked by user 'name' on machine 'name'. The database Is opened by user 'name' on machine 'name'.

Tabela 20. Erros relacionados a Permisses Nmero 3107 3108 3109 3110 3111 3112 Mensagem Record(s) can't be added; no Insert Data permission on 'name'. Record(s) can't be edited; no Update Data permission on 'name'. Record(s) can't be deleted; no Delete Data permission on 'name'. Couldn't read definitions; no Read Definitions permission for table Or query 'name'. Couldn't create; no Create permission for table or query 'name'. Record(s) can't be read; no Read Data permission on 'name'.

11.3. Erros Relacionado a Arquivo21 Os principais erros relacionados aos arquivos so: Nmero 52 53 54 55 57 58 59 61 62 63 64 67 68 70 71 72 74 75 76 Mensagem Nome ou nmero de Arquivo invlido Caminho do arquivo Errado. Arquivo no encontrado Modo de arquivo errado Arquivo aberto por outro aplicativo Erro de dispositivo Entrada e Sida do disco (HardDisk) Arquivo j existente Tamanho incorreto de registro Disco cheio. Espao insuficiente para gravar o arquivo ou outra coisa A entrada ultrapassou o final do arquivo. EOF foi utilizado incorretamente Nmero de registro errado Nome de Arquivo errado as regras de nomenclatura de arquivo no foram respeitadas Vrios arquivo abertos ao mesmo tempo Dispositivo no disponvel. Erro de leitura de mdia ou disquete no inserido no drive Permisso negada ou o disco ao qual voc deseja acessar est protegido contra gravao ou o arquivo est aberto por outra aplicao O disco no est pronto ou disquete no inserido no drive Erro de mdia de disco. Disquete ou disco rgido com problemas Permiso negada para renomear o arquivo entre unidades diferentes Erro de acesso oa arquivo ou caminho do mesmo Caminho no encontrado. Arquivo no existente ou caminho incorreto.

11.4. Rotina para Tratamento de Erros Agora que os principais erros foram apresentados, iremos criar uma rotina de como interceptar erros e salva-los em um arquivo para posterior consulta pelo suporte tcnico ou pelo prprio programador, para verificar onde o erro foi ocasionado e sanar os bugs. Obviamente o Visual Basic exibe as mensagens de erro em ingls, portanto traduzi-las uma mo de obra inacabvel.

21

Consulta ao Visual Basic 5 - Completo e Total - Gary Cornell, Makron Books - 1998

78 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

'Em um mdulo insira a seguinte rotina Public Sub Erros_App() 'Inicia um lao de decio Select Case e a cada erro interceptado um amensagem ser exibida ao usurio Select Case Err.Number Case 3020 MsgBox "Nenhum registro foi inserido inicialmente!", vbExclamation, Titulo Case 3022 MsgBox "Este registro j foi cadastrado!", vbExclamation, Titulo Case 3040 MsgBox "Erro durante a leitura do Disco!", vbExclamation, Titulo Case 3058 MsgBox "O campo primrio est vazio!", vbExclamation, Titulo Case 3008 MsgBox "O Banco de dados est bloqueado exclusivamente!", vbExclamation, Titulo Case 3009 MsgBox "No possvel fechar a tabela; atualmente em uso!", vbExclamation, Titulo Case 3010 MsgBox "A tabela que voc est tentando criar j existe!", vbExclamation, Titulo Case 524 MsgBox "As mudanas que voc requeriu para a tabela no foram bem sucedidas porque elas criariam valores de duplicados no ndice, chave primria, ou relao. Mude os dados no campo ou campos que contenham dados duplicados. E tente novamente.", vbExclamation, Titulo Case 3211 MsgBox "O gerenciador de base de dados no pode fechar a tabela porque ela j est em uso por outra pessoa ou processo.", vbExclamation, Titulo Case 52 MsgBox "Nome ou nmero de Arquivo invlido.", vbExclamation, Titulo Case 53 MsgBox "Caminho Do arquivo Errado - Arquivo no encontrado.", vbExclamation, Titulo Case 54 MsgBox "Modo de arquivo errado.", vbExclamation, Titulo Case 55 MsgBox "Arquivo aberto por outro aplicativo.", vbExclamation, Titulo Case 57 MsgBox "Erro de dispositivo Entrada e Sida do disco (HardDisk).", vbExclamation, Titulo Case 58 MsgBox "Arquivo j existente.", vbExclamation, Titulo Case 59 MsgBox "Tamanho incorreto de registro. ", vbExclamation, Titulo Case 61

Microsoft Visual Basic Tratando erros em sua aplicao

79

MsgBox "Disco cheio - Espao insuficiente para gravar o arquivo.", vbExclamation, Titulo Case 62 MsgBox "A entrada ultrapassou o final do arquivo - EOF foi utilizado incorretamente utilizado.", vbExclamation, Titulo Case 63 MsgBox "Nmero de registro errado.", vbExclamation, Titulo Case 64 MsgBox "Nome de Arquivo errado - As regras de nomenclatura de arquivo no foram respeitadas. ", vbExclamation, Titulo Case 67 MsgBox "Vrios arquivo abertos ao mesmo tempo.", vbExclamation, Titulo Case 68 MsgBox "Dispositivo no disponvel - Erro de leitura de mdia ou disquete no inserido no drive.", vbExclamation, Titulo Case 70 MsgBox "Permisso negada - ou o disco ao qual voc deseja acessar est protegido contra gravao ou o arquivo est aberto por outra aplicao.", vbExclamation, Titulo Case 71 MsgBox "O disco no est pronto ou disquete no inserido no drive.", vbExclamation, Titulo Case 72 MsgBox "Erro de mdia de disco - disquete ou disco rgido com problemas.", vbExclamation, Titulo Case 74 MsgBox "Permiso negada para renomear o arquivo entre unidades diferentes.", vbExclamation, Titulo Case 75 MsgBox "Erro de acesso ao arquivo ou caminho do mesmo.", vbExclamation, Titulo Case 76 MsgBox "Caminho no encontrado Arquivo no existente ou caminho incorreto.", vbExclamation, Titulo Case Else MsgBox "Erro: '" & Err.Number & "'" & vbCrLf _ & vbCrLf & "Descrio: " & vbCrLf & Err.Description, vbCritical, Titulo End Select 'Chama a rotina SaveErros para salvar os erros num arquivo especfico Call SaveErros (Err.Description, Err.Number) End Sub 'Rotina para salvar os error num arquivo especfico Public Sub SaveErros(Optional erDesc As String, Integer, Optional erSrc As String) On Error Resume Next Dim lArqErro As Long lArqErro = FreeFile Dim fnum As Integer Dim lines As Integer Dim a_line As String Dim eMsg As String If erDesc = Empty Then erDesc = Err.Description Optional erNum As

80 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

If erNum = 0 Then erNum = Err.Number If erSrc = Empty Then erSrc = Err.Source eMsg = "Descrio: " & erDesc & vbCrLf & _ "Nmero: " & erNum & vbCrLf & _ "Origem: " & erSrc & vbCrLf & _ "Erro externo n: " & erNum & vbCrLf & _ "Data e Hora: " & Date & " - " & Time & vbCrLf & _ "" ArqErr = sPath & "Error.dat" Open ArqErr For Append As #lArqErro Print #lArqErro, eMsg Close #lArqErro MsgBox "Erro: '" & Err.Number & "'" & vbCrLf & vbCrLf & _ "Descrio: " & Err.Description & vbCrLf & _ "Origem: " & erSrc, vbExclamation, Titulo End Sub 'Agora a rotina para chamar o erro 'Para chamar os erros e exibi-los em portugus Call Erros_App e depois salva-los 'Para Salvalos direto e exibir a mensagem original do Visual Basic Call SaveErros, , "Erro ao tentar exportar dados em: " & Me.Name Cdigo 39. Rotina completa para interceptao, exibio e armazenamento de erro de uma aplicao22

22

Cdigo extrados do programa Entomologistas do Brasil v1.1

Microsoft Visual Basic Distribuindo sua aplicao

81

12. DISTRIBUINDO SUA APLICAO


O Visual Basic 5 e 6 vem com ferramentas prprias cada um para distribuir o aplicativo criado. Porm estas ferramentas possuem muitas restries que podem ser samada com a utilizao por exemplo, do Inno Setup Compiler (www.innosetup.com) de autoria de Jordan Rusel e possui cdigo aberto, porm o cdigo foi criado em Borland Delphi. A Microsoft ainda liberou uma ferramentas de distribuio de aplicativo o Microsoft Windows Installer hoje na verso 1.1. e freeware. Existe uma srie de ferramentas para distribuio de aplicativos, tais como: Install Wizard; Setup Generator, Turbo SFX, Winn-Zip Self Extractor, InstallKit, Install Wise, CreateInstall, entre outros. 12.1. Compilando o Projeto Para compilar o projeto, basta clicar em File|Make. Selecione o local a ser compilado e clique em OK. 12.2. Setup wizard (Visual Basic 5.0) Apesar de ser restrito o Setup Wizard d conta de distribuir aplicao mais simples, entretanto as telas do programa exibem o texto em ingls, mas possvel traduzir o arquivo Setup.rc e compila-lo novamente para Setup.res (arquivo de recurso) e recompilar o projeto Setup1.vbp que se encontra em "C:\Arquivos de programas\DevStudio\VB\setupkit\setup1\". Para maiores detalhes recomenda-se verificar a documentao disponvel em www.macoratti.net.

Figura 31. Tela inicial do Setup Wizard que acompanha o Visual Basic 5.0. 12.3. Package and Deployment Wizard (Visual Basic 6.0) Apaser de ser muito parecido com o Setup Wizard, a interface do P & D Widzard bem diferente. Algumas funes foram alteradas, melhorads e outras adicionadas, para melhorar a distribuio dos aplicativos, mas a Microsoft no acertou desta vez ainda. Acredito que o Microsoft Windows Instaler seja melhor que o Setup Wizard e o P & D Wizard. Para maiores detalhes sobre visite www.macoratti.net.

82 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 32. Tela inicial do Package and Deployment Wizard que acompanha o Visual Basic 5.0 12.4. Inno Setup Compiler possvel fazer o download do Inno Setup em www.innosetup.com. A verso 3.0.18 tem aproximadamente 2.0 MB. Enquanto escrevo este tutorial, verses mais aprimoradas esto sendo desenvlvida. Aps fazer o download basta clicar no arquivo Self-extract que o programa se instalar em poucos segundos. A utilizao do sistema simples e bem intuitiva, voc basicamente ir gerar um arquivo de script que conter toda a informao para instalar o seu sistema. Como estamos focando aplicaes Visual Basic, voc dever informar quais arquivos deseja instalar (nem tudo perfeito). No final voc ir compilar o seu arquivo de script e em seguida j pode testar a sua instalao. O Inno Setup muito rpido e enxuto. Vale a pena ver se voc se adapta a sua filosofia, afinal no custa nada. 12.4.1. Dicas para Visual Basic

12.4.1.1. Gerando as Mensagens de Instalao em Portugus. Para gerar as mensagens de instalao voc no precisa alterar nada, basta apenas fazer o download do arquivo j traduzido no endereo www.innosetup.com/files/istrans, procure em Language por Portugus e clique duas vezes na verso 3.x, o nome do arquivo baixado ser BrazilianPortuguese.isl. Aps o download do arquivo para fazer com que o compilador o utilize no script altere a seo [Setup] como abaixo: [Setup] MessagesFile=compiler:MyTranslation.isl s substituir o nome MyTranslation.isl para o nome Do arquivo traduzido BrazilianPortuguese.isl. 12.4.1.2. Instalando Arquivos OCX. Para instalar arquivos OCX , informe o nome Do arquivo no script como a seguir. (Como exemplo estamos instalando a Comctl32.ocx).Obs: A linha abaixo uma linha nica.

Microsoft Visual Basic Distribuindo sua aplicao

83

Source: "ComCtl32.ocx"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace sharedfile regserver

12.4.1.3. Instalando Arquivos do Visual Basic Para a verso 3.0 e anteriores apenas copie o arquivo VBRUN???.DLL apropriado para o diretrio System Do usurio. Para a verso 5.0 e 6.0 voc vai precisar usar os arquivos Do sistema. Para fazer o download clique no links abaixo: VB 5.0 (Service Pack 3) system files - vb5sp3sys.zip [1.1 MB] (Visite o site para realizar os downloads) VB 6.0 (Service Pack 5) system files - vb6sp5sys.zip [1.1 MB]. Source of files: Q290887 (Visite o site para realizar os downloads) Aps fazer o download e descompactar os arquivos acima , copie e cole As linhas abaixo na seo [Files] Do script:
; begin VB system files ; (Note: Scroll To the right To see the full lines!) Source: "c:\vbfiles\stdole2.tlb"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regtypelib Source: "c:\vbfiles\msvbvmXX.dll"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regserver Source: "c:\vbfiles\oleaut32.dll"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regserver Source: "c:\vbfiles\olepro32.dll"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regserver Source: "c:\vbfiles\asycfilt.dll"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile Source: "c:\vbfiles\comcat.dll"; DestDir: "{sys}"; CopyMode: alwaysskipifsameorolder; Flags: restartreplace uninsneveruninstall sharedfile regserver ; End VB system files

12.4.1.4. Usando o SETUP.LST Gerado pelo P & D Wizard. Voc pode usar o P & D Wizard para gerar o arquivo Setup.lst e a seguir aceitar os arquivos de sistema Do VB indicados na seo [Bootstrap Files] ( No precisa incluir o arquivo VB6STKIT.DLL ). A seguir voc vai criar entradas de sees [Files] para todas As linhas da seo [Setup1 Files] alterando segundo a tabela abaixo:
Tabela 21. Strings utilizadas pelo arqivo Setup.lst as strings equivalntes no Inno Setup Compiler Seo no Setup.Lst $(AppPath) $(WinSysPathSysFile) $(WinSysPath) Alterar para no arquivo de script do Inno Setup = {app} Constant = {sys} Constant = {sys} Constant

84 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Seo no Setup.Lst $(DLLSelfRegister) $(Shared) $(TLBRegister) $(MSDAOPath) $(EXESelfRegister)

Alterar para no arquivo de script do Inno Setup = regserver flag = sharedfile flag = regtypelib flag = {dao} Constant = use the [Run] section For "MyApp.exe /RegServer" use the [UninstallRun] section For "MyApp.exe /UnregServer

12.4.1.5. Instalando ADO, DCOM e MDAC Para saber como instalar ADO e DCOM e MDAC faa o download do arquivo VB_DCOM_MDAC.iss (visite o site para fazer o download) depois s copiar e colar para o seu arquivo de script.

Figura 33. Figura do editor de script do Inno Setup Compiler v2.0. 12.5. IsTool Quem inicialmente tem contato com Inno Setup logo toma um susto pois escrever cdigo por cdigo de um script de distribuiao de aplicao no mole, pois eis que entra o IsTool um programa FrontEnd que escreve os scripts de forma intuitiva e com a inteface de janelas (windows). Assim fica mais fcil criar os scripts.E a partir da verso 3.0 o FrontEnd, possui suporte a script de libguagem, ou seja, ele pode falar Portugus (BR), basta instalar o script da linguagem ou traduzir o original em Ingls. A documentao (em Ingls) tanto do Inno Setup compiler e do ISTool so bem completas e simples de entender. Caso ainda fique alguma dvida o usurio poder san-la no site do fabricante.

Microsoft Visual Basic Distribuindo sua aplicao

85

Figura 34. Interface do programa ISTool 3.0 em portugus (BR)

86 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Microsoft Visual Basic Trabalhando com API's

87

13. TRABALHANDO COM API'S


As API's so nada mais que Interface de Programao de Aplicativo (Application Programming Interface), que vem junto com o sistema operacional, ou seja, so linhas de comandos contidas nas bibliotecas e outros arquivos do sistema. Junto com o Visual Basic 5 e 6 vem o aplicativo API Viewer, que fornece as Constantes, Declaraes e Tipos. Vale a pena utilizar est ferramenta de grande utilidade. Outra opo muito mais plausvel e fazer o download do programa APIGuide no site www.allapi.net e verificar que nele alm das API's conhecidas existem algumas no documentadas pela Microsoft e o melhor de tudo que este programa gratuito (freeware), pequeno e bem elaborado onde alm da sintaxe das API's os autores exemplificam cada uma. Outra sada e realizar o download do banco de dados de dicas Lizaro Visual Basic Dicas no site da Lizaro Soft (www.lizarosoft.cjb.net) e apesar de no possuir tantas API's quanto o anterior, mas possui vrias outras dicas que pode ser bastante utilizadas. Detalhar API's seria uma tarefa muito rdua, pois as documentaes da Microsoft contendo as API do sistema operacional Windows giram em torno de cinco livros ou mais de aproximadamente 1000 pginas cada, portanto a Internet e sua maravilhosa capacidade de difuso de informaes poder ajud-lo a resolver as dvidas mais freqentes no que diz respeito a Visual Basic, pois existem uma centena de milhares de pginas de Visual Basic espalhadas pelo mundo, portanto prepare-se para navegar horas a fio atrs de informaes para sanar suas dvidas e adquirir novos conhecimentos desta que a linguagem de programao mais utilizada no mundo. 13.1. Abrindo arquivo de Ajuda atravs de API Para abrir arquivos de ajuda de praxe que utilizemos o conhecido controle ActiveX Commom Dialog, porm se voc no quiser utiliza-lo, basta inserir a seguinte API num mdulo. Public Declare Function WinHelp Lib "user32" Alias "WinHelpA" (ByVal hwnd As Long, ByVal lpHelpFile As String, ByVal wCommand As Long, ByVal dwData As Long) As Long Public Const HELP_CONTEXT = &H1 'Exibe o tpico de ajuda pelo Nmero ID Public Const HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como utilizar ajuda Public Const HELP_INDEX = &H3 'Exibe o ndice da Ajuda Public Const HELP_QUIT = &H2 'Termina a juda Public Const HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela alternativa da ajuda Public Sub Exibir_AjudaAjuda(X As Form) Dim Hlp As Long Hlp = WinHelp(X.hwnd, "C:\Windows\Windows.hlp", HELP_HELPONHELP, CLng(0)) 'Exibe o arquivo de ajuda sobre ajuda do Windows End Sub 'No evento Click do Form digite: Private Sub Form_Click() Exibir_AjudaAjuda Me End Sub 'Para finalizar o arquivo de ajuda juntamente com o aplicativo insira as seguinte linhas de cdigo no evento Unload do From: Private Sub Form_Unload(Cancel As Integer) Dim Hlp As Long

88 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Hlp = WinHelp(Me.hwnd, "Arquivo de ajuda", HELP_QUIT, CLng(0)) End Sub Cdigo 40. Exemplo de como abrir um arquivo de Ajuda atravs de API 13.2. Abrindo o Browser ou Editor de e-mail padro Sempre necessitamos acessar a Internet atravs de nosso aplicativo seja atravs do Browser ou atravs do editor de e-mail padro, portanto veja como simples acessar a Internet atravs desta API. 'Para abrir o browser e email faa o seguinte 'Num mdulo insira a seguinte API Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long 'No evento Click do controle (Boto) associado digite 'Abre o browser Call ShellExecute(0, vbNullString, "http://www.lizarosoft.hpg.com.br", vbNullString, vbNullString, 0) 'ou para abrir o editor de e-mail Call ShellExecute(0, vbNullString, "mailto:saclizarosoft@ieg.com.br", vbNullString, vbNullString, 0) Cdigo 41. Exemplo de como abrir o Browser ou Editor de e-mail padro 13.3. Encontrando o diretrio de instalao do Windows e de Sistema Em geral o diretrio de instalao do Windows 'C:\Windows', e o do sistema 'C:\Windows\System', no entanto a sempre algum que prefere dar uma cara nova a seu computador e muda o diretrio de instalao e voc programador poder ficar a ver navios se especificar numa linha de comando o diretrio padro da instalao. Para evitar este tipo de coisa existe a seguinte API: 'Num mdulo insira as seguintes API's 'Diretrio de Instalao do Windows Public Declare Function GetWindowsDirectory Lib "kernel32" Alias _ "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 'Diretrio do sistema "System" Public Declare Function GetSystemDirectory Lib "Kernel32" Alias _ "GetSystemDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 'Em seguida escreva as seguintes funes Public Function QualDirWin() As String Dim Buf As String Dim Rc As Long Buf = Space$(255) Rc = GetWindowsDirectory(Buf, 255) If Rc > 0 Then Buf = Left$(Buf, Rc) QualDirWin = UCase(Buf) & "\" Else QualDirWin = "" End If End Function

Microsoft Visual Basic Trabalhando com API's

89

Function SysDir() As String Dim Buf As String Dim Rc As Long Buf = Space$(255) Rc = GetSystemDirectory(Buf, 255) If Rc > 0 Then Buf = Left$(Buf, Rc) SysDir = UCase(Buf) & "\" Else SysDir = "" End If End Function 'Num evento Load do Form insira as seguinte linhas de comando Private Sub Form_Load() Me.Print "Diretrio de Instalao do Windows: " & QualDirWin Me.Print "Diretrio de Sistema do Windows: " & SysDir End Sub Cdigo 42.Exemplo de como Encontrar o diretrio de instalao do Windows e de Sistema 13.4. Drive do CD Se a aplicao necessita buscar informaes a partir do driver do CD-Rom e voc especifica a letra padro como D:, pode entrar em uma enrascada. Pois a maquina onde o aplicativo est rodando poder ter de uma a vrios discos rgidos. Desta forma a API seguinte resolve o problema. 'Detectando o drive do CD. Num mdulo insira as seguintes API's e os seguintes cdigos: Public Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long Public Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long Public Const DRIVE_REMOVABLE = 2 Public Const DRIVE_FIXED = 3 Public Const DRIVE_REMOTE = 4 Public Const DRIVE_CDROM = 5 Public Const DRIVE_RAMDISK = 6 Function StripNulls(startStrg$) As String Dim c%, item$ c% = 1 Do If Mid$(startStrg$, c%, 1) = Chr$(0) Then item$ = Mid$(startStrg$, 1, c% - 1) startStrg$ = Mid$(startStrg$, c% + 1, Len(startStrg$)) StripNulls$ = item$ Exit Function End If c% = c% + 1 Loop End Function Num Form insira um Label com o nome Label1 e insira as seguintes linhas de comando:

90 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Private Sub Form_Load() Dim r&, allDrives$, JustOneDrive$, pos%, DriveType& Dim CDfound As Integer allDrives$ = Space$(64) r& = GetLogicalDriveStrings(Len(allDrives$), allDrives$) allDrives$ = Left$(allDrives$, r&) Do pos% = InStr(allDrives$, Chr$(0)) If pos% Then JustOneDrive$ = Left$(allDrives$, pos%) allDrives$ = Mid$(allDrives$, pos% + 1, Len(allDrives$)) DriveType& = GetDriveType(JustOneDrive$) If DriveType& = DRIVE_CDROM Then CDfound% = True Exit Do End If End If Loop Until allDrives$ = "" Or DriveType& = DRIVE_CDROM If CDfound% Then Label1.Caption = " O drive de CD-ROM no sistema drive " & UCase$(JustOneDrive$) Else Label1.Caption = " Nenhum drive de CD-ROM foi encontrado no sistema. " End If End Sub Cdigo 43. Exemplo de como detecta r aletra do drive do CD 13.5. Ecrevendo e Obtendo Informaes de um Arquivo INI Mesmo podendo utilizar o registro do Windows para armazenar informaes da aplicao, convenhamos que inserir muitas informaes no registro poder deixar o sistema Operacional lento. Para resolver este problema podemos lanar mo da antiga e bastante utilizada tecnologia de arquivos de configurao, muito utilizada nos aposentado Windows 3.11 e Windows 95 e ainda utilizada largamente no Windows 9x, NT, ME e XP. 'Example by Robin (rbnwares@edsamail.com.ph) 'Visit his site at http://members.fortunecity.com/rbnwares1 'In Form Private Declare Function WritePrivateProfileSection Lib "kernel32" Alias "WritePrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpString As String, ByVal lpFileName As String) As Long Private Declare Function GetPrivateProfileSection Lib "kernel32" Alias "GetPrivateProfileSectionA" (ByVal lpAppName As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long Private Sub Form_Load() ' We will create a new section in the INI-file ' It's output will be: ' ' [SectionName] ' Key=Value '

Microsoft Visual Basic Trabalhando com API's

91

' Note that used this ONLY if you are creating a new ' section on the INI file, unless you wanted to erase ' its existing keys. Call WritePrivateProfileSection("SectionName", "Key=Value", App.Path & "\sample.ini") Dim szBuf As String * 255 Call GetPrivateProfileSection("SectionName", szBuf, 255, App.Path & "\sample.ini") MsgBox szBuf End Sub Cdigo 44. Exemplo de como escrever e obter informaes de um arquivo INI.

92 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Microsoft Visual Basic Criando arquivos de ajuda basedo em arquivos HTML

93

14. CRIANDO ARQUIVOS DE AJUDA BASEDO EM ARQUIVOS HTML


Um sistema de ajuda bem elaborado possibilita menores gastos com suporte tcnico, pois resulta num maior esclarecimento de dvidas por parte do usurio, alm do que um arquivo de ajuda sempre bem vindo, tornando seu software mais profissional. Vamos ver como criar um arquivo de ajuda usando arquivos HTML (Hyper Text markup language) e integr-los com suas aplicaes em Visual Basic de forma clara e objetiva. Se voc ainda no tem idia de como a interface de um arquivo de ajuda de uma olhada no arquivo de ajuda do Internet Explorer v4.0 ou superior, ou mesmo no arquivo de ajuda do Windows 98. Inicialmente ser necessrio criar os arquivos HTML, para isto voc poder usar, o FrontPage Express, HotMetal, Microsoft Word, OpenOffice, StarOffice e at mesmo o Bloco de Notas. Voc ir necessitar baixar o arquivo de instalao do HTML Help Workshp, no site da Microsoft. Para que um arquivo de ajuda contendo pgina da internet necessrio que na mquina onde o arquivo de ajuda ir ser executado possua o Internet Explorer 4.x ou superior. Alm dos componentes necessrios para execuo do arquivo de ajuda. Desta forma aos realizar o download do programa existe um pacote pr-pronto com todos os componentes bsico, exceto o Internet Explorer. O arquivo em geral possui o nome hhupd.exe, possui 465KB e fica localizado no diretrio redist, dentro do diretrio de instalao do programa. Para voc ter uma idia os tipos de arquivos usados no HTML HELP so: Extenso do Arquivo Tipo do Arquivo HHP Projeto do HELP HHC Tabela de contedo HHK ndice CHM Help Compilado HTM Os arquivos HTM H Arquivo de Cabealho. 14.1. Criando um Arquivo de Ajuda Antes de qualquer coisa, voc dever planejar bem os arquivos HTML e o arquivo de ajda final, para que o seu projeto de ajuda no d dor de cabea. Inicie o HTML Help Workshop e escolha File|New , na janela de dilogo a seguir selecione a opo Project e clique OK. (Figura abaixo).

Figura 35.Janela para iniciar um novo arquivo. Aps escolher a opo Projeto, o Wizard para novo projeto iniciado, agora voc segue os seguintes passos para as prximas telas do Wizard: Tela 1 - Clique em avanar. Tela 2 - Informe o nome do diretrio e o nome do seu projeto. No exemplo D:\Temp\InsectA.HHP. (Figura abaixo)

94 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 36. Tela do Wizard para especificar o caminho e o nome do projeto. Verifique que a figura anterior possui um boto 'Browse...', ele poder ser utilizado para abrir um arquivo de ajuda preexistente. Clique em avanar e selecione a opo HTML Files (.htm) e novamente clique em avanar. E ser exibida a tela para que voc possa adicionar os arquivo de HTML que iro fazer do seu arquivo de ajuda (Figura abaixo).

Figura 37. Listagem de arquivos HTML, que iro fazer parte do arquivo de ajuda. Clique em avancar e aps clique em concluir. Ser exibida a janela do projeto de ajuda que foi criado (Figura abaixo).

Microsoft Visual Basic Criando arquivos de ajuda basedo em arquivos HTML

95

Figura 38. Janela do projeto recm criado, com as opes e listagem de arquivos criados. 14.1.1. Arquivo de Contedo Agora iremos criar um arquivo de contedo onde sero listadas as opes de acesso aos arquivos HTML compilados, dentro do arquivo de ajuda. Para realizar esta tarefa clique na aba Contents a seguir selecione 'Create a new contents file' (Figura abaixo).

Figura 39. Janela de opo para criao ou abertura de uma rquivo de contedo. Digite o nome do arquivo de contedo e salve-o. A seguir a aba Contents estar em branco, clique no boto 'Insert a heading' (2 boto) na barra de ferramntas lateral da aba contents e ser exibida a janela para criao do arquivo de contedo (Figura abaixo).

96 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 40. Janela de adio de tpicos e de ligamento (link) com o arquivo correspondente. Para criar o link com o arquivo HTML, clique no boto 'Add...' e em seguida ser exibida a lista de arquivos HTML adicionados ao projeto da ajuda (Figura abaixo).

Figura 41. Janela de "linkagem" de arquivo ao tpico do contedo. A listagem exibida por ttulo do arquivo.

Microsoft Visual Basic Criando arquivos de ajuda basedo em arquivos HTML

97

Figura 42. Aba de Contents, com sua aparncia final listando todos os tpicos criados. 14.1.2. Arquivo de ndice A aba seguinte a Index, que cria um ndice do arquivo de ajuda, possibilitando o usurio localizar um tpico por palavras-chaves, est opo sempre bem vinda em qualquer sistema de ajuda. Desta forma, evite deixar de lado esta opo. Para criar um ndice clique na aba Index e em seguida escolha a opo 'Create a new index file', salve o arquivo e em seguida clique no boto 'Insert a keyword'(2 boto) da barra de ferramentas lateral, para exibir a janela de link de arquivo, semelhante a janela de link do arquivo de contedo. Digite o ttulo a ser exibido no arquivo de ajuda. A listagem de arquivos que sero ligados (linkados) ao tpico indica que possvel ligar vrios arquivos a um s tpico. Est mesma opo vlida para a contruo do arquivo de contedos (contents). Repita a operao de adio de tpicos tantas vezes necessrios para adicionar ao seu arquivo de ndice os tpicos a sere exibidos. 14.1.3. Aparncia da Janela do Arquivo de Ajuda Para definir a aparncia, clique na aba 'Project' e em seguida clique no cone 'Add/ModifyWindows Definitions' (4 boto) e informe o nome da janela (no exemplo usaremos Main)do arquivo de ajuda e aseguir configure ao seu modo. Para maiores informaes acesse o arquivo de ajda do programa. 14.1.4. Configurar Sensibilidade ao Contexto Quando estamos navegando por telas de um programa em geral podemos acessar a ajuda deste e ir direto ao tpico pertinente aquela tela. Entretanto no projeto da ajuda tais tpicos devero ser especificados para que o usurio ao clicar na tecla F1, o tpico possa ser exibido. Vamos configurar o projeto para tornar o arquivo de ajuda sensvel ao contexto. Para tal clique no boto 'HTML Help API Information' da barra de ferramentas da aba 'Project', aps a exibio da tela clique no boto 'Header file...', para adicionar um arquivo de cabealho, que dever ser criado em um editor de textos comum (Bloco de Notas) e dever possui a exteno

98 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

".h", isso mesmo com uma letra. Em seguida adicione ao projeto. possvel adiconar vrios arquivos de cabealho a um mesmo projeto da ajuda. A estrutura do arqivo de cabealho dever ser a seguinte: #define IDH_Main 10001 #define IDH_Menu 10002 #define IDH_Metodos 10003 #define IDH_Info 10004 Cdigo 45. Estrutura de uma arquivo de cabealho, contendo os tpicos sensveis ao contexto e sua identificao numrica.

Figura 43. Janela HTMLHelp API Information com a adio do arquivo de cabealho InsectA.h. Agora devemos realizar a aoperao de identificar e indicar a que contexto os arquivos estaro ligados. Para tal, ainda na mesma janela, clique na aba Alias e clique em 'Add...', para exibir a janela de ligao digite no primeiro campo uma das definies (ex: IDH_Main) e em seguida no campo seguinte selecione o arquivo de HTML relacionado (Figura abaixo).

Figura 44. Janela de ligao da definio (IDH_Main), como o arquivo HTML (insecta.htm). A seguir clique em OK e verifique que na janela 'HTML Help API Information', aba 'Alias', estar listado cada definio e o arquivo referenciado.

Microsoft Visual Basic Criando arquivos de ajuda basedo em arquivos HTML

99

14.1.5. Compilando o Projeto da Ajuda Para compilar, acesse o menu 'File' e em seguida 'Save Project' e por fim menu 'File' e 'Compile...' ou se preferir clique no boto 'Save all files and compile' (ltimo), da barra de ferramenta da Aba 'Project'. A janela a direita da janela do programa ir exibir as informaes pertinentes compilao dos arquivos para a criao do arquivo de ajuda. 14.1.6. Nota Final Bom no geral isto outras opoes podero ser utilizadas, consultando o prprio arquivo de ajuda do programa que bem elaborado e detalhado, detalhe em ingls. 14.2. Acessando o Arquivo CHM, Atravs do Visual Basic No projeto do Visual Basic crie uma Classe Module como o nome clsHelpCHM (por exemplo). Insira o seguinte cdigo na declarao (General Declarations): 'Classe clsHelpCHM 'Author: William Costa Rodrigues 'Date: 05-15-2004 'Desciption: Module class to call HTML compiled help file '//Constants Declarations Private Const HH_DISPLAY_TOPIC = &H0 Private Const HH_HELP_CONTEXT = &HF '//API Declarations Private Declare Function HtmlHelp Lib "hhctrl.ocx" Alias "HtmlHelpA" _ (ByVal hwnCaller As Long, ByVal pszFile As String, _ ByVal uCommand As Long, ByVal dwData As Long) As Long 'A seguir crie uma funo com o nome ShowHelp Public Function ShowHelpCHM (helpFile As String, Optional WindowPane As String, Optional ContextID as Long) Dim strFile As String strFile = helpFile If Len(WindowPane) Then Call HtmlHelp (0, strFile, HH_DYSPLAY_TOPIC, ByVal 0&) Else Call HtmlHelp (0, strFile, HH_DYSPLAY_CONTEXT, ContextID) End If End Function Cdigo 46. Classe clsHelpCHM, criada para acessar atravs de API ao arquivo de ajuda CHM, pelo Visual Basic Para realmente exibir o arquivo de ajuda atrav;es de um formulrio, seja por meio de menu, boto, etc, necessrio a seguinte rotina (cdigo): Private Sub cmdHelp_Click() Dim sFile As String Dim objHelp As clsHelpCHM Set objHelp = New clsHelpCHM sFile = App.Path & "\Ajuda\InsectA.chm" Call objHelp.ShowHelpCHM (sFile, "Main") Set objHelp = Nothing

100 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

End Sub Cdigo 47. Codgo para exibir o arquivo de ajuda atravs do evento Click, de um CommandButton, chamado cmdHelp. Se voc queiser utilizar o sensibilidade ao contexto, ser necessrio referenciar a identificao do contexto que deseja chamar. Desta forma para chamar o contexto desejado voc ir precisar da seguinte rotina. Private Sub cmdHelp_Click() Dim sFile As String Dim objHelp As clsHelpCHM Set objHelp = New clsHelpCHM sFile = App.Path & "\Ajuda\InsectA.chm" Call objHelp.ShowHelpCHM (sFile, "Main",10001) relacionado com o arquivo 'insecta.htm' Set objHelp = Nothing

'O

ID

'10001',

est

End Sub Cdigo 48. Codgo para exibir o contexto especfco do arquivo de ajuda atravs do evento Click, de um CommandButton, chamado cmdHelp. Bom como j dito outras opes que por ventura voc deseje utilizar, dever consultar o arquivo de ajuda do programa.

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

101

15. GERANDO RELATRIOS COM O CRYSTAL REPORTS23


O Crystal Reports uma ferramenta geradora de relatrios, que acompanha as verses 5 e 6 do Visual Basic. Tem uma grande vantagem que gerar relatrios de forma rpida e fcil e por outro lado apresenta as devantagens de necessitar da distribuio junto ao aplicativo cerca de 5,0 MB de bibliotecas, no possuir flexibilidade na alterao dos relatrios em run-time. Apesar de apresentar estas vantagens, vamos no prender as vantagens. 15.1. Inicializando o Crystal Reports Par inicilizar o Crystal, basta clicar no menu Add-Ins e selecionar a opo Report Designer ou no cone correspondente na pasta de trabalho do Visual Basic. Figura 45. cone do Crystal Reports v4.6. 15.2. Criando um Novo Relatrio Inicialmente iremos gerar um relatrio (exemplo) a partir de uma base de dados do MS Access 97, cujo nome : Administer.mdb e a tabela a ter o relatrio gerado tbCadastro. O relatrio a ser gerado dever possuir os seguintes parmentros: 1. Imprimir os seguintes campos: nome, matricula, rg, orgao, dataemi, natural, fone1 e endereco; 2. O relatrio dever ser ordenado pelo campo 'nome'; 3. Deveremos permitir a visualizao, impresso e exportao do relatrio no formato do Word (2.0); 4. O nome do relatrio ser 'cadastro.rpt'. Selecione a opo no menu 'File/New' ento teremos a figura abaixo.

Figura 46. Janela para criao de um relatrio novo no Crystal Reports. Note que na janela Create New Report, temos nove opes de relatrios exibidas e mais trs ocultas que podero ser acessadas atravs do boto 'Custom>>', mas ser explorado em nosso pequeno tutorial. Para iniciar o nosso novo relatrio, clique em 'Standard'. Em seguida ser exibida a janela como segue, dando a opo de selecionar uma base de dados atravs de uma arquivo ou atravs de comando SQL (Structure Query Language).

A verso apresntada neste tutorial a verso 4.6. Hoje j existe a verso 8.0 nomercado, porm com um custo elevado para pequenas empresas e mesmo para um programador autnomo.

23

102 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 47. Janela Create Report Expert, com a opo o passo 1: seleo de tabelas no Crystal Reports Selecionamos para o exemplo somente a tabela tbCadastro, para que possamos criar um relatrio baseado nesta tabela. Portanto excluimos todas os nomes das outras tabelas listadas. Clieu em Next e ser exibido passo 3: Campos (Fields). Note que saltamos o passo 2, Links (lgao). Esta opo somente seria explorada e configurada se e somente se duas ou mais tabelas fossem escolhidas. Seleciona-se nesta opo os campos a serem exibidos no relatrio como mosta a figura a seguir, mas no se preocupe, caso voc esquea algum campo ou inseriu um por acidente poder incluir e mesmo excluir um campo em modo de desenho (design-mode).

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

103

Figura 48. Passo 3: seleo de campos a serem exibidos no relatrio do Crystal Reports. Aps selecionar os campos a serem exibidos, clique em Next >> e em seguida iremos escolher a opo de ordenao dos dados e a forma de ordenao se crescente ou decrescente como segue a janela abaixo.

Figura 49. Passo 4: seleo dos campo de ordenao do relatrio e tipo de ordenao no Crystal Reports. Selecione o(s) campo(s) a serem utilizados como parmentro de ordenao dos dados para o relatrio, podendo o usurio selecionar mais de um, porm caso seja selecionado mais de uma ordenaco seguira o critrio da ordem de insero. Ex.: nome e matricula, a ordenao primeiro ser nome e depois matricula. O tipo de ordenao poder selecionado atravs da opo Order, que possui as seguintes opes: In ascending order ordena crescentemente respeitando a ordem listada no campo Group Fields. In descending order ordena decrescentemente respeitando a ordem listada no campo Group Fields. In specified order ordena atravs dos dados originais do campo da tabela (esta opo no ser trabalhada neste tutorial). In original order ordena crescentemente atravs da lista de campos original da tabelas, respeitando a ordem de criao dos campos (esta opo no ser trabalhada neste tutorial). Iremos saltar os passo 5 e 6, e iremos direto para o passo 8, onde iremos definir o titulo e estilo do relatrio. Daremos ao tituo o seguinte texto 'Lizaro Administer Cadastro' e o estilo ser o padro Standard, como podemos ver na figura seguinte. Verifique que no canto direito da janela teremos duas opes de finalizao da gerao do reltorio: Preview Report (visualizar o relatrio) e Preview Sample (visualizar o "modelo"). e em seguida selecione um tipo de Caso deseje incluir uma imagem cliue no boto figura vlida. O Crystal Reports v 4.6, suporta somente os seguites padres de figuras: bitmap

104 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

windows (bmp), CompuServe (gif), PC paitbrush (pcx), TIFF (tif), e Targa (tga). Adicionamos no exmplo uma pequena figura (bmp) para exemplificar.

Figura 50. Passo 8: especificao de ttulo e seleo se estilo do relatrio no Crystal Reports. Para visalizarmos o relatrio em modo de desenho, basta selecionar a opo Preview Sample e em seguida iremos verificar a disposio dos campos como mostra figura seguinte.

Figura 51. Janela do modo de desenho do Crystal Report. Nesta janela veremos quatro sees no lado esquerdo do relatrio. So elas: Title especifica o ttulo do relatrio a ser exibido no inicio da primeira pgina somente. Page header Exibe o contedo no inicio de cada pgina, com exceto na primenira que ser exibido abaixo do campo Title.

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

105

Details contm os campos a serem exibido e impressos a partir dosdados contidos no banco de dados. Page footer refere-se ao rodap da pgina, onde entre outros dados poder conter uma campo com o nome da aplicao, data de impresso do relatrio, campo de ditreitos autorias, etc. somente no abuse nas informaes do rodap pois tomar espao no relatrio, reduzindo a quantidade de dados a partir do banco de daso a ser exibida e impressa. Summary impresso de resumso do relatrio. Uma seo pouco utilizada e prontamente substituda pela seo Page footer.
15.3. Inserindo novos campos a partir da tabela. Para selecionar-mos novos campos aser inseridos na tabela, basta seleciona a opo 'Insert/Database Field...' como mostra a figura seguinte.

Figura 52. Janela par insero de novo(s) campo(s) ao relatrio no Crystal Reports. Para inserir um novo campo, basta clicar e arrastar o campo para o seo Details e em seguida organiza-lo na melhor posio. 15.4. Formatando campos, inserindo figuras, linhas e caixas 15.4.1. Formatando Campos Podemos formatar os campos inseridos no relatrio em mode de desenho (Design Mode). A formatao diz respeito ao tipo de letra, tamanho, nome da fonte, itlico, negrito, alinhamento do texto, etc. Figura 53. Barra de ferramentas de formatao do texto dos campos no Crystal Reports. Outras formataes a serem realizadas, podem ser acessadas atravs do menu suspenso que pode ser acionado com um clique no boto direito em cima do campo a ser formatado.

106 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Figura 54. Menu suspenso para formatao do campo (fonte, formato, bordas, etc.) no Crystal Reports A opo Change Font... d acesso a caixa de selo de fonte e suas variantes. A opo Change Format... d acesso a janela de formatao abaixo:

Figura 55. Janela de alterao do formato do campo no Crystal Reports. onde:

Suppress if Duplicated: suprime se o campo duplicado; Hide when Printing: oculta na impresso do relatrio; Alignment: Alinhamento do texto do campo; Print on mutiple lines: Imprimir em linhas mtiplas. Nesse caso ser necessrio limitar o n mximo de linha especificar no campo 'Maximum number of lines (Enter 0 for no limit:)' o valor padro para este campo 0 (zero). Opo Change Border and Colors... d acesso a janela de mudana da borda, cor do texto, tipo de linha da borda, tamanho da(s) borda(s), etc.

Figura 56. Alterao de borda e cores de borda e texto do campo do Crystal Reports. Opo Edit Text Field... d acesso a caixa de alterao do texto exibido no campo. 15.4.2. Inserindo Figuras, Linhas e Caixas Dois passos podero ser seguidos para a insero de qualquer um destes objetos, atravs do menu Insert: Picture (figura), Line (linha) ou Box (caixa). Ou acessar os seguintes botes seguintes.

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

107

Figura 57. Barra de ferramentas para insero de figura, linha e caixa (respectivamente) do Crystal Reports. 15.5. Trabahando com Frmulas O Crystal Reports, possibilita a utilizao de formulas, para permitir uma maor flexibilidade de selecionar os dados, por exemplo, para exibir o nmero da pgina ou a data atual, etc. alm de permitir a utilizao dos operadores If-Then-Else. Para inserir uma frmula, clique em Inset/Formula e em seguida digite o nome da frmula. Ser exibida a seguinte janela a baixo. Digite o seguinte texto no campo Formula Text: If {tbCadastro.nome} <> "Joo da Silva" Then "No Joo da Silva" Else " Joo da Silva" Cdigo 49. Texto da frmula "nome" inserida no relatrio do Crystal Reports.

Figura 58. Janela de edio de frmula do Crystal Reports Note que o nome da formula presenta-se como @nome, mas na verdade o caractere @ somente uma string de referncia do programa. A frmula "nome" no exemplo acima verifica se o nome do campo nome igual a 'Joo da Silva' e em seguida retorna o resultado verdadeiro ou falso. Cuidado que a comparao realizada e Case Sensitive, ou seja, diferencia maiscula ou minscula. Na janela de edio de frmulas existem dois botes importantes: Accept e Check. O primeiro aceita a frmula do modo que foi contruda e caso exista erro(s) uma mensagem ser exibida "There is an error in this formula. Do want to exit anyway?" (Existe um erro nesta formula. Deseja sair de qualquer jeito?). O segundo boto checa a autenticidade da formula e caso seja exibida a mensagem 'No errors found', a formula no apresenta erros ou pendncias.

108 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

15.5.1.1. Especificando o valor de uma frmula atravs do Visual Basic sempre comum se setar valor do Visual Basic para um relatrio do Crystal Reports, dais lanca-se mo das frmulas, que so "uma mo na roda". No exemplo seguinte veremos a passagem do nome, verso e direitos autorais do aplicativo para o cristal. Incialmente crie uma frmula com o nome Aplicativo, que ir receber o valor, ela dever de preferncia ser insirida no rodap do relatrio (Page footer). NomedoControle.Formulas(0)="Aplicativo='" & App.Title & " v" & App.Major & "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 'Neste caso no permitido o uso da constante de quebra de linha vbCrLf, j que o o valor a ser enviado dever ser feito em uma nica linha. A formatao de multi linhas, veja no tpico Formatando Campos (15.4.1) Cdigo 50. Envio de valor para uma frmula do CrystalReport
Outro modo de especificar ou mesmo filtrar dados atravs de uma frmula a apartir do Visual Basic utilizando a propriedate SelectionFormula, como segue o exemplo seguinte, que lista somente o nomes comeados coma letra B. NomedoControle.SelectionFormula="{tbCadastro.Nome>='}" & "B" & "" & "'" Cdigo 51. Filtragem de dados no CrystalReports atravs do Visual Basic. 15.6. Imprimindo, Visualizando e Exportando um Relatrio a partir do Visual Basic. Neste caso devemos definir alguns parmentro a ser passado para o relatrio e dados a ser definido na janela. 15.6.1. Imprimindo Nesse caso devemos fazer algumas consideraes: voc dever definir no modulo de desenho: a impressora, tamanho da pgina (A4, carta, etc.), margens, etc. Abaixo segue um exemplo de cdigo para imprimir o relatrio que acabamos de criar. Private Sub Command1_Click() With CrystalReport1 'define o camino do relatrio, podendo ser App.Path & "\nomedorelatrio.rpt" .ReportFileName = App.Path & "\tut_test.rpt" 'especifica qual o campo ir ordenar os dados no relatrio .SortFields(0) = "+{tbcadastro.nome}" 'enviar os dados do aplicativo para a frmula aplicativo do relatrio .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 'define o destino do relatrio .Destination = crptToPrint 'aciona o mecanismo de destino escolhido .Action = 1 End With End Sub Cdigo 52. Cdigo para impresso direta do relatrio sem visualizao prvia no Crystal Reports. 15.6.2. Visualizando A visualizao de um relatrio possui algumas vantagens em relao impresso ditreta, pois possibilita o usurio alm de visualiz-lo, como tambm imprimi-lo e/ou exporta-lo com arquivo suportados pelo CrystalReport (HTML, RTF, WinWord, CSS, Lotus 1-2-3, Excel, etc.) e/ou envia-lo por e-mail. Na janela de visualizao do relatrio, veremos uma barra de ferramentas alinhada da base da janela que posui os seguintes botes como a ordem que segue: voltar para a primeira pgina; retornar uma pgina; avanar uma pgina; avanar para a ltima pgina; Cancelar uma operao,

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

109

zoom do relatrios, imprimir relatrios, exportar relatorio para arquivo; exportar arquivo como anexo ao e-mail e fechar janela de visualizao.

Figura 59. Barra de ferramentas na janela de visualizao do Crystal Reports. Verifique que o cdigo abaixo possui um destaque para algumas propriedades do contrle do Crystal Reports (WindowState, WindowTitle e Destination). Private Sub Command1_Click() With CrystalReport1 'define o camino do relatrio, podendo ser App.Path & "\nomedorelatrio.rpt" .ReportFileName = App.Path & "\tut_test.rpt" 'especifica qual o campo ir ordenar os dados no relatrio .SortFields(0) = "+{tbcadastro.nome}" 'enviar os dados do aplicativo para a frmula aplicativo do relatrio .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 'define a janela do aplicativo commo maximizada .WindowState = crptMaximized 'define o ttulo da janela do relatrio .WindowTitle = "Relatrio de cadastro" 'define o destino do relatrio .Destination = crptToWindow 'aciona o mecanismo de destino escolhido .Action = 1 End With End Sub Cdigo 53. Cdigo para visualizar um relatrio.

Figura 60.Janela de visualizao de um relatrio pelo CrystalReport ActiveX Control. 15.6.3. Exportando (para arquivo e por e-mail)

15.6.3.1. Exportando para arquivo formato do Word Private Sub Command1_Click()

110 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

With CrystalReport1 'define o camino do relatrio, podendo ser App.Path & "\nomedorelatrio.rpt" .ReportFileName = App.Path & "\tut_test.rpt" 'especifica qual o campo ir ordenar os dados no relatrio .SortFields(0) = "+{tbcadastro.nome}" 'enviar os dados do aplicativo para a frmula aplicativo do relatrio .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 'define o destino do relatrio .Destination = crptToFile 'define o tipo de arquivo a ser exportado (WinWord no exemplo) .PrintFileType = crptWinWord 'aciona o mecanismo de destino escolhido .Action = 1 End With End Sub Cdigo 54. Cdigo para exportar um arquivo no formato do Word.

15.6.3.2. Enviando um relatrio em anexo por e-mail24 O cdigo abaixo no permite a visualizao da mensagem pelo usurio do programa ela especificada em design-time (tempos de construo do aplicativo) e prontamente enviada pelo editor de e-mail padro do computador. Private Sub Command1_Click() With CrystalReport1 'define o camino do relatrio, podendo setr App.Path & "\nomedorelatrio.rpt" .ReportFileName = App.Path & "\tut_test.rpt" 'especifica qual o campo ir ordenar os dados no relatrio .SortFields(0) = "+{tbcadastro.nome}" 'enviar os dados do aplicativo para a frmula aplicativo do relatrio .Formulas(0) = "Aplicativo='" & App.Title & " v" & App.Major & "." & App.Minor & " Copyright" & App.LegalCopyright & "'" 'define o destino do relatrio .Destination = crptMapi 'define o tipo de arquivo a ser enviado em anexo .PrintFileType = crptWinWord 'define o e-mail ou nome do destinatrio da ista de endereos do editor de e-mail .EMailToList = "saclizarosoft@hotmail.com" 'especifica o texto que dever compor o corpo da mensagem .EMailMessage = "Prezado Senhor," & vbCrLf & _ "Estamos enviando em anexo o relatrio de cadastro do programa:" & vbCrLf & _ "Relatrio do programa Lizaro Administer" & vbCrLf & _ "Atenciosamente," & vbCrLf & _ "William Costa Rodrigues" 'define o assunto da mensagem .EMailSubject = "Relatrio de cadastro" 'aciona o mecanismo de destino escolhido .Action = 1 End With End Sub
24

necessrio conexo com a Internet, para envio de e-mails.

Microsoft Visual Basic Gerando relatrios com o Crystal Reports

111

Cdigo 55. Exportando um arquivo para uma mensagem de e-mail. 15.7. Outros cdigos teis para trabalhar com relattios.25 Abaixo segue alguns cdigos teis para trabalhar com relatrios do Crystal Reports 15.7.1. Abrindo um relatrio, cujo banco de dados possuui senha With CrystalReport1 .ReportFileName = App.Path & "\arquivo.rpt" .Connect = ";pwd=SuaSenha" .DataFiles(0) = App.Path & "\arquivo.mdb" .Action = 1 End With 15.7.2. Alterar via cdigo o caminho da base de dados do relatrio Report1.DataFiles(0) = "c:\diretorio\bdados1.mdb" Report1.DataFiles(1) = "c:\diretorio\bdados2.mdb" 15.7.3. Como direcionar a impresso do Crystal para a porta LPT2? CrystalReport1.PrinterPort = "LPT2" CrystalReport1.PrinterName = "HP LaserJet 6L PCL" CrystalReport1.PrinterDriver = "PCL5EMS3.DRV" 15.7.4. Fazendo com que a janela de impresso do Crystal Reports fique como filha (MDIChild) de um MDI? Insira o objeto Crystal Report no MDI Form e altere a propriedade ReportFileName para o caminho do seu relatrio. No evento Activate do seu MDIForm, utilize a seguinte rotina: Private Sub MDIForm_Activate() CrystalReport1.WindowParentHandle = MDIForm1.hWnd CrystalReport1.WindowState = 2 'Abre o relatrio em formato maximizado CrystalReport1.Action = 1 End Sub 15.7.5. Inserir uma quebra de pgina no Crystal Reports? Acesse o menu Format|Section no Crystal Reports e selecione a seo desejada e escolha uma das seguintes opes: New Page Before; ou New Page After. 15.7.6. Modificar as margens de um relatrio em modo de execuo? Utilize as propriedades MarginLeft e MarginRight: Private Sub Command1_Click() With CrystalReport1 .MarginLeft = 100 .MarginRight = 100 End With CrystalReport1.Action = 1 End Sub

25

Exemplos retirados do programa Lizaro Visual Basic Dicas v3.0

112 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

15.7.7. Outra forma de especificar a senha do banco de dados utilizado pelo relatrio. Altere a propriedade Connect, do objeto Crystal para algo como a expresso abaixo: CrystalReport1.Connect = App.Path & "\DataBase.mdb", False, False, ";PWD=senha"

Microsoft Visual Basic Criando um ActiveX

113

16. CRIANDO UM ACTIVEX26


Iremos neste captulo final construir um controle ActiveX (OCX) para exibir arquuivos de ajuda no formato hlp, de modo simples veremos como contruir este componente. Inicie um novo projeto, escolhendo a opo ActiveX Control. Em seguida ser criada uma janela de um UserControl, personalize-a como a figura abaixo. Inserindo um CommnadButton e definido uma imagem e texto para ele.

Figura 61. Controle ActiveX em Design-time. Na janela code deste user controle insira os cdigos abaixo: 'Author: William Costa Rodrigues (Lizaro Soft) 'Created date: 2-25-2003 'Modified date: 08-01-2004 'Description: ActiveX Control to access help file in 'hlp' format. Enum HLPConst HELP_CONTEXT = &H1 'Exibe o tpico de ajuda pelo Nmero ID HELP_HELPONHELP = &H4 'Exibe a ajuda do Windows de como utilizar ajuda HELP_INDEX = &H3 'Exibe o CONTEUDO da Ajuda HELP_QUIT = &H2 'Termina a ajuda HELP_MULTIKEY = &H201& 'Procura por palavras-chave na tabela alternativa da ajuda HELP_KEY = &H101 'Exibe o ndice da Ajuda End Enum 'especifica a constante a ser utilizada pela API para exibir o arquivo de ajuda Dim m_AjudaHLP As HLPConst Private Sub UserControl_Initialize() 'define o tipo de constante para a varivel m_AjudaHLP m_AjudaHLP = HELP_CONTEXT End Sub Private Sub UserControl_Resize() 'ajusta o tamanho do componente quando este for redimensionado, mantendoo com um tamanho fixo cmdCtl.Left = 0 cmdCtl.TOp = 0 UserControl.Width = cmdCtl.Width UserControl.Height = cmdCtl.Height UserControl.ScaleLeft = 0 UserControl.ScaleTop = 0 cmdCtl.TOp = 0 cmdCtl.Left = 0 End Sub

26

Cdigo retirado do ActiveX Lizaro HelpOCX v1.00.0007 disponvel em www.lizarosoft.cjb.net

114 Desvendando a linguagem de programao mais popular do mundo W.C. Rodrigues

Public Function Exibir_Ajuda(frm As Object, Ajuda As String, Constante As HLPConst, Optional Topico As Long) 'funo para exibir o arquivo de ajuda If Constante = TOPICOS And Topico = Empty Then MsgBox "Especifique o nmero do tpico que deseja exibir!", vbExclamation, "Erro: Tpico no especificado" Else 'chama a fino definida num mdulo que utiliza a API WinHelp ExibirAjudaHLP frm, Ajuda, Constante, Topico End If End Function Public Property Get AjudaHLP() As HLPConst 'retorna a propriedade AjudaHLP do controle AjudaHLP = m_AjudaHLP Constante = AjudaHLP End Property Public Property Let AjudaHLP(ByVal nAjudaHLp As HLPConst) 'especifica a propriedades AjudaHLP do controle, modificando-a para o novo valor especificado m_AjudaHLP = nAjudaHLp PropertyChanged "AjudaHLP" End Property Cdigo 56. Cdigo do controle ActiveX para especificar e retornar as propriedades. Agorma iremos trabalhar com a API WinHelp parapodermos chamar o arquivo de ajuda atrav;es do controle ActiveX. Public Declare Function WinHelp Lib "USER32" Alias "WinHelpA" _ (ByVal hwnd As Long, ByVal lpHelpFile As String, _ ByVal wCommand As Long, ByVal dwData As Long) As Long Public Function ExibirAjudaHLP(X As Object, hlpFile As String, Constante As HLPConst, Optional cnt As Long) 'x - espeficica a propriedade hwnd do form 'hlpfile especifica o caminho do arquivo de ajuda 'Constante - especifica a constante a ser utulizada para especifica em que modo a API devera exibir o arquivo de ajuda ' cnt especifica o tpico especfico que ser exibido 'funo que exibe o arquivo de ajuda especificado na funo Exibir_Ajuda no cdigo do controle ActiveX UserControl If Constante = HELP_CONTEXT Then If cnt = Empty Then cnt = 0 Aju = WinHelp(X.hwnd, hlpFile, Constante, cnt) Else Aju = WinHelp(X.hwnd, hlpFile, Constante, CLng(0)) End If End Function Cdigo 57. Cdigo para exibir a arquivo de ajuda especfico atravs da API WinHelp no controle ActiveX.

Microsoft Visual Basic Bibliografia Consultada

115

17. BIBLIOGRAFIA CONSULTADA


Annimo, 1998. Guia de Referncia do Visual Basic, 65p. Annimo, 2003. Crystal Reports Gerando seus relatrios, www.scriptbrasil.com.br, 11p.. Appleman, D. 1997. Developing Advanced ActiveX Controls With Visual Basic 5.0, www.desaware.com, 3p. Cornell, G. 1998. Visual Basic 5 completo e total. Trad. Unonius, L.G.E., Makron Books, So Paulo, SP, 778p. Ganz Jr., Carl. 1998. Visual Basic 5 Desenvolvendo bancos de Dados para a WEB. Traduo e reviso tcnica: Santos, J. R.D.P., Makron Books, So Paulo, SP, 489p. Ideolgica 1999. Modelagem de Dados em Microsoft Access 95. So Paulo, SP, 21p. Lima, A. S. 1998. Aplicaes em Visual Basic 5.0 Controle de estoque. rica, So Paulo, SP, 338p. Machado, F. N. R. & Abreu, M. 1996. Projeto de Banco de Dados: uma viso prtica. 2 Ed. rica, So Paulo, SP, 298p. Marcoratii, J. C. 2000. Usando HTML HELP em suas aplicaes Visual Basic. www.geocities.com/SilliconValleyBay/3994/ajuda.htm, acesso em 05/04/2000. Marcoratii, J. C. 2003. www.geocities.com/SilliconValleyBay/3994/, consulta em junho de 2003. Microsoft Corporation. 1991-1997. Visual Basic Books Online v1.0, acompanha o Visual Basic v 5.0. Morgado, F. 1998. Visual Basic 5, mtodo rpido. Infobook, Rio de Janeiro, RJ, 181p. Pires, A. 1996. Microsoft Access 2.0 for windows. Axcel Books, Rio de Janeiro, RJ, 150p. Rodrigues, W.C. 2000. Microsoft Visual Basic 5.0 - Tutorial para programadores iniciantes e intermedirios. Ed. do Autor, Rio de Janeiro, RJ. www.lizarosoft.hpg.com.br, 29p. Rodrigues, W.C. 2003. Lizaro Visual Basic Dicas v3.0, biblioteca de dicas do Visual Basic, www.lizarosoft.hpg.com.br. Susviela, C.A.N. 1999. Visual Basic Curso Bsico. Ed. do Autor, Santana do Livramento, RS, 168p. VBAccelerator.com (Steve McMahon). www.vbaccelerator.com, consulta em junho de 2003.

Você também pode gostar