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.

INTRODUO .............................................................................................................1

2.

CONCEITOS BSICO DO VISUAL BASIC.....................................................................3


2.1.
2.2.
2.3.
2.4.
2.5.
2.6.
2.7.
2.8.

3.

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

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.

6.

DATE ................................................................................................................................ 39
DATAVALUE ....................................................................................................................... 39
FORMAT ............................................................................................................................ 39
PROJETO COMENTADO ......................................................................................................... 39

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

EXEMPLO CARREGA VRIOS BITMAPS EM UM CONTROLE IMAGELIST.

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.

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
CDIGO 9. LINHA

DE COMANDO PARA EXTRAIR A IMAGEM DE INDEX

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

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

DE UMA ARQUIVO DE CABEALHO, CONTENDO OS TPICOS SENSVEIS AO CONTEXTO E SUA

IDENTIFICAO NUMRICA.

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

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)

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

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

15

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

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

17

modMa in
mdulo In icial da aplicao

frmMain

m enus

frmCad astro
Banco de d ados

Mdulos Classes
User Control

controles

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

String,

wState

As

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

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

Valor

lvwIcon

lvwSmallIcon

lvwList

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)

Constante

lvwReport

Valor

29

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

object
index
key
text
icon
6
7

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

Valor

sbrText

sbrCaps

sbrNum

sbrIns

sbrScrl

sbrTime
sbrDate

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

relationship
key
text
image
selectedimage

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.

Tabela 10. As constantes para relationship so:10


Constante
tvwFirst

Valor
0

tvwLast

tvwNext
tvwPrevious
tvwChild

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

Extrado do arquivo de ajuda do Microsoft Visual Basic 6.0

"Informao",

Microsoft Visual Basic Controles Personalizados (Propriedades e Eventos)

"inter")

37

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


Set

xNode

TreeView1.Nodes.Add(1,

tvwChild,

"Exclamao",

"exc")

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

( ) No

ImageHeight e ImageWidth de uma controle ImageList..: ( ) Sim

( ) No

Identation de um controle TreeView..............................: ( ) Sim

( ) No

Gridlines de um controle ListView...................................: ( ) Sim

( ) No

Min e Max de um controle ProgresBar.............................: ( ) Sim

( ) No

Name de um controle TreeView......................................: ( ) Sim

( ) No

Align de um controle StatusBar.......................................: ( ) Sim

( ) No

LabelEdit de um controle TreeView..................................: ( ) Sim

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

CommandButton
CommandButton
Label
Label

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

40

TextBox
TextBox
TextBox
TextBox

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

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

Figura 22. Tela de informaes de um projeto.

43

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

8. INICIANDO COM A SQL (STRUCTURED QUERY LANGUAGE)


A SQL - Structured Query Language (Linguagem de Consulta Estruturada) praticamente

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.

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

Constante no Visual Basic


dbBoolean
dbByte
dbInteger
dbLong
dbCurrency
dbSingle
dbDouble
dbDate
dbText

Long Binary (Ole Object)

dbLongBinary

Memo
GUID

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

Tabela Alunos

Disciplina
Portugus
Matemtica
Histria do Brasil

Codigo
001
002
003

Nome
Joo da Silva
Jos Amrico de Novaes
Marcelo Paes Gulart

Tabela Exame
Ident
1
2
3

IDAluno
001
001
001

IDExame
125
254
632

Nota
8,0
8,5
9,0

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

Error

Database
Container
Document

QueryDef
Field

RecordSet

Relation

Field

Field

Parameter

TableDef
Index

Field

Field

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

Snapshot

em

um

lao

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

Nmero
3197
3260
3261

77

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

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

85

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

23

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.

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