Você está na página 1de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Agradecimentos Embora tenha custado horas e horas de montagem (word) essa apostila no teria sido confeccionada se eu no tivesse encontrado a Home Page do Jos Carlos Macoratti Visual Basic Banco de dados. Excelente trabalho de garimpo deste profissional que com certeza prova que podemos encontrar vrios servios de boa qualidade e de graa na Internet. Por favor se quiserem agradecer visitem este site.

http://www.geocities.com/SiliconValley/Bay/3994/ macoratti@riopreto.com.br

Trabalhos de edio e montagem: Carlos Alberto Nunes Susviela Santana do Livramento RS Brasil susviela@zaz.com.br http://www.geocities.com/SiliconValley/Haven/2828

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 1 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Indice:

1) INTRODUO ( Conceitos Bsicos )................................................................................................. 6 1.1) BANCO DE DADOS ..................................................................................................................... 6 1.2) TRABALHANDO COM TABELAS................................................................................................ 9 1.3 - CRIANDO BANCO DE DADOS, TABELAS, NDICES, RELACIONAMENTOS E CHAVES PRIMRIAS. (DATA MANAGER) - ................................................................................................... 13 1.4. RECORDSET: TABLE, DYNASETS, SNAPSHOTS.(DEFINIO, PRINCIPAIS MTODOS E EVENTOS RELACIONADOS)........................................................................................................... 19 1.5. DATA CONTROL. (DEFINIO, PRINCIPAIS MTODOS E EVENTOS RELACIONADOS) .. 26 1.6. EVENTOS: UM NOVO ENFOQUE (EVENTOS: CONCEITOS, EXEMPLOS .) ........................ 31 1.7. O PODER DA SQL (A LINGUAGEM SQL : INTRODUO.).................................................... 32 1.8. USANDO EDIT, ADDNEW E UPDATE...(EDITANDO, INCLUINDO E ATUALIZANDO...) ....... 35 1.9. VISUAL BASIC - DATAS E O ANO 2000.(COMO O VB INTERPRETA O ANO COM DOIS DGITOS.(DD/MM/YY)....................................................................................................................... 37 1.10. SQL : CRIANDO CONSULTAS PARAMETRIZADAS NO VISUAL BASIC. ............................ 40 2) TRABALHANDO COM SQL (Conceitos Bsicos ) ........................................................................... 43 2.1 Iniciando com a SQL. .................................................................................................................. 43 2.2 Criando tabelas via SQL.............................................................................................................. 45 2.3 ndices e Tabelas - Criar, Alterar e Excluir. ................................................................................. 47 2.4 Testando As Instrues Sql......................................................................................................... 49 3) TRABALHANDO COM REDES ( Conceitos Bsicos ) ..................................................................... 52 3.1 Introduo .................................................................................................................................... 52 3.2 Acesso aos Dados....................................................................................................................... 53 3.3 Bloqueio de Registros.................................................................................................................. 55 4 ) CONTROL DATA ( Projeto Comentado ) ........................................................................................ 58 4.1 Acesso a Base de Dados - Data Control ........................................................................................ 58 1) Definio do banco de dados e tabelas. ....................................................................................... 58

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 2 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2) Desenhar a interface da aplicao com o usurio ........................................................................ 60 3) Implementar o cdigo da aplicao............................................................................................... 63 1-Cdigo para boto incluir dados: ................................................................................................ 64 2-Cdigo do boto gravar dados: .................................................................................................. 65 3-Cdigo do boto Cancelar a incluso de dados: ........................................................................ 66 4-Cdigo para o boto Excluir dados:............................................................................................ 67 5-Cdigo para o boto Localizar dados: ........................................................................................ 67 6-Cdigo do evento Reposition: ..................................................................................................... 68 7-Cdigo do evento Validate: ......................................................................................................... 69 8-Cdigo para tratamento de erros ................................................................................................ 70 5 ) D.A.O (Projeto comentado).............................................................................................................. 71 Estrutura da tabela. ........................................................................................................................... 71 Interface com o usurio ..................................................................................................................... 71 Codigo da Aplicacao.......................................................................................................................... 75 6 ) SQL .................................................................................................................................................. 86 Estrutura da tabela. ........................................................................................................................... 86 Interface com o usurio ..................................................................................................................... 88 Codigo da Aplicacao.......................................................................................................................... 91 7 ) CRYSTAL REPORTS ( Projeto Comentado )................................................................................ 101 Introduo:Gerando os seus relatrios com o Crystal Reports....................................................... 101 Criando um novo relatrio. .............................................................................................................. 101 Agrupando e ordenando registros. .................................................................................................. 104 Inserindo ttulos e Legendas............................................................................................................ 104 Formatao de campos, campos especiais e desenho de linhas e caixas. ................................... 105 Trabalhando com frmulas. ............................................................................................................. 106 Determinando o estilo e inserindo uma figura em seu relatrio. ..................................................... 108 Imprimindo o relatrio a partir de sua aplicao no Visual Basic.................................................... 109 Relatrio com dados de vrias tabelas e Seleo de registros ...................................................... 110 8 ) ACESSO A BASE DE DADOS PADRO XBASE(DBASE/CLIPPER).......................................... 126 Acesso utilizando o Controle de Dados Vinculados. (Data Control) ............................................... 126
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 3 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Acesso utilizando a DAO. (Data Access Object)............................................................................. 134 9 ) SETUP WIZARD ............................................................................................................................ 145 10 ) DBGRID ....................................................................................................................................... 157 Introduo ........................................................................................................................................ 157 Utilizao e Configurao................................................................................................................ 157 Controle Financeiro - Definio de tabelas. .................................................................................... 163 Controle Financeiro - Interface com o usurio. ............................................................................... 166 Controle Financeiro - Cdigo do projeto.......................................................................................... 173 DbGrid - Dicas e Truques ................................................................................................................ 182 11 ) DBLIST......................................................................................................................................... 183 12 ) REDES (Projeto comentado) ....................................................................................................... 192 - Acesso Exclusivo/Compartilhado. ................................................................................................. 192 - Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly .................................................. 196 13 ) ERROS......................................................................................................................................... 203 Introduo. ....................................................................................................................................... 203 Interceptando erros.......................................................................................................................... 204 Identificando o Tipo de Erro............................................................................................................. 205 Finalizando um tratamento de erros................................................................................................ 210 Principais erros relacionados a Banco de dados. ........................................................................... 212 14 ) OLE .............................................................................................................................................. 215 Introduo. ....................................................................................................................................... 215 Instruo do WordBasic................................................................................................................... 218 Instruao do VBA 97........................................................................................................................ 218 Usando Automao OLE com o Word - Exemplo Prtico............................................................... 218 Usando Automao OLE com o Excel - Exemplo Prtico............................................................... 229 15 ) GRFICOS NO VB ...................................................................................................................... 231 Introduo. ....................................................................................................................................... 231 Utilizao e Configurao................................................................................................................ 233
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 4 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

16 ) OPES DE BUSCA RPIDA ( Dicas ) ..................................................................................... 241 17 ) HOT SPOTS NO VISUAL BASIC ( Dicas ).................................................................................. 244 18 ) FORMULRIOS COM SUBFORMULRIOS NO VB ? (Dicas)................................................... 247 19) CRIANDO UM SCREEN SAVER NO VB (Dicas) ......................................................................... 252 20) ROTINA PARA VALIDAR CPF/CGC NO VISUAL BASIC (Dicas) ............................................... 256 21) DBGRID COM LISTBOX - PERSONALIZE O SEU DBGRID: CAIXA DE LISTAGEM, TOTALIZANDO POR COLUNAS E CONTADOR DE REGISTROS. (Dicas) ............................................................... 262 Personalizando e incrementando o DBGrid........................................................................................ 262 Interface Visual do Projeto. ................................................................................................................. 263 Cdigo do Projeto................................................................................................................................ 264

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 5 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1) INTRODUO ( Conceitos Bsicos )

1.1) BANCO DE DADOS


Podemos entender por banco de dados qualquer sistema que reuna e mantenha organizada uma srie de informaes relacionadas a um determinado assunto em uma determinada ordem. A lista telefnica um exemplo, nela percebemos que todos os dados referentes a uma pessoa esto na mesma linha, a isso chamamos registros.. O tipo ou categoria da informao (nome, telefone, etc.) sobre uma pessoa est separada em colunas, as quais chamamos campos.. Um Sistema Gerenciador de banco de dados relacionais(SGBDR) usado para armazenar as informaes de uma forma que permita s pessoas examin-las de diversas maneiras. O Gerenciador relacional de bancos de dados do Visual Basic e do Access o Microsoft Jet, ele pertence a uma categoria diferente dos Gerenciadores tradicionais, como o Dbase e o Paradox, pois possue caractersticas em comum com os banco de dados cliente-servidor. Tais caractersticas comuns so: Todas as tabelas, ndices, consultas, relatrios e cdigo so armazenados num nico arquivo .MDB Os campos de data suportam informao de hora. Admite o armazenamento permanente de comandos SQL possvel forar a integridade referencial entre as tabelas. Os campos suportam valores nulos (Null)

No Dbase/Clipper banco de dados significa um arquivo que contm a estrutura de dados(campos) e os dados (Arquivo padro DBF). Para o padro MDB este conjunto de dados e sua estrutura denomina-se Tabela. Portanto aquilo que o Dbase/Clipper considera um banco de dados o Access e o Visual Basic considera como uma Tabela .

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 6 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para o Access e o Visual Basic todos os componentes do sistema esto em um nico arquivo com extenso MDB, a este "pacote" consideramos o banco de dados. Logo quando abrimos um arquivo MDB temos acesso a todos os componentes do sistema : tabelas, consultas, macros, relatrios, etc. A esses componentes chamamos objetos do sistema e em resumo podemos descrev-los a seguir:

Tabelas Consultas Formulrios Relatrios Macros Mdulos

Onde armazenamos as informaes que queremos tratar. Filtram as informaes das tabelas e permitem sua visualizao. Geralmente so comandos SQL. So janelas destinadas edio e visualizao dos dados. Organizam os dados de tabelas e consultas de uma maneira que possam ser impressos Rotinas que automatizam determinadas tarefas sem necessidade de programao.

(Utilizadas no Access) Armazenam instrues e comandos da linguagem Access Basic/VBA e permitem melhorar e expandir os recursos do sistema.

Obs: Embora o Visual Basic utilize arquivos padro MDB; Formulrios, Relatrios e Mdulos so tratados de forma diferente pelo prprio Visual Basic e, nativamente, o Visual Basic no utiliza Macros. Alem disso no Access e Visual Basic podemos utilizar outros arquivos alm dos arquivos MDB; como arquivos DBF do Dbase/Clipper, arquivos do Paradox, do Btrieve, etc. Os recursos de definio de dados do mecanismo Jet permitem a criao, a modificao e a excluso de tabelas, ndices e consultas. O Jet tambm aceita a validao de dados em nvel de campo e registro. A integridade de dados tem suporte sob a forma de chaves primrias e integridade referencial entre tabelas. Para manipulao de dados, o Jet admite o uso da SQL e de objetos de acesso aos dados. Esses objetos permitem ao programador manipular informaes contidas no banco de dados, atravs da definio das propriedades dos objetos e pela execuo dos mtodos associados aos objetos. A tabela abaixo relaciona esses objetos e descreve resumidamente suas funes: Objeto DBengine Workspace Descrio O objeto que referencia o mecanismo de bancos de dados do Microsoft Jet Um rea na qual o usurio pode trabalhar com os bancos de dados
Pg. 7 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Database TableDef QueryDef Recordset Field Index Relation

Uma coleo de informaes organizadas em tabelas, juntamente com informaes a respeito de ndices e relaes sobre as tabelas Uma definio da estrutura fsica de uma tabela de dados Uma consulta armazenada de SQL das informaes contidas no banco de dados. Uma coleo de registros de informaes sobre um nico tpico Uma nica unidade de informaes em um banco de dados Uma lista ordenada de registros em um recordset, baseada em um campo chave definido Informaes armazenadas a respeito do relacionamento entre duas tabelas

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 8 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1.2) TRABALHANDO COM TABELAS


As tabelas so o corao dos bancos de dados, e, uma das tarefas fundamentais que voc dever fazer ser organizar os dados em tabelas. Para criar uma tabela no Visual Basic voc pode usar o Data Manager, mas, uma maneira mais fcil, se voc tiver o Access, ser utilizar os seus recursos para este fim. Aqui descreveremos como criar uma tabela no Access sem a ajuda de um assistente. Basicamente voc ir dar nome aos campos (colunas), e definir o tipo de dados para estes campos. Isto depende da informao que deseja armazenar no campo; se for armazenar um dado que no far parte de clculos, um nome por exemplo, o tipo pode ser texto, se for armazenar valores numricos que faro parte de clculos o tipo ser numrico(inteiro, simples...), se for armazenar datas o tipo ser data e assim por diante. O tamanho do campo define a quantidade de informao relacionada ao item que voc pode armazenar, assim : para um campo do tipo texto com tamanho 30 voc poder armazenar textos com no mximo 30 caracteres, um campo numrico de tamanho 2 armazena nmeros com at dois dgitos. Vejamos como exemplo a estrutura de uma tabela que chamaremos Clientes. Como o nome indica ela dever guardar informaes sobre os clientes, decidimos que tais informaes sero: Cdigo, Nome, Endereo, Cep e idade: Exemplo de Tabela Clientes Nome do Campo Codigo Nome Endereco Cep Idade Tipo do Dado armazenado Numerico Texto Texto Texto Numerico Comprimento para o campo 3 40 40 8 3

Embora no exista nenhuma regra absoluta para os dados que devem ser colocados em cada tabela, damos abaixo diretrizes gerais para um projeto de banco de dados eficiente:

Determine um tpico para cada tabela e certifique-se de que todos os dados contidos na tabela esto relacionados com o tpico.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 9 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Se uma srie de registros em uma tabela apresenta campos intencionalmente deixados em branco, divida a tabela em duas tabelas similares.

Se as informaes se repetem em vrios registros, desloque essas informaes para outra tabela e defina um relacionamento entre elas.

Campos repetidos indicam a necessidade de uma tabela secundria. Use tabelas de pesquisa para reduzir o volume de dados e aumentar a preciso da entrada de dados. No armazene informaes em uma tabela se elas puderem ser calculadas a partir dos dados contidos em outras tabelas.

Para cada linha que voc adiciona a sua tabela voc tem um registro. Feito isto importante voc definir os relacionamentos entre as tabelas de seu banco de dados. Por exemplo se voc criou duas tabelas, uma para os clientes e outra para os pedidos feitos por esses clientes, voce poder relacionar as duas tabelas por meio de um campo cdigo do cliente comum s duas tabelas. Criando Tabelas no Access ( No Visual Basic use o Data Manager) possvel criar uma tabela com um Assistente de Tabela, mas se ele no oferecer o tipo de tabela desejada, pode-se criar a tabela sem ajuda. Mesmo que no se utilize o Assistente de Tabela pode-se usar o Construtor de Campos para selecionar campos individuais das tabelas de amostra do Assistente de Tabela. Para criar uma tabela sem um Assistente (Access verso 2.0 )

1-Na janela Banco de Dados, clique no boto "Tabela" e, ento, escolha o boto "Novo". 2-Na caixa "Nova Tabela", clique no boto "Nova tabela". O Microsoft Access exibe a janela Tabela no modo Estrutura, no qual so definidos os campos da tabela. Para definir campos na tabela

1 - Na coluna "Nome do Campo" digite o nome do primeiro campo seguindo as convenes de nomenclatura padro do Microsoft Access. -Ou- Clique no boto "Construir" na barra de ferramentas e
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 10 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

selecione o campo a partir do Construtor de Campos. O tipo de dados e outras propriedades para cada campo j esto definidas, embora possam ser alterados caso desejado. 2 - Na coluna "Tipo de Dados", mantenha o padro (Texto) ou clique na seta e selecione o tipo de dados desejado. 3 - Na coluna "Descrio" digite a descrio da informao que este campo ir conter. A descrio opcional. 4 - Se desejar, defina as propriedades do campo na parte inferior da janela. 5 - Repita os passos de 1 a 4 para cada campo.

Para salvar a tabela

1 - Aps terminar de definir os campos clique no boto "Salvar" na barra de ferramentas ou escolha o comando Salvar no menu Arquivo para salvar a estrutura da tabela. O Microsoft Access, ento, envia uma mensagem pedindo para nomear a tabela. 2 - Digite um nome para a tabela conforme as convenes de nomenclatura do Microsoft Access e, ento, escolha OK. Observaes

recomendvel que se designe o campo de (*) chave primria em qualquer tabela. Se isto no for feito o Microsoft Access pergunta ao usurio se este deseja que o programa crie uma chave primria quando salvar a tabela pela primeira vez. Adicionalmente definio das propriedades de campo, pode-se, tambm, definir as propriedades da tabela. As propriedades da tabela so atributos de toda a tabela, preferencialmente a campos individuais apenas. Quando uma coluna ou caixa de propriedades clicada, o Microsoft Access exibe dicas teis acerca de cada coluna ou propriedade na poro inferior direita da janela. Aps criar tabelas, pode-se criar consultas, formulrios, relatrios e outros objetos de banco de dados que auxiliam o usurio a manipular seus dados.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 11 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

(*) - A chave primria um campo ou combinao de campos que permite a identificao nica de cada registro de uma tabela. Assim como o ndice principal para a tabela, ela utilizada para associar dados entre tabelas. Se uma tabela no inclui um campo de chave primria bvio, o Microsoft Access pode criar um campo que designa um nmero nico para cada registro.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 12 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1.3 - CRIANDO BANCO DE DADOS, TABELAS, NDICES, RELACIONAMENTOS E CHAVES PRIMRIAS. (DATA MANAGER) Criando um banco de dados.

Para criar um banco de dados com o Data Manager, execute o data manager e selecione a opo File/New Database no menu principal. Um dilogo no padro Salvar Como ser aberto solicitando o nome do arquivo; informe o nome do banco de dados que deseja criar, por exemplo, Controle, a janela

Tables/QueryDefs da figura surge, seu banco de dados j esta criado e voc esta pronto para criar suas tabelas.

Criando uma Tabela com o Data Manager.

Para criar uma tabela com o Data Manager, proceda da seguinte forma, clique no boto New da janela Tables/QueryDefs e, no dilogo Add Table mostrado abaixo (figura abaixo) siga os passos indicados:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 13 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1. Informe o nome da tabela na caixa de texto Name. 2. Informe o nome do campo na caixa de texto Field Name. 3. Selecione o tipo de dado apropriado na caixa de combinao Data Type. 4. Digite o tamanho do campo, no caso do tipo Text, na caixa de texto Size. 5. Clique no boto > para incluir o campo na tabela. 6. Repita os passos 2 a 5 at que todos os campos da tabela estejam definidos e clique no boto OK para cri-la.

Alterando a Estrutura de uma Tabela.

Para definir propriedades no obrigatrias de uma tabela, clique no boto Design da janela Tables/QueryDefs. O Data Manager abrir a janela Table Editor, mostrada na abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 14 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Na janela Table Editor, voc pode: a) Editar as propriedades de qualquer campo selecionado, neste caso, os dados existentes sero perdidos. b) Adicionar e remover campos. c) Criar, remover e alterar ndices. Para a definir as propriedades opcionais dos campos de uma tabela, selecione o campo e clique no boto Edit da janela Table Editor. O Data Manager abrir a janela da figura abaixo, agora basta alterar as propriedades desejadas para o campo editado.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 15 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Obs:

O Data Manager no admite a edio de um campo componente de uma expresso de ndice ou de um relacionamento. Nestes casos, obrigatria a remoo do ndice ou do relacionamento.

Criando e Editando ndices

A criao de um ndice de uma tabela no Data Manager simples. Basta selecionar a janela Table Editor,

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 16 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

clicar no boto Indexes, e, seguir os passos indicados:

1. Informar o nome do ndice na caixa de texto Index Name. 2. Definir as propriedades do ndice, marcando as caixas de verificao apropriadas. 3. Selecionar os campos componentes na caixa de listagem apropriada. 4. Selecionar a ordem do ndice, se ascendente ou descendente, clicando no boto de comando indicado. Definindo Relacionamentos

Para visualizar ou definir relacionamentos entre os campos das tabelas de um banco de dados, clique no boto Relations na janela Tables/QueryDefse siga os passos indicados:

1. Selecione a tabela primria na caixa de combinao Primary Table. 2. Selecione a tabela dependente na caixa de combinao Related Table. 3. Defina o tipo de relacionamento, selecionando o boto de opo apropriado na caixa de grupo Type. 4. Selecione a chave externa na caixa de combinao Select Matching Fields. 5. Marque, se for o caso, a caixa de verificao indicando se a integridade referencial dos dados deve ser garantida. Obs: Para definir um relacionamento, indispensvel que o campo origem seja a chave primria da tabela primria. Alm disso o campo definido como chave externa deve ser do mesmo tipo de dado da chave primria.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 17 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Definindo uma Chave Primria

Para definir uma chave primria, selecione o boto Keys(janela Table Editor) e o Data Manager abre o dilogo mostrado na figura abaixo, onde a chave pode ser definida clicando-se e selecionando-a da lista Primary.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 18 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1.4. RECORDSET: TABLE, DYNASETS, SNAPSHOTS.(DEFINIO, PRINCIPAIS MTODOS E EVENTOS RELACIONADOS)


Como abrir um banco de dados. A primeira coisa a fazer para armazenar e/ou acessar dados criar um banco de dados. Se j tiver um banco de dados, voc tem de abri-lo antes do seu programa poder us-lo. Os objetos de acesso a dados so organizados em uma hierarquia (fig. 1- Hierarquia simplificada). - No topo da hierarquia temos o objeto DBEngine que controla todos os outros objetos. - O objeto DBEngine possui uma coleo de objetos Workspace que define uma sesso para um usurio. - Cada objeto Workspace possui uma coleo de objetos Database que contm os bancos de dados abertos disponveis. - Cada objeto DataBase possui uma coleo de objetos Recordset que representam os conjuntos de registros abertos.(Cada objeto Recordset possui uma coleo Fields).
Fig-1

A abertura de um banco de dados e feita com o uso do mtodo Opendatabase do objeto Workspace, mostrado no cdigo abaixo : Dim meubd as Database Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")

Para trabalhar com os objetos de acesso a dados voc usa as variveis do objeto para cada tipo de objeto (Database, Recordset,...). Para designar um objeto a uma varivel do objeto utilize a instruo SET. No cdigo acima primeiro definimos uma varivel objeto de banco de dados(meubd), e a seguir usamos o mtodo Opendatabase para designar nosso banco de dados, nome e localizao, varivel objeto declarada. Aps abrir o banco de dados voc deve definir um Recordset para ter acesso aos dados contidos no banco de dados.

Recordsets

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 19 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

O novo objeto Recordset o recurso mais importante relacionado com os objetos de acesso a dados. Ele ocupa o lugar dos objetos tabela, dynaset e snapshot das verses anteriores. Agora ao invs de abrir uma tabela ou criar um dynaset voc abre um Recordset. H trs tipos de Recordsets disponveis: Tabelas - so as estruturas fsicas que contm os dados em um banco de dados. Dynaset - so um conjunto de ponteiros para acesso a campos e registros localizados em uma ou mais tabelas. Snapshot- so uma cpia somente de leitura dos dados de uma ou mais tabelas.

Tabelas: uso, vantagens/desvantagens, abertura.

Como todos os dados de um banco de dados esto armazenados em tabelas, acessar tabelas significa acessar diretamente os dados de um arquivo. Vantagens do uso de Tabelas Desvantagens do uso de Tabelas No se pode utilizar filtros para restringir os registros usando determinados critrios. O comando Seek s encontra o primeiro registro que atende a seus critrios. a nica forma de Recordset que aceita o uso de ndices, tornado desta forma a pesquisa em uma tabela mais rpida do que em um dynaset ou snapshot. As alteraes efetuados pelos usurios ficam imediatamente disponveis, no sendo necessrio dar o refresh para atualizar os dados.

Abertura de uma tabela para utilizao Para abrir uma tabela, defina um objeto Recordset e use o mtodo OpenRecordset para acessar a tabela. Informe a constante DbOpenTable para identificar o tipo de recordset criado. Veja o cdigo abaixo:

Dim meubd as Database Dim minhatbl as Recordset Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb") Set minhatbl = meubd.OpenRecordset("Clientes",DbOpenTable) A novidade em relao ao cdigo acima a definio da varivel objeto tipo Recordset minhatbl e atribuio a esta varivel da tabela Clientes do banco de dados Dados.mdb. Note que o arquivo de banco de dados padro Access.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 20 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Dynasets: uso, vantagens/desvantagens, configurao

Um dynaset um conjunto de ponteiros de registros provenientes de uma ou mais tabelas,e indicam os dados especificados existentes quando da criao do dynaset. Os dynasets so recordsets atualizveis e refletem as alteraes feitas pelo usurio nas tabelas e no prprio dynaset. Vantagens do uso de Dynasets Permitem reunir informaes de diversas tabelas, atravs de instrues SQL. Permitem utilizar os mtodos de busca Find e o uso de filtros e ordem de classificao para mudar a viso dos dados. Desvantagens do uso de Dynasets No admitem a criao de ndices e do mtodo Seek No reflete incluses ou excluses feitas por outros usurios. Para mostrar as alteraes necessrio renovar (refresh) o dynaset Configurao de um Dynaset Para utilizar um dynaset voc deve definir um objeto recordset (Dim) e depois gerar o dynaset com o mtodo OpenRecordset. Para selecionar os registros voc pode usar uma instruo SQL. Veja exemplo abaixo:

Dim meubd as Database Dim meudyn as Recordset Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb") Set meudyn = meubd.OpenRecordset("SELECT * FROM Clientes", DbOpenDynaset) Definimos a varivel objeto meudyn, abrimos o banco de dados e a seguir criamos um dynaset que composto por todos os registros da tabela Clientes, atravs da instruo SQL que seleciona (SELECT) todos (*) os registros da tabela Clientes.

Obs: Tambm possvel criar um dynaset a partir de outro dynaset.

Snapshots: uso, vantagens/desvantagens, configurao


Pg. 21 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Um snapshot uma cpia dos dados de um recordset em um dado instante. Ele muito semelhante a um dynaset pois pode ser criado a partir das tabelas bsicas com as mesmas instrues.(SQL, QueryDef,...). A diferena principal que um snapshot no pode ser atualizado. Vantagens do uso de Snapshots Permitem reunir informaes de diversas tabelas. Permitem utilizar os mtodos de busca Find e o uso de filtros e ordem de classificao para mudar a viso dos dados. Para os snapshots, navegao pelos registros e a criao de recordsets pode ser mais rpida do que nos dynasets. Desvantagens do uso de Snapshots Um snapshot no pode ser atualizado. Um snapshot no admite a criao de ndices.

Configurao de um Snapshot Para utilizar um snapshot voc deve definir um objeto recordset (Dim) e depois gerar o snapshot com o mtodo OpenRecordset. Para selecionar os registros voc pode usar uma instruo SQL. Veja exemplo abaixo:

Dim meubd as Database Dim meusnap as Recordset Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb") Set meusnap = meubd.OpenRecordset("SELECT * FROM Clientes", DbOpenSnapshot)

O cdigo praticamente idntico ao utilizado para a criao de um dynaset.

Mtodos de Movimentao: Movefirst, Movenext,...

Os mtodos de movimentao permitem a passagem de um registro para outro no interior dos recordsets, e alteram a posio do ponteiro do registro ao passar de um registro ativo para outro registro. Voc pode usar os mtodos de movimentao sobre quaisquer recordsets. Vejamos a seguir os mtodos de movimentao: MoveFirst: Movimenta o ponteiro do registro ativo para o primeiro registro do recordset aberto.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 22 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

MoveNext: Movimenta o ponteiro do registro ativo para o registro seguinte. Se no houver registro seguinte, voc est no ltimo registro, o flag de final de arquivo EOF ser ativado. MovePrevious: Desloca o ponteiro do registro ativo para o registro anterior no recordset aberto. Se no houver registro anterior, voc est no primeiro registro, o flag de incio de arquivo BOF ser ativado. MoveLast: Movimenta o ponteiro do registro ativo para o ltimo registro do recordset aberto. Move n Desloca o ponteiro de registro n registros para frente (n positivo) ou para trs (n negativo) a partir do registro ativo no recordset aberto. Se o deslocamento levar o ponteiro de registro alm dos limites do recordset ocorrer um erro.

Mtodos de Localizao: FindFirs, FindNext, ...

Utilizamos os mtodos de localizao para localizar registros que satisfaam a critrios determinados. Os mtodos de localizao somente podem ser utilizados em Dynasets e Snapshots. No possvel utiliz-los em objetos Tabela. Vejamos a seguir os mtodos de Localizao: FindFirst: A partir do incio do recordset, localiza o primeiro registro que atende aos critrios definidos. FindNext: A partir da posio atual no recordset, localiza o registro seguinte (prximo) que satisfaz aos critrios definidos. FindPrevious: A partir da posio atual no recordset, localiza o registro seguinte(anterior) que satisfaz aos critrios definidos. FindLast: A partir do incio do recordset, localiza o ltimo registro que satisfaz aos critrios definidos. Aps a executar o mtodo de localizao voc deve verificar o status da propriedade NOMATCH. Se Nomatch verdadeira o mtodo no encontrou o registro desejado, se Nomatch falsa o ponteiro do registro se posiciona no registro encontrado.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 23 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Como exemplo suponha que temos um banco de dados Controle, no diretrio Controle, que contm uma tabela Clientes, e que desejamos encontrar o cliente de nome Ana Maria Rosa nesta tabela. Veja o fragmento de cdigo abaixo:

Dim bd as Database Dim rs as Recordset Dim criterio as string Set bd = DBEngne.Workspaces(0).OpenDatabase("C:\Controle\Controle.mdb") Set rs = bd.OpenRecordset("Clientes",DbOpenDynaset) criterio="nome='Ana Maria Rosa'" rs.findfirst criterio if rs.nomatch msgbox "Cliente no localizado. " else msgbox rs.Fields("nome") & " localizado no arquivo. " endif

Uso do mtodo Seek.

O mtodo Seek somente pode ser utilizado com o recordset do tipo Table(Tabela), e, embora ele seja o mais rpido dos mtodos de localizao e posicionamento de registros apresenta as seguintes limitaes: S pode ser executado sobre uma tabela; no possvel us-lo com um dynaset ou snapshot. S pode ser usado com um ndice ativo, e os parmetros devem coincidir com os campos do ndice ativo. Um Seek s localiza o primeiro registro que satisfaz aos valores de ndices especificados. Para invocar o mtodo Seek necessrio fazer a chamada ao mtodo usando os operadores de comparao (<, <=, =, >=, >, <>), lembrando que os valores de chaves que esto sendo comparados devem ter o mesmo tipo de dados dos campos no ndice de controle. Veja exemplo a seguir:

Dim bd as Database Dim rs as Recordset

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 24 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Set bd = DBEngine.Workspaces(0).OpenDatabase "C:\Controle\Controle.mdb") Set rs = bd.OpenRecordset("Clientes",DbOpenTable) rs.index = "Nome" rs.seek "=", "Ana Maria Rosa" if rs.nomatch msgbox "Cliente no localizado. " else msgbox rs.Fields("nome") & " localizado no arquivo. " endif No cdigo acima definimos um recordset rs do tipo Tabela e a seguir definimos o ndice ativo rs.index = "Nome" e invocamos o mtodo Seek usando o operador = com nome a ser procurado. Obs: Note que: O ndice j deve ter sido criado, o operador deve estar entre aspas e que deve ser separado por vrgula do valor a ser localizado.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 25 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1.5.

DATA

CONTROL.

(DEFINIO,

PRINCIPAIS

MTODOS

EVENTOS

RELACIONADOS)
Que o Controle de dados.

O controle de dados foi criado para proporcionar um meio simples de acesso a um banco de dados. Para usar o controle de dados, siga os passos a seguir: Selecione o controle na caixa de ferramentas. Desenhe o controle em seu formulrio. Defina a propriedade DatabaseName Defina a propriedade Recordsource Defina a propriedade RecordsetType A essa altura voc criou os vnculos para o banco de dados e o Recordset com o qual deseja trabalhar. O controle assume para si as tarefas de: Abrir o banco de dados e as tabelas ou consultas associadas. Navegar pelos registros.(Utiliza mtodos MoveFirst,Movelast,Movenext e Moveprevious.) Carregar os valores diversos campos nos controles utilizados para exibir e editar os dados. Gravar os dados editados dos controles no Recordset

Funcionamento e utilizao.

Com base nas propriedades Name e RecordSource o controle de dados cria um Recordset que fornece acesso aos seus dados.

De incio selecione o objeto controle de dados na Toolbox do Visual Basic e acrescente-o ao seu formulrio.(Fig.1)

Fig-1

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 26 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Defina a seguir as propriedades Name - Nome do Controle (O padro data1) e Caption - Especifica o nome que aparece no controle de dados.(O padro Data1) e dimensione o controle de dados.(Fig.2)

Fig-2

A seguir acrescente ao seu formulrio um quadro de texto(TextBox) para cada campo que desejar acessar a partir do Recordsource, anexe cada quadro de texto ao objeto de controle de dados(DataSource) e especifique o campo que cada quadro de texto dever exibir(DataField).(fig3.)

Fig-3

Definio de Propriedades. Agora voc deve associar um banco de dados e um recordset a um controle de dados definindo as propriedades do controle. As propriedades necessrias a isso so : DatabaseName - Para bancos de dados do Access, representa o nome do arquivo do banco de dados, inclusive o nome completo do caminho. (Para banco de dados diferentes do Access necessrio informar o nome do caminho at o subdiretrio dos dados. Ex-Para padro Dbase : DatabaseName=c:\dir) RecordSource - Especifica as informaes que deseja obter no banco de dados - uma tabela, uma instruo SQL .

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 27 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

RecordsetType - Se deseja criar um 2-snapshot ou um acessar uma 0-table altere esta propriedade, pois o padro 1-dynaset. Connect - Necessria quando o banco de dados no for do Access. Ex - Para banco de dados padro Dbase - Connect=dBASEIII. possvel optar por ativar essas propriedades durante a execuo do seu aplicativo. Vejamos um exemplo: Voc acrescentou um controle dados a seu formulrio e definiu a propriedade Name como Data1, e quer ter acesso no arquivo TESTE.MDB (arquivo access) aos dados da tabela clientes, vejamos o cdigo abaixo:

data1.DatabaseName="C:\TESTE\TESTE.MDB" 'path/nome do arquivo data1.RecordSource="Clientes" data1.recordsetType=0 data1.Refresh Control Data: Vantagens/Limitaes. Vantagens Controle de Dados A principal vantagem do controle de dados a necessidade de menor trabalho de programao para desenvolver um aplicativo de aceso de dados. Voc no precisa fornecer cdigo de programa para abrir ou criar um banco de dados ou um recordset, para se movimentar pelos registros ou para editar registros. Vnculo direto com os dados. Voc no precisa invocar os mtodos Edit e Update para modificar os dados contidos no banco de dados. As alteraes aparecem no banco de dados to logo so digitadas. Os vrios controles vinculados(DbList, DbCombo, DbGrid, ...) oferecem um meio fcil de realizar tarefas que via cdigo seriam complexas. As limitaes do Controle de dados No apresentam funo para alterar ou excluir registros. mais difcil a implementao do processamento de transaes. Um nmero excessivo de controles vinculados em um formulrio torna a sua carga mais lenta. 'fonte dos dados(tabela clientes) 'tipo de recordset(0-tabela) 'implementa as alteraes

Adio, Alterao, incluso e validao de dados Para contornar a ausncia de funes para excluir e alterar registros podemos acrescentar as mesmas tela de entrada de dados usando comandos de programa atribudos a um boto de comando ou a eventos
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 28 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

do controle de dados. Vejamos um exemplo de cdigo que poderia ser atribudo a botes de comando de um formulrio de entrada de dados: 1-Boto para incluso de dados:

data1.Recordset.AddNew

2-Boto para excluso de dados:

data1.Recordset.Delete data1.Recordset.MoveLast Observe que no foi necessrio utilizar o comando Update, pois as atualizaes so feitas automaticamente pelo controle de dados quando do deslocamento para um novo registro ou ao fechar o formulrio atravs dos eventos Validate e Reposition. Validate Este evento ocorre sempre antes de um registro se tornar o registro corrente ou antes da execuo do mtodo Update ou antes da excluso de um registro ou do fechamento do recordset/formulrio; Voc pode associar a este evento o cdigo para validao de seus dados, como no exemplo abaixo:

Private Sub data1_Validate(Action As Integer, Save As Integer) If Save Then Select Case MsgBox("Salvar Alteraes ?", vbQuestion + vbYesNo) Case vbYes '6 If nome.Text = Empty Then MsgBox "Informe o nome do Cliente !",, "Gravar Clientes" nome.SetFocus Save = False Action = vbDataActionCancel Exit Sub ElseIf endereco.Text = Empty Then MsgBox "Informe endereo do cliente !",, "Gravar Clientes" endereco.SetFocus Save = False '-no salva Action = vbDataActionCancel '-cancela
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 29 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Exit Sub End If Case vbNo '7 Save = False End Select End If End Sub Outro evento que pode ser utilizado para validar dados o evento Reposition: Evento Reposition Ocorre sempre aps o controle posicionar o registro corrente e aps a carga do recordset pelo controle Data, neste momento o primeiro registro do recordset torna-se o registro corrente e o evento Reposition gerado.

Movendo-se em um recordset com o Controle Data

Quando voc move o registro corrente do recordset, atravs dos botes de comando disponveis, temos as seguintes aes sendo executadas:

Todos os controles vinculados informam ao Controle Data as alteraes ocorridas no seu contedo. Controle Data gera um evento Validate, indicando a ao tomada. Controle Data salva os dados no banco de dados, ou se for o caso gera um evento Error Controle se move para o registro solicitado e gera um evento Reposition informando a todos os controles vinculados os novos valores dos campos Consideraes finais. Voc pode utilizar o controle de dados sozinho no caso de aplicativos em que o usurio tenha acesso somente para leitura ou quando no existe a necessidade de incluso/excluso de registros.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 30 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

O Controle de dados timo para prototipao de um aplicativo, pois voc pode desenvolver rapidamente os formulrios. Para um sistema multiusurio de uso intenso o controle de dados pode no ser uma boa escolha, pois pode aumentar a quantidade de conflitos de bloqueio de registros. Provavelmente a melhor soluo seja o uso combinado dos controle de dados e de cdigo de programa.

1.6. EVENTOS: UM NOVO ENFOQUE (EVENTOS: CONCEITOS, EXEMPLOS .)


Quem j utilizou como ferramenta de programao uma linguagem procedural como o Clipper dever se lembrar que o cdigo do programa era um fluxo contnuo onde havia chamadas a outros programas e onde o usurio deveria obedecer a uma ordem pr-determinada pela aplicao; como exemplo temos que em uma tela de entrada de dados para Nome do Cliente, Endereo, Cep e idade se o usurio quisesse entrar o nmero do Cep, deveria passar obrigatoriamente pelos campos anteriores. Os programas que rodam sob o windows no se comportam dessa maneira. Voc constri o seu cdigo em torno de eventos, e,eventos so determinados pela ao do usurio e podem ser : pressionar um boto, adicionar, alterar, excluir um registro,selecionar uma opo, etc. Ento, os programas e funes so acionados por eventos que so reconhecidos pelos objetos do sistema que respondem aos eventos medida que eles forem ocorrendo, executando as rotinas programadas. Existem vrias categorias de eventos, entre elas podemos citar: 1-Eventos de Janela (Ao Abrir,Form_load,etc.) 2-Eventos de Dados (Ao Alterar,etc.) 3-Eventos de foco (Ao Receber Foco,Getfocus,etc.) 4-Eventos de teclado (Ao Pressionar Tecla,Keypress,etc.) 5-Eventos de mouse (Ao Clicar,Click,etc.) 6-Eventos de impresso (Ao Imprimir, etc.) 7-Eventos de erros (OnError) Vejamos alguns eventos: Evento Click Ocorre quando o usurio pressiona e libera um boto do mouse sobre um objeto. O evento Click tambm pode ocorrer quando a definio da propriedade Value de um controle alterada.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 31 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Normalmente, voc anexa uma macro ou procedimento de evento Click a um boto de comando para executar comandos ou aes compatveis. Evento Change Ocorre quando o contedo de uma caixa de texto ou poro de texto de uma caixa de combinao> alterado. Exemplos deste evento incluem o fornecimento de caracteres diretamente na caixa de texto ou caixa de combinao, ou a alterao da definio da propriedade Text de um controle usando-se uma macro ou o Access Basic. Durante a execuo de uma macro ou um evento de procedimento, quando ocorrer um evento Change, voc pode coordenar a exibio de dados entre os controles. Poder tambm exibir os dados em um formulrio de um controle, e os resultados em um outro controle. Evento Load Ocorre quando um formulrio aberto e os registros so exibidos. O evento Load pode ocorrer quando uma aplicao se inicia. Eventos Open, Close Open - para os formulrios, o evento Open ocorre quando um formulrio aberto, mas antes que o primeiro registro seja apresentado. Para os relatrios, o evento ocorre antes que um relatrio seja visualizado ou impresso. Close - ocorre quando um formulrio ou relatrio fechado e removido da tela. O evento Open ocorre antes do evento Load, que por sua vez disparado quando um formulrio aberto e seus registros exibidos. O evento Close ocorre depois do evento Unload, que disparado depois que o formulrio fechado, mas antes que ele seja removido da tela. Os formulrios, relatrios, botes de comando, caixa de listagem, caixa de verificao, boto de opo, grupo de opo e demais objetos possuem propriedades, mtodos e eventos associados que podemos utilizar para executar rotinas apropriadas ao contexto. Alm disso eventos podem disparar outros eventos.

1.7. O PODER DA SQL (A LINGUAGEM SQL : INTRODUO.)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 32 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

A linguagem SQL(Structured Query Language) uma linguagem de alto nvel para manipulao de dados dentro do modelo relacional. Seu objetivo fornecer uma interface de alto nvel ao usurio. uma linguagem no procedural, e,no cabe ao usurio definir como o gerenciador de banco de dados executar uma tarefa, mas somente o ele que deve fazer. Uma instruo SQL consiste em trs partes: As declaraes de parmetros A instruo manipulativa As declaraes de opes Para termos uma idia do seu poder, imagine que temos que atualizar o campo valor em 10% de uma tabela com diversos registros. Na abordagem procedural teramos os seguintes passos a seguir: Abrir a tabela. posicionar o ponteiro no incio da tabela. atualizar o campo valor em 10%. mover o ponteiro para o prximo registro. continuar a atualizao do campo valor at o final da tabela. O cdigo poderia ter o seguinte aspecto: Dim db as database Dim tabela as recordset set db=workspaces(0).Opendatabase("c:\base.mdb") set tabela=db.Openrecordset("tabela") Whilel not tabela.eof tabela.edit tabela.valor=tabela.valor*1.10 tabela .update tabela.movenext Wend tabela.close Agora utilizando uma instruo SQL teramos o seguinte trecho de cdigo: Dim db as Database Set db=Workspaces(0).Opendatabase("c:\base.mdb")

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 33 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

db.execute "UPDATE tabela SET valor=valor*1.10" db.close Observe a utilizao da instruo SQL UPDATE, bem mais simples, no ? Ento se voc no est utilizando a SQL, estar trabalhando muito e seu cdigo sofrendo as conseqncias. Vejamos na tabela abaixo um resumo das clusulas manipulativas e suas finalidades: Instruo SELECT UPDATE TRANSFORM Funo Obtm um grupo de registros e insere os registros em um dynaset ou em uma tabela Define os valores dos campos de uma tabela em uma atualizao Cria uma tabela de resumo, utilizando o contedo de um campo como cabealho de cada coluna Acrescenta um grupo de registros a uma tabela.

DELETE FROM Remove registros de uma tabela INSERT INTO

Vejamos alguns exemplos da instruo SELECT: 1) Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados. SELECT [Primeiro nome], [Sobrenome] FROM Empregados 2) Seleciona todos os campos da tabela Empregados. Note o uso parmetro (*) indicando todos os campos da tabela indicada. SELECT Empregados.* FROM Empregados 3) Conta o nmero de registros que tm uma entrada no campo "Cdigo postal" e coloca o ttulo Contagem no topo da coluna. SELECT Count([Cdigo postal]) AS Contagem FROM Clientes 4) Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Pereira. SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] = 'Pereira'

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 34 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

5) Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes comeam pela letra S. SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*'

FROM - Indica as tabelas utilizadas como fonte de dados WHERE- Especifica as condies que os registros devem satisfazer para compor o subconjunto de dados.

1.8.

USANDO

EDIT,

ADDNEW

UPDATE...(EDITANDO,

INCLUINDO

ATUALIZANDO...)
Ao utilizar o mtodo Edit o Jet copia o registro atual de um Recordset do tipo dynaset ou Tabela para o Buffer de Cpia para posterior edio. A Sintaxe usada a seguinte: recordset.Edit O recordset correspondente representa o nome do objeto Recordset atualizvel que contm o registro que voc quer editar. Observaes Logo que voc usa o mtodo Edit, as mudanas feitas nos campos do registro atual so copiadas no buffer de cpia. Depois que voc faz as mudanas desejadas no registro, use o mtodo de Atualizao Update para salvar as alteraes. Precauo - Se voc edita um registro e ento executa qualquer operao movendo-se para outro registro sem usar o mtodo Update primeiro, suas alteraes sero perdidas sem aviso. - Alm disso, se voc fecha o recordset ou termina o procedimento que declara o recordset ou o objeto de Banco de dados relacionado, seu registro editado descartado sem aviso algum.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 35 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Quando a propriedade LockEdits do Recordset for Verdadeira(bloqueio pessimista) em um ambiente de multiusurio, o registro permanece bloqueado desde o momento de utilizao do mtodo Edit at que a atualizao for completada. Se a propriedade LockEdits for Falsa (bloqueio otimista), o registro bloqueado e comparado com o registro pre-editado logo antes de sua atualizao no banco de dados. Se o registro mudou desde que voc usou o mtodo Edit, a operao de Atualizao falha gerando o erro(3197). Nota O bloqueio Otimista sempre usado em formatos de banco de dados externos, como ODBC e installable ISAM.(Dbase,Fox,...) O registro atual permanece atual depois que voc usou o Edit. Para usar o Edit, deve haver um registro atual. Se no h nenhum registro atual ou se o recordset no se refere a um Recordset do tipo dynaset ou tipo Tabela um erro acontece. Ao Usar o mtodo Edit o Jet gera um erro nas seguintes condies:

No h nenhum registro atual. O banco de dados ou recordset somente de leitura. Nenhum campo no registro atualizvel. O banco de dados ou recordset foram abertos para uso exclusivo por outro usurio. Outro usurio bloqueou a pgina que contm seu registro.

Precauo Se voc usa qualquer mtodo de edio da DAO (AddNew, Edit, Delete, ou Update) dentro de um loop que editar mais de um registro, o Jet Engine verso 3.0 pode tratar o loop inteiro como uma transao implcita.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 36 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Significa que voc necessariamente no poder garantir que cada atualizao seja escrita imediatamente no banco de dados. Isto pode afetar o tratamento de erros, bloqueio de pginas, e a visibilidade imediata das mudanas para outros usurios. Para garantir que as alteraes sejam escritas imediatamente no banco de dados, inclua cada bloco - Edit. . . Update - dentro de uma transao explcita. Para mais informao sobre transaes, veja o BeginTrans, CommitTrans, Rollback.

1.9. VISUAL BASIC - DATAS E O ANO 2000.(COMO O VB INTERPRETA O ANO COM DOIS DGITOS.(DD/MM/YY)
"Time is on my side...", este um refro de uma msica tocada pelos Rolling Stones, que significa mais o menos o seguinte "O tempo esta do meu lado". O que significa isto? algum pode pensar ao ler estas linhas. Calma, isto apenas uma chamada para alertar que os desenvolvedores de aplicaes no podem cantar o refro sem pensar que na verdade "Time is against me...", i.e, o tempo est contra mim. Sabe porque ? Por que nos aproximamos do sculo XXI e o "Bug do Milnio" est cada vez mais perto. Vamos procurar entender a razo do problema e de como trat-lo para evitar frustraes futuras. Iremos nos ater apenas aos seguintes aplicativos da Microsoft utilizados em aplicaes desktop: Visual Basic e Access. Um Pouco de histria Para todas as verses do Visual Basic ate a verso 3.0, datas informadas com dois dgitos (dd/mm/yy), so consideradas como pertencentes ao sculo XX, i.e, 1900.

12/01/09 -----> 12/01/1909 01/01/00 -----> 01/01/1900


Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 37 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

30/02/40 -----> 30/02/1940.

O cdigo que implementa este tratamento est, neste caso, embutido no run-time de cada verso, e no depende da verso do sistema operacional utilizado nem do formato da data usada. Com o surgimento da Automao OLE e do VBA (Visual Basic for Applications) o cdigo responsvel pela converso dos dois dgitos usados em datas (dd/mm/yy) para quatro dgitos (dd/mm/yyyy) passou a ser responsabilidade das livrarias de AUTOMAO OLE. Ento a VBA no mais implementa este cdigo, apenas chama a livraria responsvel pela converso. A partir da verso 4.0 do Visual Basic foi definida um novo comportamento para as datas informadas com dois digitos no ano (dd/mm/yy). Elas so convertidas para o sculo utilizado na data do sistema. Assim se a data do sistema o presente sculo (1900) 01/01/00 ser interpretada como 01/01/1900, porm se a data do sistema for o sculo XXI (2000), a data ser interpretada como 01/01/2000. Esta regra foi implementada na livraria de Automao OLE usada pelo Visual Basic 4.0 e pelo VBA. Acontece que a Microsoft alterou a interpretao dada aos dois digitos para o ano a partir da verso 2.20.4049 da biblioteca OLEAUT32.DLL. Para as aplicaes que usam esta biblioteca datas com dois dgitos para o ano cujo dgitos sejam de 00 a 29, so interpretadas como sendo do sculo XXI e as demais como sendo do sculo XX.

12/01/09 -----> 12/01/2009 01/01/29 -----> 01/01/2029 30/02/40 -----> 30/02/1940. 30/02/72 -----> 30/02/1972.

Tentando Arrumar a Casa. Meu Deus, que confuso !!!. Vamos tentar por as coisas nos seus lugares.

Aplicativo Aplicaes de 16 bits: Access 2.0, VB 3.0 VB 4.0 16 bits

Regra Todos os anos com dois dgitos so automaticamente considerados como do sculo 20 Todos os anos com dois dgitos so do sculo corrente
Pg. 38 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

(definido pelo relgio do sistema). Access 95 (com a nova biblioteca), VB 4.0 Todos os anos com dois dgitos entre 00 e 29 so do 32 bits, VB5, Access 97 sculo XXI e os demais do sculo XX

J deu para perceber que importante saber com qual verso de biblioteca OLEAUT32.DLL seu sistema esta trabalhando. Para isso faa o seguinte:

1-abra o Explorer e no diretrio System; 2-localize o arquivo OLEAUT32.DLL; 3-Clique com o boto direito do mouse sobre o arquivo; 4-Selecione propriedades; 5-Selecione a ficha Verso e clique em Verso do Produto; 6-Se o nmero da verso for igual ou superior a 2.20.4049 a nova regra esta sendo usada.

Criando a sua prpria interpretao. Voc pode querer implementar as suas prprias regras, como por exemplo: - datas com dois dgitos no ano entre 00 e 49 sero interpretadas como do sculo XXI (2000 e 2049), - e datas entre 50 e 99 como do sculo XX.(1950 e 1999). Para isto basta criar uma procedure com o seguinte cdigo:

Private Sub cmdConvertDate_Click() Dim strYear As String Dim intSlash As Integer If IsDate(txtDate) or txtDate = "2/29/00" Then 'procura primeiro separador intSlash = InStr(txtDate, "/") If intSlash > 0 Then 'procura segundo separador intSlash = InStr(intSlash + 1, txtDate, "/") If intSlash > 0 Then 'Extrai ano da data strYear = Mid(txtDate, intSlash + 1) If Len(strYear) = 2 Then If CInt(strYear) < 50 Then ' Menor que 50: ano = 20XX. strYear = "20" & strYear
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 39 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Else ' Maior que 50: ano = 19XX. strYear = "19" & strYear End If End If MsgBox "Data Informada: " & txtDate MsgBox "ANO (Sua Regra): " & strYear MsgBox "ANO (Regra do VB): " & Year(txtDate) Else MsgBox "Data no formato no esperado!" End If Else MsgBox "Data no formato no esperado!" End If Else MsgBox "Data invlida !" End If ' Limpando a data no texto txtDate.Text = Left(txtDate.Text, intSlash) & strYear End Sub Bem, espero no ter criado mais confuso com as datas. (Referncia: Article ID:Q162718 - Microsoft )

1.10. SQL : CRIANDO CONSULTAS PARAMETRIZADAS NO VISUAL BASIC.


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

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 40 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Cada consulta armazenada 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 db as Database Dim dyn as Recordset set db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") set 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 =
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 41 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

pSerie " sql=sql & " ORDER BY nome " set qd=db.CreateQueryDef("Lista_alunos", Sql ) qd.Parameters("pSerie")= "1" set dyn= qd.OpenRecordset() 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. Assim para deletar 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.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 42 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2) TRABALHANDO COM SQL (Conceitos Bsicos ) 2.1 Iniciando com a SQL.


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 suportam a SQL. Infelizmente ainda no existe uma padronizao a nvel 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 a 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 principais 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:
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 43 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

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. DROP - Remove tabelas e ndices de um banco de dados.
Pg. 44 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao 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.

2.2 Criando tabelas via SQL.


Vamos criar via SQL as tabelas utilizadas no primeira seo de Desvendando o Crystal Reports (ver tem 7 geral) S para lembrar a estrutura das tabelas dada a seguir: TblAlunos codaluno nome endereco telefone nascimento nomepai nomemae observacao Periodo serie numero codcurso nomecurso codprofessor codaluno codcurso nota ano bimestre Observacao codprofessor nome endereco telefone TblCursos TblNotas TblProfessor

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:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 45 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

figura 1.0

A tabela tblprofessor pode ser definida como a seguir (Access SQL) : CREATE TABLE tblprofessor INTEGER CONSTRAINT primarykey PRIMARY KEY,

(codprofessor

nome TEXT (50), endereco TEXT (50), telefone TEXT (15) ); 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:

Tipos de Dados SQL BIT BYTE COUNTER CURRENCY DATETIME SINGLE DOUBLE

Tipos de dados do JET YES/NO NUMERIC - BYTE COUNTER - Contador CURRENCY - Moeda DATE/TIME NUMERIC - SINGLE NUMERIC - DOUBLE
Pg. 46 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

SHORT LONG LONGTEXT LONGBINARY TEXT

NUMERIC - INTEGER NUMERIC - LONG MEMO OLE OBJECTS TEXT

A tabela TblCursos ser criada pela instruo: CREATE TABLE tblcursos (codcurso INTEGER CONSTRAINT 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 ) primarykey PRIMARY KEY,

2.3 ndices e Tabelas - Criar, Alterar e Excluir.


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

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
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 47 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos:

ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50) 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. 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)

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

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 48 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2.4 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(Veja artigo), 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) Eu o aconselho 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.

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. 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:
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 49 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

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 db as Database Dim dyn as Recordset set db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") set 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() Mtodos de QueryDef

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 50 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

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. Assim para deletar 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.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 51 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3) TRABALHANDO COM REDES ( Conceitos Bsicos )

3.1 Introduo
Mesmo que voc no desenvolva sistemas para um ambiente de rede, precisa saber alguns conceitos relativos ao assunto. Naturalmente o Visual Basic fornece acesso compartilhado ao banco de dados do sistema e vrios usurios podero acessar os dados ao mesmo tempo; o VB faz obloqueio e o desbloqueio das pginas dos dados quando necessrio, automaticamente. Se voc quiser que os dados de sua aplicao sejam acessados por um nico usurio,este o modo exclusivo, ter que informar isto ao VB. Para abrir um arquivo de dados no VB usamos o mtodo OpenDatabase, vejamos ento sua sintaxe:
Set database = workspace.OpenDatabase(dbname[, exclusive[, read-only[, source]]]

Observe o argumento opcional exclusive, ele pode assumir dois valores: - True - Abre o arquivo no modo exclusivo, ou seja, no compartilhado. - False - Abre o arquivo no modo compartilhado. Se voc omitir este argumento o arquivo aberto no modo compartilhado. O argumento read-only tambm pode assumir dois valores: - True - Abre o arquivo no modo read-only, isto , somente leitura. - False - Abre o arquivo no modo read/write, isto , leitura e escrita. Se voce omitir este argumento o arquivo aberto no modo leitura e escrita. Portanto se voc usa a seguinte sintaxe para abrir um banco de dados do seu sistema: dim db as databaseset db = dbengine.workspaces(0).OpenDatabase(app.path & "\nome_arquivo") O seu arquivo estar sendo aberto no modo compartilhado. At aqui tudo bem !

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 52 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3.2 Acesso aos Dados


O limite mais restritivo que podemos impor a um banco de dados sua abertura em modo exclusivo. Isto impedir que qualquer usurio tenha acesso ao banco de dados enquanto ele estiver sendo utilizado.(Isto inclui todas as suas tabelas e consultas.) Vejamos a sintaxe utilizada para este caso: dim db as databaseset db = dbengine.workspaces(0).OpenDatabase(app.path & "\nome_arquivo", True) A tentativa de abrir o arquivo em uso ir gerar uma mensagem de erro pelo VB. Quer algumas boas razes para usar o acesso exclusivo ? Use-o em operaes que afetem todo o banco de dados tais como: - Compactao do banco de dados - Atualizao de tabelas inteiras-Alterao da estrutura do banco de dados(incluso de tabelas, ndices, etc...) Se voc no quiser ser to radical, pode restringir o acesso tabela em uso pelo seu sistema. Para fazer isto utilizamos as opes do mtodo OpenRecordSet para negar acesso de leitura e/ou gravao s tabelas, vamos a sua sintaxe: Set variable = database.OpenRecordset(source[, type[, options]]) Vejamos as opes mais usadas: dbDenyRead Impede os usurios de examinar os dados contidos na tabela, at voc fech-la. (Disponvel para recordsets do tipo tabela) Voc usuar esta opo quando for necessrio atualizar informaes na tabela inteira. Ex: Dim db as database,rs as recordset Set rs=db.openrecordset ("nome_tabela", DbOpenTable, dbDenyRead)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 53 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

dbDenyWrite

Os usurios podem visualizar os dados mas no podem atualizar as informaes da tabela, nem incluir novos registros, at voc fechla.(Vlido para Tabelas, Dynasets e Snapshot) Voc pode usar esta opo quando estiver incluindo novos registros na tabela e no houvesse modificaes nos registros existentes. Ex: Dim db as database,rs as recordset Set rs=db.openrecordset( "nome_tabela", DbOpenTable, dbDenyWrite)

dbReadOnly

Permite somente visualizar os dados da tabela. Ex: Dim db as database,rs as recordset set rs=db.openrecordset ("nome_tabela", DbOpenTable, dbReadOnly) Voc pode usar esta opo em tabelas de pesquisa. Uma outra maneira de restringir o acesso a apenas leitura, utilizar Snapshots.Eles sempre so de somente leitura. A vantagem dos Snapshots que eles ficam armazenados na memria. Ex: Dim db as database,rs as recordset set rs=db.openrecordset ("nome_tabela", DbOpenSnapshot)

dbAppendOnly

Permite somente a incluso de novos registros(Vlido somente para dynaset) Ex: Dim db as database,rs as recordset set rs=db.openrecordset("nome_tabela", dbAppendOnly) DbOpenDynaset,

Se voc tentar abrir qualquer tabela com as restrices acima mencionadas e um outro usurio j estiver com ela aberta ocorrer uma mensagem de erro.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 54 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Dai conclui-se que o cdigo de tratamento de erros dever ser utilizado em todos os lugares onde o mtodo OpenRecordset for utilizado, pois neste caso o mtodo falhar e voc tem que estar preparado para interceptar o erro gerado. Que tal provarmos tudo isso ? Ento vamos l... Veja na seo REDES os sequintes exemplos: - Acesso Exclusivo/Compartilhado. - Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly

3.3 Bloqueio de Registros

Se sua aplicao for rodar em um ambiente multiusurio mais cedo ou mais tarde algum tentar atualizar um registro que est bloqueado por outro usurio ou outro usurio tentar modificar um registro que voc esta atualizando. E ai...? Antes de fazer um pedido para editar um registro j existente ou incluir um novo registro, o Jet ir verificar se nenhum outro usurio esta tentando modificar o registro ou acrescentando um registro novo, para isso o Jet utiliza a tcnica debloqueio de registros. Mas ateno, o jet no aceita o bloqueio de registros, na verdade o que ocorre o bloqueio da pgina ou pginas contendo o registro. Como uma pgina contm 2K (2048 bytes), o bloqueio ser efetuado no somente no registro desejado mas tambm nos adjacentes, a no ser que o registro tenha exatamente otamanho de 2048 bytes. O jet trabalha ento com dois mtodos de bloqueios : o pessimista e o otimista. Vejamos cada um deles: 1-Bloqueio pessimista(O padro usado pelo VB) Executa o bloqueio da pgina que contm o registro no momento que sua aplicao executar o mtodo Edit O registro permanecer bloqueado at ser executado o mtodo Update e os dados forem gravados no arquivo. Perceba que enquanto voc estiver editando o registro outros usurios no podero alter-lo. Se algum tentar bloquear a pgina que contm o registro o Jet retornra um erro.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 55 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

A desvantagem do bloqueio pessimista que se voc bloquear o registro para edio por um perodo longo, ningum mais conseguiria editar o mesmo registro e os outros registros da mesma pgina alm de afetar o desempenho do sistema.

2-Bloqueio otimista Executa o bloqueio da pgina contendo um determinado registro somente quando for invocado o mtodo Update. O bloqueio imediatamente liberado quando se completa a operao de atualizao. A vantagem que a pgina bloqueada por um curto perodo de tempo. A desvantagem a possibilidade de outro usurio alterar os dados contidos no registro entre os instantes em que so empregados os mtodos Edit e Update, se isto ocorrer o Jet retorna um erro. Com isto em mente voc deve levar em conta algumas consideraes ao utilizar o bloqueiode registros. Vejamos: 1- O que fazer caso no seja possvel bloquear um registro. 2-Como evitar que o usurio mantenha um registro bloqueado por muito tempo. 3-Determinar qual tipo de bloqueio usar: pessimista ou otimista No primeiro caso temos os conflitos de bloqueio, ou seja, se um usurio bloqueou um registro e outro usurio requisitou um bloqueio no mesmo registro ocorr um erro. Como o VB no fornece uma maneira de verificar se um registro est bloqueado, voc tem que estar preparado para os erros de bloqueio implementando um cdigo de tratamento de erros em todos os lugares onde ir acrescentar ou atualizar os registros. Dentre os inmeros erros que o Jet retorna em ambiente multiusurio existem 3 queso muito importantes e deles voc deve se proteger, vejamos : Erro 3167 O registro foi deletado Lembre-se que as modificaes(alteraes,excluses,etc..) feitas em um registro somente sero refetidas em um dynaset quando o VB reler a pgina que contm o registro. Neste caso o erro ocorre quando voc tentar executar o mtodo Edit em um registro que j foi deletado por outro usurio desde a ltima vez que voc leu a pgina.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 56 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Erro 3197

Os dados foram modificados; a operao foi interrompida. Ocorre quando voc tenta editar um registro que sofreu modificaes por outro usurio desde a ultima vez que voc leu a pgina

Erro 3260

Impossvel atualizar; atualmente bloqueado pelo usurio x na mquina y. Ocorre quando voc tenta bloquear uma pgina que j est bloqueada por outro usurio.

Quanto ao mtodo de bloqueio a utilizar, na maior parte dos aplicativos de bancode dados, o bloqueio otimista a melhor opo, mas existiro situaes em que voc dever usar o bloqueio pessimista. Para estabelecer o mtodo de bloqueio de registro, defina a propriedade LockEdits da tabela ou do dynaset com que est trabalhando. Assim: 1-Produzir bloqueio Pessimista - LockEdits = True Dim rs as Recordset rs.LockEdits = True 2-Produzir bloqueio Otimista - LockEdits = False Dim rs as Recordset rs.LockEdits = False Como dissemos a liberao do bloqueio automtica, mas em aplicativos com intensa entrada de dados voc pode precisar fazer pausas momentneas no processamento do aplicativo para permitir ao Jet realizar o seu trabalho de manuteno; para isto utilizar o mtodo Idle, da seguinte forma: DbEngine.Idle dbFreeLocks

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 57 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

4 ) CONTROL DATA ( Projeto Comentado )


Projeto inteiramente comentado utilizando os controles vinculados, seus mtodos, eventos e propriedades. Aprenda a Criar Tabelas, ndices, Chaves Primrias, Incluir, Alterar, Excluir, Validar e Localizar registros. Construa uma aplicao com poucas linhas de cdigo. Consideraes sobre o uso do Data Control e comparao com a DAO e SQL. 4.1 Acesso a Base de Dados - Data Control Voc quer implantar um cadastro de Clientes em sua empresa, e, deseja armazenar as seguintes informaes: Codigo, Nome, Endereo, Cidade, Cep, UF e Telefone para cada cliente. Feita a anlise voc chegou as seguintes concluses: A informao cdigo do cliente deve ser nica para cada cliente, ou seja, no poder haver duplicidade no cdigo quando da importao dos dados. As informaes referentes a cdigo, nome, endereo, cidade, cep e uf so obrigatrias. sistema deve permitir incluir, excluir e localizar dados nos arquivos. sistema ser desenvolvido em Visual Basic e usar o Controle de dados Vinculados para gerenciar as informaes Podemos agora dividir o projeto em trs fases distintas : 1) Definio do banco de dados e tabelas.

Definindo banco de dados, tabelas, campos e registros. S para lembrar, voc quer implantar um cadastro de Clientes em sua empresa e deseja armazenar as informaes: Codigo, Nome, Endereo, cidade, cep, UF e Telefone para cada cliente. Ento... Podemos dizer que cada uma dessas informaes sero os campos de seu arquivo de dados e, juntos, para cada cliente, iro compor o que chamamos de um registro de seu arquivo. Logo voc ter um arquivo com 7 campos e tantos registros quantos forem os clientes que voce cadastrar. Voc deve armazenar o seu arquivo em um banco de dados, e dar um nome para ambos: para o arquivo e para o banco de dados.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 58 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Bem, vamos chamar o seu arquivo de tabela e dar a ela o nome de Clientes, e ao seu banco de dados dar o nome de Controle. Teremos ento um banco de dados chamado Controle que contm uma tabela chamada Clientes que conter as informaes de todos os clientes cadastrados. Obs: Os usurios do Clipper/Dbase, utilizam arquivos padro dbf, e podem ficar confusos com esse conceito de banco de dados, pois o que acabamos de chamar de tabelas o Clipper/Dbase chama de banco de dados. Nativamente o Visual Basic usa o mesmo tipo de banco de dados que o Microsoft Access, ou seja, os arquivos MDB, por isso voc pode criar o seu banco de dados usando tanto o Visual Basic como o Microsoft Access. 1-Crie o seu banco de dados utilizando o Data Manager ou use o Microsoft Access e grave-o com o nome de CONTROLE.MDB. 2-Crie uma tabela com o nome de Clientes com a seguinte estrutura: Nome do Campo CODIGO NOME ENDERECO CIDADE CEP UF TELEFONE Tipo de Dados LONG INTEGER(*) CARACTER CARACTER CARACTER CARACTER CARACTER CARACTER Tamanho 03 30 30 30 08 02 11

(*)Como cada cliente deve ter um cdigo nico garantindo assim a exata identificao do mesmo, defina o tipo de dados para o campo cdigo como LONG INTEGER, e ative o atributo Counter e a opo Required, dessa forma criamos um campo do tipo contador que o prprio sistema ir controlar a cada incluso/excluso. 3-Defina um ndice para o campo codigo ativando as seguintes opes: Unique, Primary index, Required. Isto assegura que teremos uma chave nica para cada cliente cadastrado e nos fornece um ndice que agiliza no processo de localizao das informaes.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 59 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2) Desenhar a interface da aplicao com o usurio

Desenhando a interface com o usurio A tela principal de nossa aplicao dever ter o seguinte aspecto:

figura 1.0

Podemos observar que no formulrio Clientes temos: 1) Sete etiquetas(labels) e sete caixas de texto (Textbox) 2) Um objeto controle de dados(Data Control) 3) Cinco botes de comandos (CommandButton)

Vamos montar o formulrio Clientes conforme descrito abaixo: 1) Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Clientes. 2) Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulrio Clientes Objeto Propriedade Configurao

---------------------------------------------------------------------------------------------------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 60 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Form

Name Caption

Clientes "Cadastro de Clientes" dtaCli "Total de clientes:" Access "C:\CONTROLE\CONTROLE.MDB"(*) 0-Table "Clientes" label1 "Cdigo" True label2 "Nome" True label3 "Endereo" True label4 "Cidade" True label5 "UF" True label6 "Cep" True label7 "Telefone" True

---------------------------------------------------------------------------------------------------------------Data Name Caption Connect Databasename RecordSetType RecordSource label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 61 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

TextBox

Name DataField DataSource

codigo "Codigo" dtaCli nome "Nome" dtaCli endereco "Endereco" dtaCli cidade "cidade" dtaCli uf "UF" dtaCli cep "Cep" dtaCli telefone "Telefone" dtaCli incluir "&Incluir" excluir "&Excluir" localizar "&Localizar" gravar
Pg. 62 de 269

---------------------------------------------------------------------------------------------------------------TextBox Name DataField DataSource TextBox Name DataField DataSource TextBox Name DataField DataSource TextBox Name DataField DataSource TextBox Name DataField DataSource TextBox Name DataField DataSource CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Caption CommandButton Name Caption

"&Gravar" sair "&Sair"

----------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------(*) O arquivo Controle.mdb deve estar no diretrio CONTROLE.

3) Implementar o cdigo da aplicao

Cdigo Da Aplicao Objeto Controle de Dados(Data Control) Lembre-se que voc esta usando um banco de dados do Microsoft Access, ento: Para o objeto Data voce deve configurar as propriedades como abaixo: 1- A propriedade Connect deve estar como: Access. 2- A propriedade Name do controle deve ser: DtaCli. 3- O DatabaseName o nome do seu arquivo de banco de dados, no caso: Controle.mdb 4- O RecordSource poder ser uma tabela ou uma instruo SQL, no seu caso, a tabela Clientes do banco de dados Controle.mdb. 5- A propriedade RecordSetType deve ser definida como 0-Table. Por isso criamos o ndice com o campo cdigo, para utilizar com o mtodo Seek do Recordset Tabela. Se recordSetType fosse definido como 1-Dynaset> ou 2-Snapshot no poderiamos usar o mtodo Seek e sim o FindFirst, FindNext, FindLast, etc. Obs. Voc poderia ter incluido o cdigo no evento Load do seu formulrio configurando as propriedades discutidas acima da seguinte forma: Sub Form_load dtacli.Databasename="C:\Controle\Controle.mdb"
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 63 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

dtacli.Recordsource="Clientes" dtacli.RecordSetType= 0 End Sub

Caixas de Texto(TextBox) Agora para cada Textbox voce deve configurar as propriedades como segue: 1- A propriedade DataSource deve receber o nome do objeto Data: DtaCli 2- A propriedade DataField de cada TextBox deve ser vinculada ao respectivo campo da tabela Clientes. (Selecione na lista de campos). Feito isto o Controle de dados, DtaCli fornecer o vinculo entre o seu formulrio e o Banco de dados atravs da propriedade DataField das Caixas de Texto(TextBox) e tambm as ferramentas para a navegao atravs do banco de dados. Para movimentar-se pelos registros da tabela Clientes basta clicar nos botes do objeto DtaCli. Cdigo associado a cada boto de commando Dica: - A palavra Recordset pode representar um objeto e uma propriedade. Desta forma voc pode atribuir um Recordset a uma varivel objeto, da seguinte forma: Set meusdados = Data1.Recordset A seguir voc pode se referir ao seu Recordset usando a varivel objeto.(No esquea de defin-la previamente.) No exemplo a seguir no usaremos esta notao. Para inserir as linhas de cdigo basta clicar duas vezes no boto correspondente do seu formulrio. 1-Cdigo para boto incluir dados:

Private Sub Incluir_Click() dtacli.Recordset.AddNew 'insere informaes no buffer de cpia preparando


Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 64 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

para incluir um novo registro no recordset excluir.Enabled = False incluir.Enabled = False localizar.Enabled = False gravar.Enabled = True nome.SetFocus End Sub 'desabilita o boto excluir 'desabilita o boto incluir 'desabilita o boto localizar 'Habilita o boto gravar 'pe o foco na caixa de texto nome

sair.Caption = "&Cancelar" 'Muda o nome do boto Sair para Cancelar

Aps clicar no boto Incluir, voce pode digitar os dados referentes a cada cliente e a seguir clicar no boto Gravar para gravar as informaes na sua tabela Clientes ou cancelar o processo de incluso. 2-Cdigo do boto gravar dados:

Private Sub gravar_Click() If nome.Text = Empty Then MsgBox "Informe o nome do Cliente.", vbExclamation, "Gravar Clientes" nome.SetFocus Exit Sub End If If endereco.Text = Empty Then MsgBox "Informe o endereco do cliente.", vbExclamation,"Gravar Clientes" endereco.SetFocus Exit Sub End If If cidade.Text = Empty Then MsgBox "Informe a cidade do cliente.", vbExclamation,"Gravar Clientes" cidade.SetFocus Exit Sub End If If uf.Text = Empty Then MsgBox "Informe a UF do cliente.", vbExclamation, "Gravar Clientes" uf.SetFocus Exit Sub End If If cep.Text = Empty Then MsgBox "Informe o Cep do cliente.", vbExclamation, "Gravar Clientes" cep.SetFocus Exit Sub End If dtacli.UpdateRecord
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 65 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

dtacli.Recordset.Bookmark = dtactl.Recordset.LastModified sair(4).Caption = "&Sair" localizar.Enabled = True End Sub

Na rotina de gravao verificamos se os dados que so obrigatrios,no nosso caso s o telefone no , foram informados; ento nome, endereo, cidade, uf, cep no podem ser vazios(empty). Se qualquer deles no for informado exibida a mensagem respectiva(msgbox), o foco retorna ao campo para preenchimento(setfocus) e a rotina de gravao abandonada.(Exit Sub) Se todos os campos obrigatrios foram informados os sistema acrescenta fisicamente o registro na tabela, atravs do mtodo UpdateRecord.A utilizao deste mtodo, ao invs do mtodo Update,tem a vantagem de no disparar os eventos Validate e Reposition do data control A utilizao da propriedade BookMark do recordset apenas posiciona o ponteiro de registro no ultimo registro que sofreu modificaes. A seguir restauramos o nome do boto Sair e habilitamos o boto localizar. 3-Cdigo do boto Cancelar a incluso de dados:

Private Sub Sair_Click() If sair.Caption = "&Cancelar" Then dtacli.Recordset.CancelUpdate dtacli.Recordset.MoveLast incluir.Enabled = True excluir.Enabled = True localizar.Enabled = True sair.Caption = "&Sair" Else If MsgBox("Quer sair do sistema ?", vbYesNo,"Sair do Sistema") = vbYes Then End Else Exit Sub End If End If End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 66 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Neste cdigo verificamos se o nome do boto esta como Cancelar, em caso positivo, cancelamos qualquer atualizao pendente atravs do metdo CancelUpdate. Em seguida movemos o ponteiro de registros para o ltimo registro. Finalmente habilitamos os botes Incluir, Excluir e Localizar e mudamos o nome do boto para Sair. Agora, se o nome do boto no for Cancelar solicitamos a confirmao para sair do Sistema(End) ou abandonar a rotina(Exit Sub) e retornar ao sistema. 4-Cdigo para o boto Excluir dados:

Private Sub excluir_Click() If MsgBox("Confirma Excluso do cliente + vbYesNo, "Excluir Clientes") = vbYes Then dtacli.Recordset.Delete dtacli.Refresh End If End Sub -> " & dtactl.Recordset![codigo], vbQuestion

Na rotina de excluso, Solicitamos a confirmao da excluso,e, em caso afirmativo, usamos o mtodo delete, que remove o registro do recordset e estabelece um valor nulo para o ponteiro de registro. A seguir atualizamos o objeto data control (Refresh).

5-Cdigo para o boto Localizar dados:

Private Sub localizar_Click() Dim criterio As long Dim marcador As variant marcador = dtacli.Recordset.Bookmark dtacli.Recordset.Index = "codigo" 'recordset do tipo Table !!! criterio = InputBox$("Codigo do cliente a localizar: ", "Localizar Clientes") If criterio <> Empty Then dtacli.Recordset.Seek "=", criterio If dtacli.Recordset.NoMatch Then
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 67 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

MsgBox "Cliente no localizado ! ", vbExclamation, "Localizar Clientes" dtacli.Recordset.Bookmark = marcador End If Else dtacli.Recordset.Bookmark = marcador End If End Sub

Para a rotina de localizao definimos a posio atual do registro ativo usando a propriedade bookmark Definimos o ndice ativo (codigo que foi criando anteriormente Solicitamos o cdigo do cliente, armazenando o valor na varivel critrio. Se (If) criterio for diferente (<>) de vazio (empty), ento um valor foi fornecido e podemos iniciar a localizao usando o mtodo seek. Se no for informado nenhum valor para a varivel criterio retormamos o ponteiro de registro para a posio anterior ao inicio da localizao. Se o valor no for encontrado (Nomatch=True) o sistema emite uma mensagem (msgbox), informando ao usurio e posiciona o ponteiro de registro na posio anterior a busca. 6-Cdigo do evento Reposition:

Private Sub dtactl_Reposition() 'primeiro evento a ocorrer If dtacli.Recordset.RecordCount < > 0 Then incluir(0).Enabled = True excluir(1).Enabled = True dtacli.Caption = "Total de Clientes: " & dtactl.Recordset.RecordCount Else excluir(1).Enabled = False incluir(0).Enabled = True gravar(2).Enabled = False dtacli.Caption = "O arquivo esta vazio" End If End Sub O evento Reposition ocorre quando o Data control move-se de um registro para outro. No cdigo acima cada vez que o o evento Reposition disparado atualizamos a propriedade Caption do controle de dados atribuando a mesma o nmero total de registro do arquivo via propriedade RecordCount. Alm disso habilitamos os botes incluir e excluir se houver registros no arquivo e desabilitamos os botes excluir e gravar se o arquivo estiver vazio.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 68 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

7-Cdigo do evento Validate:


Private Sub dtactl_Validate(Action As Integer, Save As Integer) If Save Then Select Case MsgBox("Deseja Salvar Alteraes ?", vbQuestion + vbYesNo) Case vbYes '6 If nome.Text = Empty Then MsgBox "Nome do Cliente deve ser informado !",, "Gravar Clientes" nome.SetFocus Save = False 'nao salva os dados Action = vbDataActionCancel 'Cancela acao Exit Sub ElseIf endereco.Text = Empty Then MsgBox "Endereco do Cliente deve ser informado !",, "Gravar Clientes" endereco.SetFocus Save = False Action = vbDataActionCancel Exit Sub ElseIf cidade.Text = Empty Then MsgBox "Por favor, informe a cidade do Cliente !",, "Gravar Clientes" cidade.SetFocus Save = False Action = vbDataActionCancel Exit Sub ElseIf cep.Text = Empty Then MsgBox "Cep do Cliente deve ser informado !",, "Gravar Clientes" cep.SetFocus Save = False Action = vbDataActionCancel Exit Sub ElseIf uf.Text = Empty Then MsgBox "Por favor, informe a UF do Cliente !",, "Gravar Clientes" uf.SetFocus Save = False Action = vbDataActionCancel Exit Sub End If Case vbNo End Select End If End Sub
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 69 de 269

'7

Save = False

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

O evento Validate acionado quando o Data Control est para mover-se de um registro para um novo. Nesse meio tempo voc pode cancelar ou no as mudanas feitas no registro. A sub rotina do evento Validate possui dois argumentos: Action Descreve o evento que causou o evento Validate Save True Assume dois valores se qualquer dado for modificado

False se no houver modificao Utilizamos o evento para validar os dados, cancelar a ao(vbDataActionCancel) e mudar o valor de Save quando necessrio. 8-Cdigo para tratamento de erros

Private Sub dtactl_error(dataerr As Integer, response As Integer) 'trata erros quando nenhum cdigo esta sendo executado Select Case dataerr Case 3044 'caminho invalido MsgBox "O caminho informado no valido, verifique !" End 'uma maneira muito rude de interromper sua aplicacao, mas... Case 3024 'nao achou banco de dados MsgBox "O arquivo definido no foi encontrado !" End Case Else 'MsgBox "Erro em : " & Error$(dataerr) 'para mostrar o erro. 'ou vbdataErrdisplay response = vbDataErrcontinue End Select End Sub

A rotina acima utilizado para interceptar erros que ocorrem quando nenhum cdigo est sendo executado. Estes erros podem ocorrer quando a carga do formulrio ainda no estiver completa.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 70 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

5 ) D.A.O (Projeto comentado)


Data Access Objet - Utilize os objetos de acesso a dados para desenvolver aplicaes profissionais. Aprenda a criar Dynasets, Snapshots, Tables, incluir, alterar, excluir e a manipular os dados desses objetos via D.A.O. Projeto explicado passo a passo.

Estrutura da tabela.
Definicao da estrutura da tabela. Vamos definir uma tabela com o nome de fornecedores que estar armazenada no banco de dados Controle.mdb e que possuir a seguinte estrutura: --------------------------------------------------------nome do campo nome cgc endereco cep uf ddd fone ramal fax contato produto Tipo de Dados Caracter Caracter Caracter Caracter Caracter Caracter Caracter Caracter Caracter Caracter Caracter Tamanho do Campo 30 18 30 09 02 04 10 04 10 20 20 ---------------------------------------------------------

--------------------------------------------------------1-Os campos Nome, CGC e Endereo no podem ser Nulos, ou seja so de preenchimento obrigatrio. 2-Defina um ndice para o campo nome desativando as opes: Unique, Primary index. e ativando a opo Requerid

Interface com o usurio


Desenhando a interface com o usurio.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 71 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Temos abaixo (figura 1.0) a tela principal de nossa aplicao:

Fig-1 Para montar o formulrio acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Fornecedores. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulrio Fornecedores --------------------------------------------------------------------------Objeto Form Propriedade Name Caption TextBox Name Maxlength MaskedBox Name Mask PrompInclude PromptChar Configurao Fornecedores "Cadastro de Fornecedores" Nome 30 CGC ##.###.###/###-## False " "
Pg. 72 de 269

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

--------------------------------------------------------------------------TextBox Name Maxlength MaskedBox Name Mask PrompInclude PromptChar TextBox Name MaxLength TextBox Name MaxLength MaskedBox Name Mask PrompInclude PromptChar TextBox Name MaxLength MaskedBox Name Mask PrompInclude PromptChar TextBox Name MaxLength TextBox Name MaxLength Frame Caption Name CommandButton Name Endereco 30 Cep #####-### False " " UF 2 DDD 4 Fone ####-##-## False " " Ramal 4 Fax ####-##-## False " " Contato 20 Produto 20 "" Frame1 Inclui
Pg. 73 de 269

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption Frame Caption Name (*)CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption (**)Label Caption AutoSize

"&Inclui" Altera "&Altera" Exclui "&Exclui" Grava "&Grava" Cancela "&Cancela" "Telefone/Contato/Produto" Frame2 Command1(0) "|<" Command1(1) "<" Command1(2) ">" Command1(3) ">|" ** **

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

--------------------------------------------------------------------------(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um ndice identificador. (**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivo controle TextBox,MaskEdbox ou CommandButton.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 74 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Codigo da Aplicacao.
Codificando a sua aplicao. Para inserir as linhas de cdigo basta clicar duas vezes no controle correspondente do formulrio. 1-Cdigo da seo General Declarations do formulrio Private base As Database Private tabela As Recordset Private atualiza As Integer Define as variveis que sero visveis em todo o formulrio. 2-Cdigo do evento Load do formulrio. Private Sub Form_Load() Dim dbname As String On Error GoTo loaderror dbname = "\controle.mdb" Set base = DBEngine.Workspaces(0).OpenDatabase(app.path & dbname) Set tabela = base.OpenRecordset("fornecedores", dbOpenTable) If tabela.RecordCount > 0 Then mostra_reg Else MsgBox "O arquivo est vazio ... ", vbExclamation altera.Enabled = False exclui.Enabled = False grava.Enabled = False cancela.Enabled = False End If Exit Sub loaderror:
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 75 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

MsgBox Err.Description, vbCritical End End Sub

3-Cdigo associado aos botes de comando para movimentar os registros. Private Sub Command1_Click(Index As Integer) Const MOVE_FIRST = 0 Const MOVE_PREVIOUS = 1 Const MOVE_NEXT = 2 Const MOVE_LAST = 3 If (tabela.EditMode = dbEditAdd) Or _ (tabela.EditMode = dbEditInProgress) Then cancela_Click Exit Sub End If Select Case Index Case MOVE_FIRST tabela.MoveFirst Case MOVE_PREVIOUS tabela.MovePrevious If tabela.BOF Then tabela.MoveFirst Case MOVE_NEXT tabela.MoveNext If tabela.EOF Then tabela.MoveLast Case MOVE_LAST tabela.MoveLast End Select mostra_reg End Sub 4-Cdigo associado ao boto incluir dados. Private Sub inclui_Click() tabela.AddNew limpa_reg
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 76 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

inclui.Enabled = False altera.Enabled = False grava.Enabled = True cancela.Enabled = True exclui.Enabled = False nome.SetFocus End Sub 5-Cdigo associado ao boto excluir dados. Private Sub exclui_Click() If MsgBox("Confirma Exclusao ", vbYesNo, tabela![nome]) = vbYes Then tabela.Delete If Not tabela.EOF Then tabela.MoveNext ElseIf Not tabela.BOF Then tabela.MovePrevious End If mostra_reg End If End Sub 6-Cdigo associado ao boto Alterar dados. Private Sub altera_Click() tabela.Edit altera.Enabled = False grava.Enabled = True cancela.Enabled = True exclui.Enabled = False inclui.Enabled = False nome.SetFocus End Sub 7-Cdigo associado ao boto Gravar dados. Private Sub grava_Click() If (tabela.EditMode = dbEditAdd) Or _
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 77 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

(tabela.EditMode = dbEditInProgress) Then atualiza = True grava_reg If atualiza Then tabela.Update inclui.Enabled = True exclui.Enabled = True altera.Enabled = True grava.Enabled = True cancela.Enabled = True End If End If End Sub 8-Cdigo associado ao boto Cancelar. Private Sub cancela_Click() Dim marca As Variant marca = tabela.Bookmark If (tabela.EditMode = dbEditAdd) Or _ (tabela.EditMode = dbEditInProgress) Then tabela.CancelUpdate tabela.Bookmark = marca mostra_reg End If inclui.Enabled = True exclui.Enabled = True altera.Enabled = True grava.Enabled = True cancela.Enabled = True End Sub 9-Procedimento de evento para gravar os registros. Public Sub grava_reg() If nome = Empty Then MsgBox "O nome obrigatorio ! " nome.SetFocus
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 78 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

atualiza = False Exit Sub End If If cgc = Empty Then MsgBox "O CGC tambem obrigatorio ! " cgc.SetFocus atualiza = False Exit Sub End If If endereco = Empty Then MsgBox "O endereco obrigatorio " endereco.SetFocus atualiza = False Exit Sub End If tabela![nome] = nome tabela![cgc] = cgc tabela![endereco] = endereco tabela![cep] = IIf(IsNull(cep), "", cep) tabela![uf] = IIf(IsNull(uf), "", uf) tabela![ddd] = IIf(IsNull(ddd), "", ddd) tabela![fone] = IIf(IsNull(fone), "", fone) tabela![ramal] = IIf(IsNull(ramal), "", ramal) tabela![fax] = IIf(IsNull(fax), "", fax) tabela![contato] = IIf(IsNull(contato), "", contato) tabela![produto] = IIf(IsNull(produto), "", produto) End Sub Dica: Poderiamos usar a seguinte notao abaixo para diminuir o cdigo: Ao invs de -> tabela![cep] = IIf(IsNull(cep), "", cep) Fazemos ou -> tabela![cep] = "" & cep

-> tabela![valor_numrico] = 0 & [valor_numerico]

isto tambm evitaria a mensagem de erro para campos com Null.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 79 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

10-Procedimento de Evento para mostrar os registros. Public Sub mostra_reg() If Not IsNull(tabela![nome]) Then nome = tabela![nome] Else nome = "" End If If Not IsNull(tabela![cgc]) Then cgc = tabela![cgc] Else cgc = "" End If If Not IsNull(tabela![endereco]) Then endereco = tabela![endereco] Else endereco = "" End If If Not IsNull(tabela![cep]) Then cep = tabela![cep] Else cep = "" End If If Not IsNull(tabela![uf]) Then uf = tabela![uf] Else uf = "" End If If Not IsNull(tabela![ddd]) Then ddd = tabela![ddd] Else ddd = "" End If If Not IsNull(tabela![fone]) Then fone = tabela![fone] Else fone = "" End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 80 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

If Not IsNull(tabela![ramal]) Then ramal = tabela![ramal] Else ramal = "" End If If Not IsNull(tabela![fax]) Then fax = tabela![fax] Else fax = "" End If If Not IsNull(tabela![contato]) Then contato = tabela![contato] Else contato = "" End If If Not IsNull(tabela![produto]) Then produto = tabela![produto] Else produto = "" End If End Sub 11-Procedimento de Evento para limpar os controles . Public Sub limpa_reg() nome = "" cgc = "" endereco = "" cep = "" uf = "" ddd = "" fone = "" ramal = "" fax = "" contato = "" produto = "" End Sub
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 81 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Dica: Se tivessemos utilizado um 'control array' poderiamos ter usado um lao For/Next para diminuir o cdigo. Ex: for x=0 to 5 text1(x).text="" next Ou, de forma mais elegante, poderiamos criar uma rotina genrica:

Public Sub LimpaControles(tela as Form) Dim i as integer For i=0 to tela.controls-1 if TypeOf tela.Controls(i) is TextBox then tela.Controls(i).text="" endif Next End Sub

11-Rotina associada a caixa de texto vinculada ao campo Ramal . Private Sub ramal_KeyPress(KeyAscii As Integer) If KeyAscii < 48 Or KeyAscii > 57 Then KeyAscii = 0 End Sub 12-Rotina associada a caixa de texto vinculada ao campo UF . Private Sub uf_KeyPress(KeyAscii As Integer) KeyAscii = Asc(UCase(Chr(KeyAscii))) End Sub 13-Cdigo associado a opo localizar do menu . Private Sub mnulocaliza_Click() Dim marca As Variant Dim busca As String
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 82 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

marca = tabela.Bookmark tabela.Index = "nome" busca = InputBox("Informe o nome do fornecedor : ", "Localiza") If busca = Empty Then Exit Sub Else tabela.Seek "=", busca End If If Not tabela.NoMatch Then mostra_reg Else MsgBox "Fornecedor no localizado ", vbExclamation, "Localiza" tabela.Bookmark = marca End If End Sub 14-Cdigo associado a opo Sair do menu. Private Sub mnusair_Click() End End Sub 15-Funo para Validar o CGC. Podemos implementar nosso sistema com uma funo que valide o nmero do CGC do Cliente. A funco para validao pode ser colocada no evento Lostfocus do controle Maskedbox CGC chamando a funo Calculacgc e passando como parmetro o nmero do CGC digitado da seguinte forma:

Public Function ValidaCGC(CGC as string) as Boolean

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 83 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

if len(cgc) < > 14 then validacgc = False Exit function Endif if calculacgc(left(cgc,12)) <> mid(cgc,13,1) then validacgc=False Exit Function Endif if calculacgc(left(cgc,13)) <> mid(cgc,14,1) then validacgc=False Exit Function Endif validacgc=True End Function

A funo que faz o calculo do dgito verificador a seguinte: Public Function CalculaCGC(Numero as string) as string dim i as integer dim prod as integer dim mult as integer dim digito as integer if not isnumeric(numero) then calculacgc="" Exit funcion Endif mult=2 for i=len(numero) to 1 step - 1 prod=prod+ val(mid(numero),i,1)) * mult mult = iif(mult=9 , 2, mult+1)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 84 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

next digito= 11 - int(prod mod 11) digito= iif(digito=10 or digito=11 , 0 , digito) calculacgc=trim(str(digito)) End Function

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 85 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

6 ) SQL
Strutured Query Language - Otimize sua aplicao usando a SQL em seu cdigo e agilize o acesso a seus dados. Aprenda a manipular as principais instrues da linguagem SQL de uma forma prtica. Veja nesta aplicao como incluir, atualizar, excluir dados de suas tabelas usando a SQL. Deixa a SQL fazer todo o servio. Utilizando a SQL:

Estrutura da tabela.
Definicao da estrutura da tabela. Vamos definir uma tabela com o nome de agenda que estar armazenada no banco de dados Controle.mdb e que possuir a seguinte estrutura: --------------------------------------------------------nome do campo sobrenome nome telefone nascimento endereco cep uf e_mail pais obs foto Tipo de Dados Caracter Caracter Caracter date Caracter Caracter Caracter Caracter Caracter Caracter Caracter Tamanho do Campo 30 30 13 -30 10 02 80 20 100 50 ---------------------------------------------------------

--------------------------------------------------------1-Os campos Sobrenome, nome e nascimento obrigatrio. 2-Defina um ndice para o campo sobrenome desativando as opes: Unique, Primary index. e ativando a opo Requerid
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 86 de 269

no podem ser Nulos, ou seja so de preenchimento

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3-Voc deve criar e armazenar no banco de dados Controle.mdb as seguintes consultas SQL: (Para isso utilize o Microsoft Access ou o Data Manager) 1-Consulta Incluso : INSERT INTO agenda ( sobrenome, nome, telefone, nascimento, endereco, cep, uf, e_mail, pais, obs, foto ) SELECT parsobrenome AS Expr1, parnome AS Expr2, partelefone AS Expr3, parnascimento AS Expr4, parendereco AS Expr5, parcep AS Expr6, paruf AS Expr7, pare_mail AS Expr8, parpais AS Expr9, parobs AS Expr10, parfoto AS Expr11; 2-Consulta Atualizao: UPDATE Agenda SET = = = Agenda.sobrenome partelefone, parendereco, pare_mail, = parsobrenome, = Agenda.nome = Agenda.uf Agenda.obs = = = parnome, paruf, parobs,

Agenda.telefone Agenda.endereco Agenda.e_mail

Agenda.nascimento parcep, = parpais,

parnascimento,

Agenda.cep

Agenda.pais

Agenda.foto = parfoto WHERE ((Agenda.sobrenome=[parsobrenome])); 3-Consulta Excluso: DELETE * FROM agenda WHERE sobrenome=parsobrenome;

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 87 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Interface com o usurio


Desenhando a interface com o usurio. Temos abaixo (figura 1.0) a tela principal de nossa aplicao em tempo de projeto:

Observe o uso dos Controles:

-Image -CommomDialog -CrystalReport -ComboBox -Picture

(Figura 1.0)

Para montar o formulrio acima descrito observe os seguintes passos: 1-Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Agenda. 2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo:
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 88 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Tabela 1.0 - Objetos e propriedades do formulrio Agenda --------------------------------------------------------------------------Objeto Form Propriedade Name Caption TextBox Name Maxlength textBox Name Maxlength TextBox Name Maxlength TextBox TextBox Name Name MaxLength TextBox Name MaxLength ComboBox TextBox Name Name MaxLength ComboBox TextBox Name Name MaxLength TextBox Name Multiline Configurao Agenda "Agenda" Sobrenome 30 Nome 30 Telefone 15 Nascimento Endereco 30 Cep 10 cmbestados e_mail 80 cmbpaises foto 80 obs true ---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------

--------------------------------------------------------------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 89 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

CommandButton

Name Caption

Incluir "&Incluir" Alterar "&Alterar" Excluir "&Excluir" Imprime "Im&prime" Gravar "&Gravar" Cancelar "&Cancelar" CommonDialog1 CrystalReport1 Picture1 True azul Picture2 False azul Image1 True foto Inclui foto primeiro "|<"
Pg. 90 de 269

-------------------------------------------------------------------------CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton(#) Name Caption CommandButton(#) Name Caption CommonDialog CrystalReport Picture Name Name Name Visible BackColor Picture Name Visible BackColor Image Name Stretch CommandButton Name Caption CommandButton Name Caption

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-------------------------------------------------------------------------CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption (**)Label Caption AutoSize anterior "<" proximo ">" ultimo ">|" ** **

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

-------------------------------------------------------------------------(**) Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivo controle TextBox,MaskEdbox ou CommandButton. (#) Estes botes de comando so colocados no controle picture2 e os demais no controle picture1.

Codigo da Aplicacao
Codificando a sua aplicao. Para inserir as linhas de cdigo basta clicar duas vezes no controle correspondente do formulrio. 1-Cdigo da seo General Declarations do formulrio Option Explicit Public banco As Database Public area As Workspace Public tabela As Recordset Public consulta As QueryDef Public atualiza As Boolean Public alterar As Boolean Public fotos As String Public marca As Variant

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 91 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Define as variveis que sero visveis em todo o formulrio. 2-Cdigo do evento Load do formulrio. Private Sub Form_Load() Set area = DBEngine.Workspaces(0) Set banco = area.OpenDatabase("C:\vb16\CONTROLE.MDB") Set tabela = banco.OpenRecordset("Agenda", dbOpenTable) tabela.Index = "sobrenome" enche_combo cmbestados, "estados", "uf" enche_combo cmbpaises, "paises", "pais" If tabela.RecordCount = 0 Then MsgBox "O arquivo esta vazio ... vamos comecar a trabalhar..." Else tabela.MoveFirst End If mostra_reg End Sub 3-Cdigo da procedure para mostrar os registros. Public Sub mostra_reg() Dim nomefoto As String If Not IsNull(tabela![sobrenome]) Then sobrenome = tabela![sobrenome] Else sobrenome = "" End If If Not IsNull(tabela![nome]) Then nome = tabela![nome] Else nome = "" End If If Not IsNull(tabela![endereco]) Then
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 92 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

endereco = tabela![endereco] Else endereco = "" End If If Not IsNull(tabela![cep]) Then cep = tabela![cep] Else cep = "" End If If Not IsNull(tabela![uf]) Then cmbestados.Text = tabela![uf] Else cmbestados.Text = "" End If If Not IsNull(tabela![nascimento]) Then nascimento = tabela![nascimento] Else nascimento = "" End If If Not IsNull(tabela![telefone]) Then telefone = tabela![telefone] Else telefone = "" End If If Not IsNull(tabela![pais]) Then cmbpaises.Text = tabela![pais] Else cmbpaises.Text = "" End If If Not IsNull(tabela![e_mail]) Then e_mail = tabela![e_mail] Else e_mail = "" End If If Not IsNull(tabela![obs]) Then obs = tabela![obs] Else obs = ""
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 93 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End If If Not IsNull(tabela![foto]) Then nomefoto = Trim(tabela![foto]) Image1.Picture = LoadPicture(nomefoto) Else nomefoto = "" Image1.Picture = LoadPicture("") End If Label11.Caption = "Reg.: " & tabela.RecordCount End Sub 4-Cdigo da procedure para preencher as caixas de combinao. Private Sub enche_combo(combo As Control, data As String, campo As String) Dim arqtemp As Recordset combo.Clear Set arqtemp = banco.OpenRecordset(data, dbOpenSnapshot) Do Until arqtemp.EOF combo.AddItem arqtemp(campo) arqtemp.MoveNext Loop arqtemp.Close combo.ListIndex = 0 End Sub 5-Cdigo da procedure para limpar as caixas de texto. Sub limpa_reg(janela As Form) Dim i As Integer For i = 0 To janela.Controls.Count - 1 If TypeOf janela.Controls(i) Is TextBox Then janela.Controls(i).Text = "" End If Next i End Sub 6-Cdigo associado ao boto Incluir.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 94 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Private Sub inclui_Click() alterar = False marca = tabela.Bookmark limpa_reg frmagenda foto.Visible = True Picture1.Visible = False Picture2.Visible = True Image1.Picture = LoadPicture("") sobrenome.SetFocus End Sub 7-Cdigo associado ao boto Alterar. Private Sub altera_Click() alterar = True sobrenome.Enabled = False nome.SetFocus foto.Visible = True Picture2.Visible = True Picture1.Visible = False End Sub 8-Cdigo associado ao boto Excluir. Private Sub exclui_Click() If MsgBox("Confirma Exclusao ", vbYesNo, tabela![nome]) = vbYes Then tabela.Delete If Not tabela.EOF Then tabela.MoveNext ElseIf Not tabela.BOF Then tabela.MovePrevious End If mostra_reg End If End Sub 9-Cdigo associado ao boto Gravar.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 95 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Private Sub grava_Click() atualiza = True If alterar Then grava_reg 2 alterar = False sobrenome.Enabled = True Else grava_reg 1 End If If atualiza Then foto.Visible = False Picture1.Visible = True Picture2.Visible = False End If End Sub 10-Cdigo associado ao boto Cancelar. Private Sub cancela_Click() tabela.Bookmark = marca mostra_reg foto.Visible = False Picture1.Visible = True Picture2.Visible = False sobrenome.Enabled = True End Sub 11-Cdigo associado ao boto Imprime. Private Sub imprime_Click() CrystalReport1.Destination = 0 CrystalReport1.ReportFileName = "c:\vb16\agenda.rpt" CrystalReport1.Action = 1 End Sub 12-Cdigo associado ao boto Inclui Foto.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 96 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Private Sub foto_Click() Dim filter As String fotos = "" filter = "Arquivos BMP (*.BMP)|*.bmp|Todos os arqs.|*.*" CommonDialog1.filter = filter CommonDialog1.DefaultExt = "BMP" CommonDialog1.ShowOpen fotos = CommonDialog1.filename If Not fotos = Empty Then Image1.Picture = LoadPicture(fotos) Else Image1.Picture = LoadPicture("") End If End Sub 13-Cdigo associado ao boto primeiro(|<). Private Sub primeiro_Click() tabela.MoveFirst mostra_reg End Sub 14-Cdigo associado ao boto anterior(<). Private Sub anterior_click() tabela.MovePrevious If tabela.BOF Then tabela.MoveFirst End If mostra_reg End Sub 15-Cdigo associado ao boto proximo(>). Private Sub proximo_click() tabela.MoveNext If tabela.EOF Then tabela.MoveLast
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 97 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End If mostra_reg End Sub 16-Cdigo associado ao boto ultimo(>|). Private Sub ultimo_click() tabela.MoveLast mostra_reg End Sub 16-Cdigo da procedure para gravar os dados nos arquivos. Public Sub grava_reg(operacao As Integer) If sobrenome = Empty Then MsgBox "O sobrenome/Apelido obrigatorio ! " sobrenome.SetFocus atualiza = False Exit Sub End If If nome = Empty Then MsgBox "O nome tambem obrigatorio ! " nome.SetFocus atualiza = False Exit Sub End If If endereco = Empty Then MsgBox "O endereco obrigatorio " endereco.SetFocus atualiza = False Exit Sub End If If nascimento = Empty Then MsgBox "A data de nascimento obrigatria " nascimento.SetFocus atualiza = False Exit Sub End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 98 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

If operacao = 1 Then Set consulta = banco.QueryDefs("insagenda") Else Set consulta = banco.QueryDefs("upagenda") End If area.BeginTrans consulta("parsobrenome") = sobrenome consulta("parnome") = nome consulta("parendereco") = endereco consulta("parnascimento") = CDate(Format(nascimento, "d-m-yy")) consulta("parcep") = IIf(IsNull(cep), "", cep) consulta("paruf") = IIf(IsNull(cmbestados.Text), "", cmbestados.Text) consulta("parpais") = IIf(IsNull(cmbpaises.Text), "", cmbpaises.Text) consulta("partelefone") = IIf(IsNull(telefone), "", telefone) consulta("pare_mail") = IIf(IsNull(e_mail), "", e_mail) consulta("parobs") = IIf(IsNull(obs), "", obs) consulta("parfoto") = IIf(IsNull(fotos), "", fotos) consulta.Execute area.CommitTrans End Sub 17-Cdigo associado a opo sair do menu. Private Sub mnusair_Click() End End Sub 18-Cdigo associado ao evento pressionar tecla da caixa de texto e_mail. Private Sub e_mail_KeyPress(KeyAscii As Integer) KeyAscii = Asc(LCase(Chr(KeyAscii))) End Sub 19-Cdigo associado ao evento perder o foco da caixa de texto sobrenome. Private Sub sobrenome_LostFocus() 'If sobrenome = Empty Then ' Exit Sub
Pg. 99 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

'End If tabela.Seek "=", sobrenome If tabela.NoMatch Then Exit Sub End If mostra_reg foto.Visible = False Picture2.Visible = False Picture1.Visible = True End Sub 20-Cdigo associado ao evento perder o foco da caixa de texto nascimento. Private Sub nascimento_LostFocus() If Not IsDate(Format(nascimento, "dd-mm-yy")) Then MsgBox "Data invalida, formato deve ser dd-mm-yy - Ex: 02-07-78 " nascimento.SetFocus Else nascimento.Text = Format(nascimento, "dd-mm-yy") End If End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 100 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

7 ) CRYSTAL REPORTS ( Projeto Comentado )


Utilize o Crystal Reports para gerar seus relatrios e incorpor-los a sua aplicao. Veja como gerar relatrios utilizando os recursos do Crystal Reports.(controlar a ordem de impresso dos registros, trabalhar com variveis fornecidas pelos usurios, selecionar os registros para impresso.)

Introduo:Gerando os seus relatrios com o Crystal Reports.


O Crystal Reports o gerador de relatrios do Visual Basic e com ele desenhamosos relatrios de nossos aplicativos. Embora possua um objeto chamado Printer para imprimir dados, sua utilizao alm de complexa trabalhosa pois tudo deve ser codificado. Ao Contrrio, o Crystal Reports utiliza uma interface grfica apartir de onde podemos construir qualquer relatrio que necessitamos. Podemos iniciar o Crystal Reports atravs da opo Report Designer... do menuAdd-Ins ou pelo cone correspondente na pasta de trabalho do Visual Basic no Windows. Junto com o Visual Basic 5.0 distribuda a verso 4.6 do Crystal Reports.

Criando um novo relatrio.


Vamos gerar um relatrio baseado na tabela agenda que se encontra no banco de dados Controle . Nosso relatrio dever obedecer os seguintes parmetros: 1- Campos a serem impressos : sobrenome , endereo e a data de nascimento. 2- O relatrio dever ser ordenado pelo campo sobrenome. 3- Deveremos permitir inicialmente a visualizao do relatrio para posterior impresso. 4- O nome do relatrio ser agenda.rpt.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 101 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Selecionando a opo New do menu File teremos a tela da figura 1.0 abaixo:

Fig-1

Aps selecionar o boto Standard , devemos selecionar a base de dados na opo Data File , para o nosso caso Controle.mdb. A seguir temos um lista de todas as tabelas e consultas gravadas na base de dados - exclua todos os elementos da lista, exceto a tabela Agenda e clique no boto Next para prosseguir. Como nosso relatrio esta baseado somente na tabela Agenda, o prximo passo Links, pode ser dispensado, portanto clique novamente no boto Next. Vamos selecionar os campos da tabela que sero impressos no relatrio - selecione cada campo e clique no boto Add. Ao final devemos ter algo parecido com a figura 2.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 102 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-2

A esta altura o relatrio esta praticamente terminado, para visualiz-lo clique no boto Preview Report. mostrada a tela da figura 3.0 onde aps clicarmos na aba Design podemos notar cinco sees:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 103 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-3

1 - Title 2 - Page Header 3 - Details 4 - Page Footer 5 - Summary

- para o ttulo da aplicao. - contm os elementos do cabealho da pgina. - contm os campos de dados a serem impressos. - refere-se ao rodap da pgina. - impresso de resumos.

Agrupando e ordenando registros.


Para agrupar registros, ordenando-os por uma determinada coluna selecione a opo Group Section do menu Insert. Agrupando pelo campo sobrenomeem ordem ascendente veremos na tela a figura 4.0:

Fig-4

Inserindo ttulos e Legendas.


Vamos inserir um ttulo em nosso relatrio e uma legenda para o campo sobrenome, para isso selecione a opo Text Field... do menu Insert.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 104 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Na caixa de dilogo Enter Text digite o ttulo: Agenda Pessoal e clique no boto Accept. Ao lado do ponteiro do mouse acompanha um retngulo que voc dever posicionar no local desejado, ou seja, na seo Title. Para criar a legenda Nome para o campo sobrenome no cabealho de grupo, selecionte Text Field... novamente e digite Nome, clicando em Accept e posicionando a legenda mesmo local da legenda sobrenome.

Formatao de campos, campos especiais e desenho de linhas e caixas.


Para formatar campos basta selecionar o campo desejado e clicar na opo Format do menu ou clicando

com o boto direito do mouse sobre o campo teremos um menu pop-upcomo na figura 5.0 abaixo:
Fig-5

Pelo menu podemos acessar as opes pertinentes a um determinado campo do relatrio. Para o caso selecionamos o ttulo Agenda Pessoal , vamos alterar a fonte (Change Font...) para 14 e o estilo para negrito. Para alterar mais de um campo selecione-os mantendo a tecla Shift pressionada. Aproveitando vamos inserir um campo referente a data no canto superior esquerdo. Selecione a opo Special Field... do menu Insert escolha a opo Print Date e posicione no local indicado.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 105 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Clique com o boto direito do mouse sobre o campo nascimento e selecione a opoChange Format... escolhendo o formato DMY (dia-ms-ano) e clique OK. Finalmente vamos desenhar um retngulo ao redor do ttulo. Selecione a opoBox do Menu Insert , note que o ponteiro do mouse mudou para um lpis:Desenhe o retngulo ao redor do ttulo mantendo o boto esquerdo do mouse pressionado. Se quiser colorir o retngulo clique com o boto direito do mouse sobre o mesmoe preencha-o com uma cor de sua escolha. Atravs do menu Insert podemos desenhar linhas, retngulos, quadrados, alm de inserir figuras e at grficos em nossos relatrios. Podemos tambm usar os cones correspondentes da barra de ferramentas como na figura 6.0 abaixo:

Fig-6

Trabalhando com frmulas.


Vamos montar uma frmula para imprimir o nmero da pgina no rodap do relatrio. Para isso usamos o editor de frmulas do Crystal Reports que pode ser disparado atravs do cone ou da opo Formula Field... do menu Insert.Aps isso voc deve informar o nome da frmula no campo Formula Name para o nosso caso informe "pagina" e clique no boto OK. O Editor mostrado na figura 7.0 :

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 106 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-7

Agora basta digitar a frmula na caixa Formula Text, vamos l, digite: "Pgina: " + e, a seguir selecione a funo TrimLeft na lista Functions;, ainda na lista Functions, selecione a funo ToText e finalmente selecione o item PageNumber no final da lista Functions. Ao final deveremoster o seguinte na caixa Formula Text:
"Pgina: " + TrimLeft (ToText (PageNumber, 0 ) )

A funo PageNumber retorna um valor nmerico do nmero da pgina por isso usamosa funo ToText para convert-la em uma string , e a seguir usamos a funo TrimLeft para removermos os espaos a direita. Vamos verificar a frmula clicando no boto Check , se tudo estiver corretoo crystal informa com a mensagem No errors found indicando que a sintaxe est correta. Agora basta clicar no boto Accept e posicionar a frmula no canto esquerdo da seo Page Footer. Encerrado o relatrio basta salv-lo atravs da opo Save do menu File einformar o nome para o relatrio.(Nosso caso informa agenda).

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 107 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Devemos ressaltar que a linguagem de frmulas do Crystal Reports diferente do VisualBasic, assim por exemplo, se usarmos a propriedade SelectionFormula do Crystalque permite definir condies para a impresso em nosso relatrio de forma a imprimir somente os nomes iniciados pela letra "J" teramos algo como: CrystalReport1.SelectionFormula = "{AGENDA.NOME} >= " & "''" & "J" & "''" Note que a refrencia a campos da tabela feita entre chaves ({}).

Determinando o estilo e inserindo uma figura em seu relatrio.

Voc pode utilizar a guia Style para escolher a forma de apresentao do relatrio.
Fig-8

Para isto selecione um dos estilos na caixa de listagem style e veja direita o jeito do relatrio. Se quiser pode inserir uma figura no relatrio clicando no boto Add Picture...com o cone.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 108 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

A caixa de texto Title lhe permite inserir o ttulo para o relatrio.

Imprimindo o relatrio a partir de sua aplicao no Visual Basic.


Agora que nosso relatrio esta pronto vamos associ-lo a nossa aplicao de forma a poder imprim-lo a partir do Visual Basic. Para isso devemos ativar o componente do Crystal Reports para a nossa aplicao na opo Components.. do menu Project e a seguir selecionar o controle Crystal Reports e copi-lo para nosso formulrio. A seguir vamos definir algumas propriedades para o controle CrystalReport1 1 - CopiesToPrinter 2 - Destination 3 - ReportFileName 4 - WindowTitle 5 - SortFields - Determina o nmero de cpias do relatrio.Informe um (1) - Direciona a impresso: 0-na tela 1-na impressora 2-em arquivo. Informe zero (0). - Indica a localizao do relatrio (arquivo .RPT) a ser impresso. - Ttulo a janela Preview , informe Agenda . - Configura a ordem de classificao.(Ver abaixo.)

Finalmente crie um boto de comando no formulrio que ir disparar a impresso do relatrio com o nome de Imprime e a seguir associe o seguinte cdigo ao boto de comando: Private Sub imprime_Click() CrystalReport1.Destination = 0 CrystalReport1.ReportFileName = "c:\Controle\agenda.rpt" CrystalReport1.SortFields(0) = "+{Agenda.Sobrenome}" CrystalReport1.Action = 1 End Sub A propriedade Action definida para 1 dispara a impresso do relatrio.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 109 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Outra forma de ordenar os registros via cdigo utilizar a propriedade sortfields. Na propriedade Sortfields, "+{Agenda.Sobrenome}", indica que a ordem de impresso ser por campo sobrenome (Agenda.sobrenome) e em ordem ascendente (+).

Relatrio com dados de vrias tabelas e Seleo de registros


O Crystal Reports o gerador de relatrios que vem junto com o Visual Basic.Para uma introduo torica j com um exemplo prtico clique no link Crystal. Nesta seco iremos abordar exemplos prticos abordando as dvidas mais comuns dos iniciantes. Vamos l. Veremos como gerar um relatrio que contenha dados oriundos de diversas tabelas, e de como selecionar os registros que queremos imprimir. Estaremos usando a verso do Crystal Reports que acompanha o Visual Basic 5.0. Projeto Alunos - Relatrio - BOLETIM ESCOLAR Voc trabalha como programador em uma grande escola e recebeu a incumbncia de gerar o relatrio bimestral para os alunos do 2 grau com os seguintes dados: Cdigo do Aluno Nome do Aluno Data de Emisso do relatrio Periodo, Curso, Srie , Bimestre Nome da Matria Cursada Nota do bimestre para cada aluno/matria. S para lembrar voc possui somente o Visual Basic 5.0.E vai ter que usar o Crystal Reports para gerar o relatrio. Ah!, esqueci de avisar, o relatrio era para ontem... - Vamos supor que temos trs tabelas:
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 110 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Dados Disclipinas/Notas Cadastro dos alunos Cadastro de Disciplinas Cadastro Professores

- Tblnotas - TblAlunos - TblCursos - TblProfessor

A estrutura das tabelas dada a seguir: TblAlunos codaluno nome endereco telefone nascimento nomepai nomemae observacao Periodo serie numero Obs : Codaluno , Codcurso, CodProfessor so chaves primrias de suas respectivas tabelas. J deu para perceber que os dados dos seus relatrios no esto todos em uma nica tabela, e, voc vai ter que juntar os dados para obter o relatrio que dever ter o seguinte layout:
Nome Escola BOLETIM ESCOLAR Bimestre -----------------------------------------------------------------------Nome do Aluno Perodo Curso Nota | | | | cod. aluno Srie Nmero OBSERVAES data emisso pag. n

TblCursos

TblNotas

TblProfessor

codaluno codcurso nomecurso codprofessor codcurso nota ano bimestre Observacao codprofessor nome endereco telefone

------------------------------------------------------------------------Nome das disciplinas| . . . | | | --------------------|---------|------------------------------------------

-------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 111 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

No espao reservado para observaes devemos informar quando o aluno no atingiu a mdia mmina para aprovao, nota inferior a 5, e colocar a mensagem: "NOTA ABAIXO DA NOTA MNIMA - ALUNO EM RECUPERAO". Alm disso deveremos informar a mdia aritmtica das notas do aluno no bimestre. Bem, vamos ao trabalho, no VB ative o Crystal Reports atravs da opo Add Ins->Report Designer... ou crie um atalho na rea de trabalho para chamar o Crystal Reports. Selecionando a opo New do menu File teremos a tela da figura 1.0 abaixo:

Fig. 1.0

Aps clicar no boto Standard, devemos selecionar a base de dados na opo Data File, para o nosso caso criamos a base de dados chamada Escola.mdb. Como voc pode notar a tabela Tblprofessor no contm nenhum campo que iremos usar em nosso relatrio, portanto exclua-a da lista e a seguir clique no boto Next para prosseguir.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 112 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

A seguir temos um lista de todas as tabelas e consultas gravadas na base de dados que iremos utilizar (fig 2.0)

Fig. 2.0

No prximo passo, Links, que esta o segredo para que os dados das trs tabelas sejam incorporados ao nosso relatrio e mantenham a correspondencia entre os dados das mesmas: O Crystal reconhece os relacionamentos entre as tabelas automaticamente, mas possvel cri-los nesta etapa, bastando clicar sobre o campo de uma tabela e arrast-lo at o campo correspondente da outra tabela, apos feito isto uma linha unindo os dois campos indica que o relacionamento foi criado. Nesta etapa podemos tambm eliminar as associaes existentes bem como admitir novas bases de dados ao relatrio. Naturalmente uma relao vlida somente ser efetivada entre campos indexados (pelo menos um) e do mesmo tipo.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 113 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 3.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 114 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para verificar o relacionamento clique com o boto direito do mouse sobre uma das linhas e na opo options do menu suspenso.(fig 4.0)

Fig. 4.0

A caixa de dilogo Link Options surge mostrando os detalhes dos vnculos (fig 5.0)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 115 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 5.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 116 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Vamos selecionar os campos da tabela que sero impressos no relatrio - selecione cada campo e clique no boto Add. Os campos do nosso relatrio sero os seguintes: Nome do Campo Codaluno Nome periodo serie numero nomecurso nota Ano bimestre Tabela de Origem tblalunos tblalunos tblalunos tblalunos tblalunos tblcursos tblnotas tblnotas tblnotas

Ao final devemos ter algo parecido com a figura 6.0 abaixo:

Fig. 6.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 117 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

J podemos clicar no boto Preview para podermos visualizarmos nosso relatrio(fig. 7.0)
Fig. 7.0

Nada animador no mesmo? Mas iremos ajust-lo ao nosso lay-out.Clique na aba Design para podermos ajustar o lay-out do relatrio.(fig. 8.0)

Fig. 8.0

Primeiro iremos inserir um grupo em nosso relatrio, pois queremos agrupar os alunos por cdigo. Para isso clique no menu Insert opo Group Section. e selecione a opo tblalunos.codigo (fig. 9.0) e clique em OK.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 118 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 9.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 119 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Se voc fez tudo certo obter algo parecido com a figura 10 abaixo:
Fig. 10

Agora e s ajustar os campos conforme o lay-out da figura 11 abaixo:


Fig. 11

Para mover os campos clique sobre os mesmos e arraste-os para a nova posio. Para inserir um texto selecione a opo do menu Insert e a seguir Text Field, digitando o texto desejado e posicionando-o no relatrio. Para formatar um campo clique com o boto direito do mouse sobre o campo, o menu da figura 12 surgir com as vrias opes de formatao.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 120 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 12

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 121 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Iremos formatar a seo que inserimos de forma a obter os dados de cada aluno em pginas distintas, para isso clique com o boto direito do mouse sobre a seo e ative as opes mostradas na figura 13:

Fig. 13

Vamos agora inserir o campo que calcular a mdia aritmtica das notas dos alunos. Clique no campo nota e a seguir no boto com smbolo de somatria. A seguir na janela da figura abaixo(figura 14) selecione a opo average e posicione o campo abaixo do campo nota.

Fig. 14.

Deveremos tambm inserir uma frmula que ir mostrar a mensagem no espao observaes quando a nota do aluno para a matria for abaixo da nota mnima (5)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 122 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para isso clique na opo do menu Insert e Formula Field, a seguir informe o nome da formula figura 15:

Fig. 15

Logo a seguir a janela da figura 16 ser mostrada e iremos montar a frmula nela mostrada:
Fig. 16

Observe as janelas Fields, Functions e Operators. Para selecionar um de seus elementos basta clicar duas vezes sobre o mesmo.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 123 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Bem agora no esquea de salvar o relatrio, chamaremos o nosso de boletim.rpt. Finalmente voc pode clicar na aba Preview para ver o resultado final do seu trabalho (figura 17)

Fig.17

Obs.: Para desenhas as linhas e a caixa em torno do nome BOLETIM usamos os botes da barra de ferramentas do crystal (fig 18).

Fig. 18

Muito bem, e como ficaria o cdigo para imprimir o relatrio boletim.rpt no Visual Basic ? Que tal algo como: (Aqui chamamos o nosso controle Crystal Reports de CR1) cr1.WindowState = 2 cr1.WindowControlBox = True 'janela maximizada 'ativa os botes de controle da janela

cr1.ReportFileName = App.Path & "\boletim.rpt" 'caminho nome do relatrio cr1.Destination = 0 cr1.Action = 1 'imprime na tela 'inicia impresso
Pg. 124 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Obs: No esquea de ao gerar o seu relatrio deixar ativa a opo Verify on Every Print do menu Database ; Desative opo Save Data with Closed Report na opo Database->Set Location... clique no boto Same as Report.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 125 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

8 ) ACESSO A BASE DE DADOS PADRO XBASE(DBASE/CLIPPER)


Aprenda como acessar arquivos DBF do Dbase/Clipper no Visual Basic . Crie sua aplicao em Visual Basic acessando os dados de seus arquivos DBF do Clipper/Dbase via Controle de dados ou via DAO. Veja exemplo detalhado.

Acesso utilizando o Controle de Dados Vinculados. (Data Control)

Como acessar uma base de dados padro XBase(Dbase,Fox,Clipper).

O Visual Basic utiliza o formato do banco de dados do Access, isto significa que os objetos:tabelas, consultas, ndices, etc., so armazenados em um nico arquivo MDB o qual considerado como o banco de dados. No Dbase,FoxPro e Clipper o banco de dados pode ser constitudo de muitos arquivos; arquivos de dados(DBF), arquivos de ndices(NDX ou NTX) , etc. Esse formato de banco de dados considerado um banco de dados externo do tipo ISAM.(Indexed Sequential Access Method) Ao usar o Controle de Dados para acessar uma base de dados padro Xbase voc dever fornecer as seguintes informaes ao Visual Basic: 1 - Propriedade Connect Tipo de arquivo: dBaseIII, DbaseIV, FoxPro 2.X, etc. Ex: Connect: DbaseIII; 2 - Propriedade Databasename Caminho do diretrio dos arquivos do banco de dados. Ex: Databasename: C:\CONTROLE 3 - Propriedade RecordSource Nome do arquivo DBF que contm os registros que a

voc quer acessar via controle de dados, sem a extenso DBF. EX: Recordsource: Agenda

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 126 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Obs:Para arquivos XBase com extenso diferente de DBF informe a extenso separada do nome do arquivo pelo caractere #. Ex:Recordsource: Agenda#dat. 4 - Finalmente voc dever informar ao Visual Basic qual DLL utilizar com o banco de dados denominado na propriedade Connect. Para os arquivos do formato Xbase faa uma entrada no arquivo INI da sua aplicao com a seguinte linha: Dbase III=XBS200.DLL Obs: Se durante a instalao do VB voc optou pela instalao dos arquivos ISAM, o Setup colocar automaticamente as entradas no arquivo VB.INI, mas lembre-se que ao distribuir a sua aplicao voc dever instalar um arquivo INI com o mesmo nome do seu arquivo executvel no diretrio Windows do usurio. (Ou informar o diretrio usando a propriedade IniPath). Ex:DBEngine.INIPath=path) Alm disso verifique se o arquivo XBS200.DLL est presente no diretrio System do Windows caso contrrio voc obter a mensagem de erro: "Can't find installable ISAM". Exemplo de arquivo INI: [Installable ISAMs] Dbase III=C:\WINDOWS\SYSTEM\XBS200.DLL Dbase IV=C:\WINDOWS\SYSTEM\XBS200.DLL FoxPro 2.0=C:\WINDOWS\SYSTEM\XBS200.DLL FoxPro 2.5=C:\WINDOWS\SYSTEM\XBS200.DLL Btrieve=C:\WINDOWS\SYSTEM\BTRV200.DLL Alm disso devemos incluir a seo abaixo no arquivo INI: [Dbase ISAM] Deleted=On Isto evita que os registros deletados que ainda no foram removidos do arquivo apaream nos seus dados. (A eliminao fsica requer a execuo de procedimentos do prprio Dbase/Clipper.) Finalizando, tenha em mente que o acesso a arquivos externos do tipo ISAM apresentam algumas restries, tais como: No suportam os objetos: QueryDef, Relation, Container e Document

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 127 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

No suportam os mtodos: CompactDatabase , RepairDatabase, CreateQueryDef, OpenQueryDef e DeleteQueryDef No suportam a criao de ndices.(Acesso via Data control). (Neste caso voc pode controlar a ordem na qual os registros sero exibidos utilizando uma instruo SQL com propriedade Recordsource)

Desenhando a interface Vamos supor que voc quer acessar o arquivo agenda.dbf (Arquivo padro Dbase) que est no diretrio teste no drive c.(C:\teste) usando o controle de dados. O arquivo agenda possui a seguinte estrutura: ----------------------------------Nome do campo Nome Endereco Telefone Tipo Caracter Caracter Caracter Tamanho 30 30 11 -----------------------------------

----------------------------------Vamos montar o formulrio Agenda conforme descrito abaixo: - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como Agenda, e a seguir insira o controle de dados como indicado abaixo:

De incio selecione o objeto controle de dados na Toolbox do Visual Basic e acrescente-o ao seu formulrio.(Fig.1)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 128 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Defina a seguir as propriedades Name - Nome do Controle (O padro data1) e Caption - Especifica o nome que aparece no controle de dados.(O padro Data1) e dimensione o controle de dados. (Fig.2)

A seguir acrescente ao seu formulrio um quadro de texto (TextBox) para cada campo que desejar acessar a partir do Recordsource, anexe cada quadro de texto ao objeto de controle de dados (DataSource) e especifique o campo que cada quadro de texto dever exibir (DataField). (fig3.)

Ao final deveremos obter o formulrio como mostrado na figura 4.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 129 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Agora adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0:

Tabela 1.0 - Objetos e propriedades do formulrio Clientes -----------------------------------------------------------------Objeto Form Propriedade Name Caption Data Name Caption Connect Databasename RecordSource label Name Caption Autosize label Name Caption Autosize Configurao Agenda "Agenda" data1 "C:\teste\Agenda.dbf" "dBase III;" "C:\TESTE"(*) "AGENDA" label1 "Nome" True label2 "Endereo" True
Pg. 130 de 269

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-----------------------------------------------------------------label Name Caption Autosize TextBox Name index DataField DataSource TextBox Name index DataField DataSource TextBox Name index DataField DataSource CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption label3 "Telefone" True TEXT1 0 (**) "Nome" data1 TEXT1 1 "Endereco" data1 TEXT1 2 "telefone" data1 COMMAND1 0 (***) "&Incluir" COMMAND1 1 "&Excluir" COMMAND1 2 "&Sair"

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

-----------------------------------------------------------------(*) Ao informar o diretrio no qual os arquivos esto localizados o Visual Basic passa a consider-lo como o banco de dados onde esto localizados as tabelas, os ndices, etc. (**) As caixas de texto so controladas por um vetor com um ndice identificador, possuindo em comum o nome e o tipo.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 131 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

(***) Os botes de comandos tambm so um control array como as caixas de texto.

Cdigo do projeto. Vamos usar o mnimo de cdigo possvel, apenas para ilustrar o funcionamento da conexo do motor Jet com o arquivo agenda.dbf. 1 - Cdigo da seo de declaraes do formulrio Option Explicit Private rs As Recordset

2 - Cdigo do evento Activate do Formulrio. Private Sub Form_Activate() Set rs = Data1.Recordset 'designamos o conjunto de registro ' varivel recordset rs . '(isso melhora o desempenho) If rs.RecordCount = 0 Then MsgBox "O arquivo vazio , inserir registro .", vbExclamation Command1_Click (0) 'boto p/incluir registro End If End Sub Como o controle de dados no pode lidar com um conjunto de registros vazio, se o arquivo estiver vazio ocorrer uma mensagem de erro. Por isso o evento Activate verifica se a propriedade Recordcount indica que o arquivo est vazio, em caso positivo emitimos uma mensagem ao usurio (mgsbox) e "foramos" a incluso de um registro no arquivo. (Command1_click(0)). 3 - Cdigo associado aos botes Incluir , Excluir e Sair. Private Sub Command1_Click(Index As Integer)
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 132 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Select Case Index Case 0 ' boto incluir registro 'foca caixa de texto vinculada ao nome rs.AddNew Text1(0).SetFocus Case 1 'boto excluir registro

If MsgBox("Confirma excluso deste registro ? " & rs!nome, _ vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then rs.Delete 'exclui registro do arquivo rs.MoveNext If rs.EOF Then If rs.BOF Then MsgBox "O arquivo vazio , inserir registro .", vbExclamation Command1_Click (0) Else rs.MoveLast End If End If End If Case 2 End End Select End Sub 'boto sair do sistema 'incluir registro

Obs:

Para movimentar-se pelo arquivo use o controle de dados:

Note que no h necessidade de cdigo para movimentar-se pelos registros.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 133 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Acesso utilizando a DAO. (Data Access Object)

Como acessar uma base de dados padro XBase(Dbase,Fox,Clipper). Para se conectar a arquivos do Dbase/Clipper usando a DAO voc usar o mtodo Opendatabase para abrir a base de dados e o mtodo Openrecordset para abrir o conjunto de registros que deseja acessar. Esses so os procedimentos normalmente usados para trabalhar com os arquivos do Access. A diferena esta na sintaxe utilizada, veja a seguir como fazer: 1 - Ao invs de informar o nome do arquivo voc dever informar o caminho do diretrio de localizao de seus arquivos DBF. ( C:\TESTE ) 2 - Voc dever informar tambm qual o tipo de arquivo ao qual voc esta se conectando.(DbaseIII, DbaseIV, etc.) Veja abaixo como ficar o cdigo para o nosso caso: Dim db as Database Set db=DBEngine.Workspaces(0).Opendatabase ("C:\TESTE",false,false, "DbaseIII" )

3 - Finalmente utilize o mtodo OpenRecordset e informe o nome do arquivo DBF, sem extenso, que voc quer acessar. ( AGENDA ) Dim rs as Recordset Set rs= db.OpenRecordset("agenda", dbOpenTable )

Desenhando a interface Utilizaremos o mesmo arquivo agenda.dbf que se encontra no diretrio c:\teste. - Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Agenda2, o qual dever ter a seguinte aparncia:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 134 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-5 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 2.0: Tabela 2.0 - Objetos e propriedades do formulrio Agenda2 -----------------------------------------------------------------Objeto Form Propriedade Name Caption label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize TextBox Name index DataField DataSource Configurao Agenda "Agenda" label1 "Nome" True label2 "Endereo" True label3 "Telefone" True TEXT1 0 (**) "Nome" data1
Pg. 135 de 269

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-----------------------------------------------------------------TextBox Name index DataField DataSource TextBox Name index DataField DataSource CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption CommandButton Name index Caption TEXT1 1 "Endereco" data1 TEXT1 2 "telefone" data1 COMMAND1 0 (***) "&Incluir" COMMAND1 1 "&Excluir" COMMAND1 2 "&Sair" COMMAND1 3 "&Alterar" COMMAND1 4 "&Gravar" COMMAND2 0 (****) "<<" COMMAND2 1 "<"
Pg. 136 de 269

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-----------------------------------------------------------------CommandButton Name index Caption CommandButton Name index Caption COMMAND2 2 ">" COMMAND2 3 ">>"

------------------------------------------------------------------

-----------------------------------------------------------------(*) Ao informar o diretrio no qual os arquivos esto localizados o Visual Basic passa a consider-lo como o banco de dados onde esto localizados as tabelas, os ndices, etc. (**) As caixas de texto so controladas por um vetor com um ndice identificador, possuindo em comum o nome e o tipo. (***)(****) Os botes de comandos tambm so um control array como as caixas de texto.

Cdigo do projeto. Vejamos agora o cdigo associado a cada evento ou boto de comando. 1 - Cdigo da seo declaraes gerais do formulrio Option Explicit Private db As Database Private rs As Recordset

2 - Cdigo do evento Activate do formulrio Private Sub Form_Activate() If rs.BOF And rs.EOF Then MsgBox "O arquivo est vazio , vamos inserir um registro .", vbExclamation, "incluir registro" Command1_Click (0) End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 137 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

mostra_reg End Sub

3 - Cdigo do evento Load do formulrio Private Sub Form_Load() 'abre base de dados e o arquivo dbf a acessar Set db = DBEngine.Workspaces(0).OpenDatabase("C:\TESTE", False, False, "Dbase III;") Set rs = db.OpenRecordset("agenda", dbOpenTable) End Sub

4 - Cdigo dos botes de comandos de movimentao pelo arquivo Private Sub Command2_Click(Index As Integer) Const MOVE_FIRST = 0 Const MOVE_PREVIOUS = 1 Const MOVE_NEXT = 2 Const MOVE_LAST = 3 Dim marca As Variant If (rs.EditMode = dbEditAdd) Or _ (rs.EditMode = dbEditInProgress) Then rs.CancelUpdate Exit Sub End If Select Case Index Case MOVE_FIRST rs.MoveFirst Case MOVE_PREVIOUS If Not rs.BOF Then rs.MovePrevious If rs.BOF Then rs.MoveNext End If Case MOVE_NEXT If Not rs.EOF Then
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 138 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

rs.MoveNext If rs.EOF Then rs.MovePrevious End If Case MOVE_LAST rs.MoveLast End Select mostra_reg End Sub

5 - Cdigo dos botes de comandos de Incluir, Alterar, Excluir, Gravar e Sair. Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 'incluir registro rs.AddNew limpa_regs Text1(0).SetFocus Case 1 'excluir registro If MsgBox("Confirma excluso deste registro ? " & Chr(13) & rs!nome, _ vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then rs.Delete 'exclui registro do arquivo rs.MoveNext If rs.EOF Then If rs.BOF Then MsgBox "O arquivo est vazio , vamos inserir um registro .", vbExclamation, "agenda" Command1_Click (0) Else rs.MoveLast End If End If End If Case 2 End Case 3 'alterar rs.Edit Text1(0).SetFocus
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 139 de 269

'incluir registro

'sair do sistema

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Case 4 End Select mostra_reg End Sub

'gravar registros

grava_regs

6 - Cdigo da procedure para mostrar os registros nas caixas de texto. Public Sub mostra_reg() Dim i As Integer For i = 0 To 2 Text1(i) = IIf(Not IsNull(rs.Fields(i)), rs.Fields(i), "") Next i Text1(0).SetFocus End Sub

7 - Cdigo da procedure para gravar os registros no arquivo Public Sub grava_regs() Dim i As Integer If rs.EditMode = dbEditAdd Or _ rs.EditMode = dbEditInProgress Then For i = 0 To 2 rs.Fields(i) = Text1(i) Next i rs.Update 'atualiza registro End If End Sub

8-Cdigo da procedure para limpar o contedo das caixas de texto. Public Sub limpa_regs() 'limpa as caixas de texto Dim i As Integer For i = 0 To 2
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 140 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Text1(i) = "" Next End Sub

Utilizando indices. (DbaseIII / Fox)

A grande vantagem da conexo com base externas via DAO que voc pode utilizar os ndices para os formatos de arquivos DbaseIII e FoxPro. Para isso voc dever fazer o seguinte: 1 - Com o NotePad ou outro editor de texto crie um arquivo com estenso INF com o mesmo nome do arquivo DBF que quer acessar. 2 - No arquivo INF crie uma seo chamada [Dbase III] e relacione os arquivos de ndices que deseja utilizar da seguinte maneira: Para o nosso exemplo, o nome do arquivo [Dbase III] NDX1=NOME NDXNDX2=IDADE.NDX ... ... [Dbase III] NDX1=NOME.NDX seria AGENDA.INF e teria o formato:

3 - Altere o cdigo do evento Load do formulrio para: Private Sub Form_Load() 'abre base de dados o arquivo dbf a acessar e ativa o indce NOME Set db = DBEngine.Workspaces(0).OpenDatabase("C:\TESTE", False, False, "Dbase III;") Set rs = db.OpenRecordset("agenda", dbOpenTable) rs.index="NOME" End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 141 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Note que o nome do indice informado sem a extenso NDX. Nota: O padro de ndices .NTX utilizados pelo Clipper no suportado pelo Jet. Uma forma de resolver isto utilizar filtros e ordenaes.

Anexando arquivos DBF.

Dependendo da situao ser mais produtivo anexar os arquivos DBF a um banco de dados padro Access. Isto permite ao Visual Basic acessar os arquivos anexados como se fossem tabelas originais do Access.Vejamos como fazer isto: 1 - Se voc possuir o Microsoft Access a tarefa simples. Abra o seu arquivo MDB. Selecione a opo Arquivo->Anexar Tabela... Na janela Anexar selecione o tipo de arquivo a anexar.(Dbase III) Selecione agora o arquivo DBF a ser anexado e a seguir os ndices utilizados. Se tudo estiver certo o Access informa que o arquivo foi anexado com sucesso. Na janela banco de dados o arquivo anexado visualizado como:

2 - No Visual Basic, usando o Data Manager faa o seguinte: Abra o Data Manager e selecione a opo File-> Open Database Selecione o nome do banco de dados da caixa de dilogo Open Database e clique em Open Clique no boto Attached Tables e escolha o boto New Na caixa de dilogo Attached tables preencha os campos da seguinte forma:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 142 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Attachment Name - Nome que deseja para a tabela a anexar.(Agenda) Database Name - Diretrio dos arquivos DBF a anexar.(C:\teste) Connect String - Selecione o tipo de arquivo a anexar.(Dbase III) Table anexar.(Agenda.dbf) Finalmente clique no boto Attach para anexar a tabela ao seu banco de dados. to Attach Nome do arquivo DBF a

As restries para as tabelas anexadas so: Voc no pode forar a integridade referencial entre as tabelas anexadas e as tabelas nativas Voc s pode abrir as tabelas anexadas como um Dynaset ou Snapshot mas no como Table

Voc no pode alterar as propriedades: FieldSize, Validation Rule, DefaultValue e AllowZeroLength.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 143 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 144 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

9 ) SETUP WIZARD
Veja como gerar os discos de distribuio e o programa de instalao para a sua aplicao usando o SETUP WIZARD . Que tal um programa de instalao para o seu sistema em portugus ?.

A questo da distribuio.

Voc acabou de desenvolver uma aplicao em Visual Basic , testou , depurou e, finalmente, est pronto para distribu-la aos usurios finais. Geralmente tais usurios no possuem o Visual Basic instalado em suas mquinas. (voc deve sempre considerar essa situao como a padro.) Voc ter ento que distribuir com sua aplicao uma srie de arquivos DLL, e, se sua aplicao usar controles personalizados, ter tambm que distribuir os arquivos de controle VBX/OCX que utiliza. Para isto ou voc cria um programa de instalao com o Setup Wizard que determina os arquivos que voc precisa distribuir ou tenta determinar por si mesmo quais os arquivos precisam ser distribuidos. Se voc acha que pode fazer isso sem ajuda do Setup Wizard, e, s para voc sentir a complexidade da tarefa, vamos tentar relacionar o que voc ter que selecionar para distribuir: 1 - Arquivo executvel (EXE) , de banco de dados (MDB) e os arquivos INI. 2 - Os arquivos DLL indispensveis a qualquer aplicao: (Considerando a verso 4.0 do Visual Basic 16/32) - VB40016.DLL ou VB40032.DLL - VB4EN16.DLL ou VB4EN32.DLL - OC25.DLL - OLE2.DLL - VAEN2.DLL - VAEN2.OLB 3 - Os arquivos DLL/OCX especificamente exigidos pela sua aplicao: Ex.: Se voc usar o objeto de acesso a dados - DAO e o Crystal Reports: - DAO2516.DLL ou DAO2532.DLL
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 145 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

- CRYSTL16.OCX ou CRYSTL32.OCX 4 - Os arquivos dependentes de outros arquivos DLL j incluidos: Ex: Se voc usou a DAO (DAO2516.DLL) ter que incluir: -VAEN2.OLB -MSAJT200.DLL -MSJETERR.DLL -MSJETINT.DLL -VBAJET.DLL -VBDB16.DLL Se voc ainda no desistiu, realmente voc corajoso, v em frente e, boa sorte, voc vai precisar. O Setup Wizard fornecido com o Visual Basic e voc poder us-lo para criar um programa que instalar sua aplicao na mquina do usurio. As tarefas bsicas que o Setup Wizard faz so: Construir o arquivo executvel (EXE) do seu projeto. Criar um programa de instalao para a sua aplicao. Determinar os arquivos necessrios para a aplicao. Compactar os arquivos do programa, copi-los e divid-los em discos para distribuio.(CD-ROM, Disco Rgido e Redes). Criar um grupo de programas e um cone no sistema do usurio.

Gerando o assistente de Instalao e os discos para distribuio.

Vamos descrever passo a passo o processo de criao do programa de instalao e da gerao dos discos de distribuio para um projeto: agenda.vbp. Este projeto foi desenvolvido no artigo SQL e utiliza os controles CrystalReports, CommomDialog, Image, Picture, ComboBox alm de usar a DAO e os arquivos de banco de dados padro MDB. Este projeto no utiliza recursos de OLE nem conexes do tipo ISAM ou ODBC.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 146 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Vamos supor que a distribuio ser feita em discos de 3 1/2 (1.44), iremos usar o Setup Wizard da versao 5.0. Ento vamos l: 1 - Inicie o Setup Wizard no grupo de programas do Visual Basic, cone Application Setup. Ao surgir tela inicial (Introduction) clique no boto Next e o Setup Wizard mostra a tela 1.0, abaixo:

Tela 01

Nesta tela selecionamos a opo Create a Setup Programa e a seguir clicamos no boto Browse... para selecionar o projeto agenda.vbp que est no diretrio C:\VB5. Vamos clicar em Next para ir para o prximo passo. 2 - Na tela 2.0, abaixo, selecionamos a opo Disk Directories (\Disk1, \Disk2, etc.) para gerar os arquivos em diretrios (Disk1, Disk2, etc.) no disco rgido, a seguir clicar no boto Next para continuar:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 147 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Tela 02

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 148 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3 - Na tela 3.0, selecionamos o diretrio (C:\TEMP) onde os diretrios sero criados e os arquivos copiados e tambm o tamanho dos discos (1.44) usados para distribuio.

Tela 03

4 - Na tela 4.0, como nossa aplicao no usa drivers OBDC nem conexo via ISAM no selecionamos

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 149 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

nada, apenas clicamos em Next para prosseguir.


Tela 04

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 150 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

5 - Ao surgir a prxima tela clicamos em Next pois nossa aplicao no usa controles ActiveX. A tela 5.0 informa os arquivos de controle utilizados por nossa aplicao e a DLL do arquivo DAO usado em nossa aplicao.

Tela 05

Para ver detalhes dos arquivos selecionados clique no boto File Details...

6 - Na tela 6.0, o Setup Wizard mostra todos os arquivos que nossa aplicaoprecisar para funcionar. Voc pode remover qualquer arquivo que porventura j exista na mquina do usurio. Para distribuir o arquivo de dados clicamos no boto Add... e selecionamos o arquivo controle.mdb. Para ver detalhes sobre cada arquivo selecione-o e clique em File Details... Para ver a dependncia de cada arquivo, selecione o arquivo e observe a caixa de texto Dependency Of: Para ver o nmero de arquivos e a quantidade total de espao em disco necessria para a instalao de sua aplicao clique em Summary info...

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 151 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Tela 05

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 152 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

7 - A seguir o Setup Wizard mostra a tela 7.0 onde basta clicar no boto Finish para iniciar compactao de seus arquivos e criar o arquivo Setup.lst contendo lista de todos os arquivos de distribuio. Voc pode criar um arquivo modelo(Template) com extenso VBZ de forma a no ter que repetir todo o

processo para recriar os discos ou se quiser fazer alguma modificao.


Tela 07

A compactao de cada arquivo mostrada na tela 8.0 abaixo:

Tela 08

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 153 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Quando tudo estiver terminado a tela 9.0 abaixo indica que o processo chegou ao fim.
Tela 09

Basta agora copiar o contedo de cada diretrio para os discos de instalao e pronto, voc j pode distribuir a sua aplicao.Simples, no !!!

Assistente de Instalao em portugus.

Infelizmente parece que no esta nos planos da Microsoft em localizar o Visual Basic em portugus, por isso quando voc gerar o assistente de instalao ele estar todo em ingls. Existe porm uma maneira de traduzirmos as mensagens e avisos do Assistente de instalao para a lngua portuguesa, vamos explicar como fazer isso passo a passo:

- Gere em um diretrio os discos de instalao para qualquer projeto usando o Setup Wizard. - Aps a gerao verifique no diretrio a presena dos arquivos Setup.exe, Setup1.ex_ e Setup.lst dentre outros. - O arquivo Setup.exe um executvel e no foi desenvolvido no Visual Basic. - O arquivo Setup1.ex_ esta compactado e foi desenvolvido em VB. O projeto Setup1.vbp est no diretrio C:\VB\SETUPKIT\SETUP1

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 154 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

- O arquivo Setup.lst um arquivo de texto com vrios sees e contm informaes sobre os arquivos que sero utilizadas durante o processo de instalao. - Lembre-se que para iniciar a instalao voc executa primeiro o Setup.exe - O Setup.exe copia os arquivos bsicos , indicados na seo [Bootstrap], do arquivo Setup.lst descompacta e dispara o Setup1.exe - Conclumos ento que atravs de Setup1.exe que poderemos traduzir o nosso assistente de instalao para o portugus.
Se voc pensou em abrir o projeto Setup1.vbp no Visual Basic, localizar as mensagens e avisos nos formulrios(frm) e nos mdulos(bas), traduz-los e depois salvar o projeto e execut-lo para testes vai ter duas decepes: 1 - Voc no vai encontrar nenhum aviso ou mensagem quer nos formulrios quer nos mdulos do projeto setup1.vbp. 2 - Voc no vai conseguir executar o projeto setup1.vbp no Visual Basic, se tentar obter a mensagem de erro: Invalid command-line parameters. Unable to continue. Bem chega de suspense, para facilitar a localizao para vrios idiomas, todas a mensagens esto contidas no arquivo de recurso(resource files) Setup1.res o qual gerado pela compilao do arquivo editvel setup1.rc que est no diretrio vb\tools\resource\ do CD-ROM do Visual Basic 4 Enterprise. Ento vamos l: 1 - Faa um backup do subdiretrio Setup1 por precauo. 2 - Edite o arquivo Setup1.rc e faa a traduo das mensagens, salve o arquivo como Setup1.rc 3 - Agora compile o arquivo setup1.rc para setuptd.res da seguinte maneira: c:\vb\tools\resource\rc16\rc.exe /r /fo setup1td.res setup1.rc 4 - Abra o projeto Setup1.vbp e remova o arquivo setup1.res e inclua o arquivo setup1td.res 5 - Salve o projeto e gere o executvel setup1.exe
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 155 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Pronto, a primeira decepo foi resolvida, agora vamos segunda: Fazer os testes executando o projeto Setup1.vbp diretamente no Visual Basic. Siga o roteiro: 1 - Edite o arquivo Setup.lst, do diretrio de instalao, com o Notepad. 2 - Localize a linha Setup=Setup1.exe e substitua por Setup=c:\vb\vb16.exe c:\vb\setupkit\setup1\setup1.vbp /cmd 3 - Agora Salve o arquivo Setup.lst e execute o arquivo setup.exe do diretrio aonde foram gerados os arquivos de instalao. 4 - Ao invs de executar setup1.exe iniciado o Visual Basic e o projeto Setup1.vbp carregado. 5 - Agora so executar (F5) o projeto e testar o assistente traduzido. Nota: Para ver qual foi o parmetro passado pelo commando /cmd, Clique em Tools->Options e na guia Advanced.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 156 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

10 ) DBGRID
Mil e uma utilidades. Veja como utilizar o DBGrid suas propriedades e como configur-lo. Tire suas dvidas atravs de projeto explicado passo a passo.(Projeto para Controle bancrio.)

Introduo

Utilizao da Grade Vinculada aos dados: DbGrid. A Grade Vinculada aos dados - DbGrid oferece um meio para visualizar vrios registros ao mesmo tempo. Assemelha-se ao commando Browse usado no Clipper/FoxPro e ao modo tabela do Access. O seu primo pobre no VB seria o controle Grid, e, apenas para dimensionar a diferena, o Grid est limitado a 16352 linhas e 5450 colunas no Dbgrid a quantidade de linhas esta condicionada aos recursos do sistema e a 1700 colunas, sem contar que o desempenho do Dbgrid e bem superior ao do Grid. Enquanto o Grid precisa ser configurado quase que totalmente via cdigo, para usar o Dbgrid basta arrastar o cone do Controle para o seu formulrio e definir a propriedade DataSource para identificar o controle de dados que contm os dados que voc quer exibir, e pronto, a grade exibe todos os campos dos registros do recordset. Nota: Para preservar recursos do sistema use uma instruo SQL na propriedade Recordsource do controle de dados que o DbGrid ir utilizar.

Utilizao e Configurao.
Vejamos passo a passo como utilizar o Dbgrid com o controle de dados vinculados - Data Control.

De incio selecione o objeto controle de dados na Toolbox do Visual Basic e acrescente-o ao seu formulrio.(Fig.1)
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 157 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

fig1. Defina a seguir as propriedades: Name - Nome do Controle (O padro data1) e Caption - Especifica o nome que aparece no controle de dados. DatabaseName - Para bancos de dados do Access, representa o nome do arquivo do banco de dados, inclusive o nome completo do caminho. (Para banco de dados diferentes do Access necessrio informar o nome do caminho at o subdiretrio dos dados. Ex- Para padro Dbase : DatabaseName=c:\dir) RecordSource - Especifica as informaes que deseja obter no banco de dados - uma tabela, uma instruo SQL . RecordsetType - Se deseja criar um 2-snapshot ou um acessar uma 0-table altere esta propriedade, pois o padro 1-dynaset. Connect - Necessria quando o banco de dados no for do Access. Ex - Para banco de dados padro Dbase - Connect=dBASEIII.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 158 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

A seguir selecione o cone do DBGrid na ToolBox e arreste-o at o seu form dimensionando como na fig.4. ao lado.

Fig-4

Finalmente defina a propriedade DataSource vinculado-a ao controle de dados configurado anteriormente. fig.5.

Fig-5

Para permitir a edio, incluso e excluso de registros na grade voc deve definir como True as propriedades AllowAddNew, AllowUpdate e AllowDelete. Isto pode ser feito atravs da folha de propriedades do DBgrid (fig.6), onde podemos tambm especificar opes avanadas de tratamento do Recordset sem uma linha de cdigo sequer.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 159 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-6

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 160 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Projeto - Controle Financeiro.

Chega de conceitos, vamos colocar em prtica tudo isto em um projeto simples, um pequeno controle financeiro que voc depois pode aperfeioar. Ento mo a obra: - objetivo: Controlar a movimentao de contas bancrias. - Constituio: Um formulrio MDI para o menu de opes com botes de cones. Um formulrio para cadastrar: Clientes, Contas, Transaes. Um formulrio para visualizar a movimentao de determinada conta. Um formulrio para incluir dados. Um formulrio para excluir dados. Um formulrio para alterar dados. Um mdulo para cdigo utilizado por toda a aplicao.

1 - Vamos iniciar com a criao do menu, simples na verdade, mas que serve para os nossos propsitos. Fica a seu critrio increment-lo. Vamos l. - Inicie o VB e acione a opo Insert->MDI Form para inserir um formulrio MDI que conter os demais formulrios do projeto. - O nosso formulrio dever ter o aspecto mostrado na figura 1.0 abaixo:

Neste formulrio temos os seguintes controles: - 1 controle SSPanel - 5 botes SSCommand Alm disso temos um menu feito no Editor de Menus do Visual Basic.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 161 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig-6

- Insira os controles no formulrio e configure suas propriedades como indicado a seguir na tabela 1.0: Tabela 1.0 - Objetos e propriedades do form frmmenu.
--------------------------------------------------------------------------Objeto MDIForm Propriedade Name Picture (*)SSCommand Name Picture BevelWidth SSCommand Name Picture BevelWidth SSCommand Name Picture BevelWidth SSCommand Name Picture BevelWidth SSCommand Name Picture BevelWidth SSPanel Caption Name Align BevelWidth BevelInner BevelOuter Configurao frmmenu fig 1.0 SSCommand1(0) fig 1.0 - Clientes,Contas,Transaes 1 SSCommand1(1) fig 1.0 - Gerenciar o movimento 1 SSCommand1(2) fig 1.0 - Relatrios do Sistema 1 SSCommand1(3) fig 1.0 - Ajuda do Sistema 1 SSCommand1(4) fig 1.0 - Sair do Sistema 1 "" painel 1-Align Top 1 0-None 2-Raised ---------------------------------------------------------------------------

---------------------------------------------------------------------------

--------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

--------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 162 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

(*) Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um ndice identificador. (**) Para usar o Editor de Menus do VB pressione CTRL+E e informe o nome que deseja para o menu na propriedade Caption e na propriedade Name informe o nome de referncia do menu. Para criar subitens clique na seta para direita repita o passo anterior e a

seguir no boto Next para ir para o prximo subitem. Obs.: Para sublinhar a primeira letra do nome do menu insira o caractere antes da letra. Ex: &Cadastros -> exibe Cadastros. &

2 - Agora basta atribuir o cdigo a cada boto de comando, no nosso caso s usaremos o boto que gerencia o movimento e o boto para sair do sistema. - No boto que gerencia o movimento - Menu Movimento - iremos carregar o formulrio frmtrans. - No boto para sair do Sistema inserimos o cdigo que encerra a aplicao. Veja abaixo:

Private Sub SSCommand1_Click(Index As Integer) Select Case Index Case 0 'boto 1 - Cadastramentos (por sua conta) Case 1 'Gerencia movimento frmtransa.Show Case 2 'Relatrios Case 3 'Ajuda Case 4 'Sair da aplicao end End Select End Sub

Controle Financeiro - Definio de tabelas.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 163 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Vamos agora definir o banco de dados e as tabelas utilizadas pelo sistema. A princpio o sistema usar as seguintes tabelas: - BANCO.MDB - ser o banco de dados do nosso sistema. - tblcli - tblcontas - tblcodtrans - tbltrans - Tabela de cadastro dos clientes. - Tabela de cadastro das contas a controlar. - Tabela de cadastro dos cdigos das transaes realizadas. - Tabela onde ser registrada toda a transao realizada.

Vejamos agora a definio dos campos de cada tabela e a criao do banco de dados. 1 - Crie o seu banco de dados utilizando o Data Manager ou use o Microsoft Access e grave-o com o nome de BANCO.MDB. 2 - Crie uma tabela com o nome de tblcli com a seguinte estrutura: ---------------------------------------------------Nome do Campo COD_CLI DES_CLI Tipo de Dados LONG INTEGER(*) CARACTER 30 Tamanho ----------------------------------------------------

---------------------------------------------------(*) Como cada cliente deve ter um cdigo nico garantindo assim a exata identificao do mesmo, defina o tipo de dados para o campo cdigo como LONG INTEGER, e ative o atributo Counter e a opo Required.

3 - Crie uma tabela com o nome de tblcontas com a seguinte estrutura: ---------------------------------------------------Nome do Campo COD_CLI COD_CONTA DES_CONTA Tipo de Dados LONG LONG TEXT 30 30 Tamanho ----------------------------------------------------

---------------------------------------------------- Defina um ndice para os campos cod_cli e cod_conta com o nome de cliconta e com as seguintes propriedades: Unique, Primary index, Required.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 164 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

4 - Crie uma tabela com o nome de tblcodtrans com a seguinte estrutura: ---------------------------------------------------Nome do Campo COD_TRAN DES_TRAN Tipo de Dados LONG TEXT 30 Tamanho ----------------------------------------------------

---------------------------------------------------- Defina um ndice para o campo COD_TRANS e indique-o como chave primria 5 - Finalmente, Crie uma tabela com o nome de tblcodtrans com a estrutura: ---------------------------------------------------Nome do Campo COD_LANCA COD_TRANS COD_CLI COD_CONTA DATA_TRANS LANCAMENTO SALDO NU_DCTO OBS_TRANS Tipo de Dados LONG INTEGER(*) LONG LONG LONG DATE/TIME CURRENCY CURRENCY TEXT TEXT 15 30 Tamanho ----------------------------------------------------

---------------------------------------------------(*) Como cada lanamento deve ter um cdigo nico garantindo assim sua exata identificao, defina o tipo de dados para o campo cod_lanca LONG INTEGER, e ative o atributo Counter e a opo Required.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 165 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

- Defina os seguintes ndices para esta tabela:


---------------------------------nome do ndice - PrimaryKey - datatrans composio cod_lanca data_trans ndice - chave primria (j definido) ndice - datatrans por data de transao ----------------------------------------------------------------------------------------------------

Controle Financeiro - Interface com o usurio.


Vamos agora desenhar a interface com o usurio. Nesta fase iremos construir trs formulrios que comporo o nosso projeto: - frmtrans - frmexcl - frmincl - frmalt - Formulrio que gerencia a movimentao das contas - Formulrio para excluso de lanamentos - Formulrio para incluir lanamentos - Formulrio para efetuar alteraes nos lanamentos efetuados

1 - O formulrio frmtrans o formulrio principal de nossa aplicao, pois atravs dele iremos gerenciar a movimentao das contas. Ele ter o aspecto da fig1.0 abaixo:
Fig-1.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 166 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para montar o formulrio acima descrito observe os seguintes passos: 1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmtrans. 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo: Tabela 1.0 - Objetos e propriedades do formulrio frmtrans
---------------------------------------------------------------------------Objeto Form Propriedade Name Caption MDIChild Frame Name Caption Frame Name Caption ComboBox Name style ComboBox Name style Configurao frmtrans "Movimentao Contas Correntes" True Frame1 Cliente / Conta Corrente Frame2 Perodo / Tipo de Transao CboCliente 0-Dropdown Combo CboConta 0-Dropdown Combo
Pg. 167 de 269

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

---------------------------------------------------------------------------Label Name Caption MaskedBox Name Mask PrompInclude PromptChar MaskedBox Name Mask PrompInclude PromptChar ComboBox Name style (*)CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption SSPanel Caption Name Data DbGrid Name Name Column1 Column2 Column3 Column4 Column5 Label6 "" maskini 99/99/99 False " " maskfim 99/99/99 False " " CboTipo 0-Dropdown Combo command1(0) "&Incluir" command1(1) "&Excluir" command1(2) "&Alterar" command1(3) "&Sair" command2 "&Processa" "" SSPanel1 data1 DbGrid1 Data Documento Transacao Historico Valor
Pg. 168 de 269

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Column6 (**)Label Caption AutoSize

Saldo ** **

---------------------------------------------------------------------------

---------------------------------------------------------------------------

(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um ndice identificador. (**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivos controle descrito na fig 1.0. 2 - O formulrio frmincl o formulrio que ser usado para incluir lanamentos.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 169 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Tem o seguinte aspecto mostrado na Fig. 2.0 abaixo:


Fig-2.0

Para montar o formulrio acima descrito observe os seguintes passos: 1 - Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como frmincl. 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulrio frmincl
---------------------------------------------------------------------------Objeto Form Propriedade Name Caption MDIChild Frame Name Caption OptionButton Name Caption Value OptionButton Name Caption Value Configurao frmincl "Lanamentos-Incluso Debito/Crdito True Frame1 Lanamento Option1 Dbito True Option2 Crdito False
Pg. 170 de 269

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

---------------------------------------------------------------------------Frame Name Caption MaskedBox Name Mask PrompInclude PromptChar MaskedBox Name format Mask PrompInclude PromptChar ComboBox Name style TextBox TextBox SSPanel Name Name Caption Name (*)CommandButton Name Caption CommandButton Name Caption CommandButton Name Caption Frame2 Movimentao maskdata 99/99/99 False " " maskvalor $#,##0.00;($#,##0.00) "" False " " CboTipo 0-Dropdown Combo txtnudcto txtdescr "" SSPanel1 command1(0) "&Grava" command1(1) "&Cancela" command1(2) "&Sair"

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

(*) Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um ndice identificador. (**) Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome do respectivos controle descrito na fig 2.0. 3 - O formulrio frmexcl o formulrio que ser usado para excluir lanamentos.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 171 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Tem o seguinte aspecto mostrado na fig 3.0 abaixo:


Fig-3.0

Para montar o formulrio acima descrito observe os seguintes passos: 1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmexcl. 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo: Tabela 1.0 - Objetos e propriedades do formulrio frmexcl
---------------------------------------------------------------------------Objeto Form Propriedade Name Caption MDIChild Frame Name Caption OptionButton Name Caption Value OptionButton Name Caption Value OptionButton Name Caption Value Configurao frmexcl "Excluso de Dados" True Frame1 Excluir Dados Option1 A partir de True Option2 Antes de False Option2 No Perodo de False ----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

----------------------------------------------------------------------------

---------------------------------------------------------------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 172 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

TextBox TextBox TextBox

Name Name Name Visible

text2 txtdcto text1 false command2 "OK" command1 "&Cancela"

-------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------CommandButton Name Caption CommandButton Name Caption

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Controle Financeiro - Cdigo do projeto.


- Cdigo do formulrio de menu:frmmenu Botes de Comando do Menu. Private Sub SSCommand1_Click(Index As Integer) select case index case 0 case 1 'frmtransa frmtransa.Show case 2 case 3 case 4 'sair end end select End Sub

- Cdigo do formulrio das transaes:frmtransa

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 173 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-Caixa de combinao cliente Private Sub cbocliente_Click() If cbocliente.Text < > "" Then Dim sql_tmp As String sql_tmp = "SELECT * FROM tblcontas WHERE tblcontas.cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex) enche_combo cboconta, sql_tmp, "cod_conta", "cod_cli" End If End Sub

- caixa de combinao conta Private Sub cboconta_Click() If cboconta.Text < > "" Then Dim arqtemp As Recordset Set arqtemp = db.OpenRecordset("tblcontas", dbOpenTable) arqtemp.Index = "codconta" arqtemp.Seek "=", Val(cboconta.Text) Label6.Caption = arqtemp("desc_conta") arqtemp.Close Maskini.SetFocus End If End Sub

- Cdigo dos botes Incluir, Excluir, Alterar e Sair Private Sub Command1_Click(Index As Integer) Dim msg As String Set tabela = db.OpenRecordset("tbltrans", dbOpenTable) tabela.Index = "cod_conta" Select Case Index Case 0 'incluir alterareg = False
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 174 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

frmtrans_i.Show 1 Case 1 'excluir frmexcl.Show 1 data2.Refresh Case 2 'alterar if dbgrid1.columns(0) < > "" then tabela.Seek "=", DBGrid1.Columns(0) else msgbox "Selecione um lancamento a alterar ! " exit sub endif alterareg = True frmtrans_i.Show 1 Case 3 Unload Me Exit Sub End Select atualiza_grid (sql) Data2.Refresh End Sub

- Cdigo do boto Processar Private Sub Command2_Click() Dim msg As String Dim x As Integer '------checa seleo de cliente/conta-If cbocliente.ListIndex = -1 Then msg = "Selecione um cliente !" MsgBox msg, vbExclamation cbocliente.SetFocus Exit Sub End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 175 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

If cboconta.ListIndex = -1 Then msg = "Selecione uma conta !" MsgBox msg, vbExclamation cboconta.SetFocus Exit Sub End If '-- atribui cliente/conta as variveis publicas Cliente = cbocliente.ItemData(cbocliente.ListIndex) conta = cboconta.Text '--habilita botes de comandos-For x = 0 To 2 Command1(x).Enabled = True Next '-- estabelece consulta SQL -----sql = "SELECT data_trans, cod_trans, lancamento, nu_dcto, saldo, obs_trans FROM tbltrans" sql = sql & " WHERE cod_cli=" & cbocliente.ItemData(cbocliente.ListIndex) sql = sql & " AND cod_conta=" & cboconta.Text '---------define tipo da transacao para consulta-If cbotipo.ListIndex < > -1 Then sql = sql & " AND cod_trans=" & cbotipo.ItemData(cbotipo.ListIndex) End If '---verifica data inicial/final e define perodo----If Maskini < > " / / " And maskfim < > " / / " Then If Not IsDate(Maskini) Then msg = "Data inicial invalida" Maskini.SetFocus MsgBox msg, vbExclamation Exit Sub ElseIf Not IsDate(maskfim) Then msg = "Data final invlida " maskfim.SetFocus
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 176 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

MsgBox msg, vbExclamation Exit Sub End If sql = sql & " AND data_trans >= " & "#" & Format((Maskini), "mm/dd/yy") & "#" sql = sql & " AND data_trans <= " & "#" & Format((maskfim), "mm/dd/yy") & "#" End If '-----atualiaza Recordsource------sql = sql & " ORDER BY data_trans" Data2.RecordSource = sql atualiza_grid (sql) Data2.Refresh End Sub

- Cdigo de carga do formulrio Private Sub Form_Load() Dim x As Integer '-------define tamanho do form---Me.Width = 8295 Me.Height = 5595 '-- desabilita botes de comando For x = 0 To 2 Command1(x).Enabled = False Next '---- abre tabela / e define ndice ativo--'Set tabela = db.OpenRecordset("tbltrans", dbOpenTable) 'tabela.Index = "clicndtr" '----configura data control--Data2.DatabaseName = App.Path & "\joias.mdb"
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 177 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Data2.RecordSource = "SELECT * FROM tbltrans WHERE cod_trans = Null" '---------formata grid-------------------DBGrid1.Columns(0).Width = 900 DBGrid1.Columns(1).Width = 950 DBGrid1.Columns(2).Width = 925 DBGrid1.Columns(3).Width = 2200 DBGrid1.Columns(4).Width = 1300 DBGrid1.Columns(5).Width = 1300 dbgrid1.columns(6).width = 1300 '----------atualiza o grid------------------Data2.Refresh '------- atualiza combobox cliente ------------------

enche_combo cbocliente, "tblcli", "des_cli", "cod_cli" enche_combo cbotipo, "tblcodtrans", "des_tran", "cod_tran" '---------------------------------------------End Sub

- Cdigo da funo que atualiza o Grid Public Sub atualiza_grid(sql As String) Dim credito, debito As Currency Dim saldo_atu As Currency Dim arqtemp As Recordset saldo_atu = 0 '--------------------------------------------Set arqtemp = db.OpenRecordset(sql, dbOpenDynaset) '--------------------------------------------If arqtemp.EOF Then MsgBox "No h dados no arquivo !", vbExclamation arqtemp.Close Exit Sub End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 178 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

arqtemp.MoveFirst Do credito = 0 debito = 0 If Not IsNull(arqtemp![lancamento]) Then If arqtemp![lancamento] > 0 Then credito = arqtemp![lancamento] Else debito = arqtemp![lancamento] End If Else credito = 0 debito = 0 End If saldo_atu = credito + debito + saldo_atu arqtemp.Edit arqtemp![saldo] = saldo_atu arqtemp.Update arqtemp.MoveNext Loop While Not arqtemp.EOF arqtemp.Close End Sub

Cdigo do formulrio para incluir/alterar dados: Frmincl

Cdigo dos botes Gravar, Cancelar e Sair Private Sub Command1_Click(Index As Integer) Select Case Index Case 0 'gravar grava_recs tabela.Update If alterareg Then Unload Me Exit Sub End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 179 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

tabela.AddNew maskdata.SetFocus Case 1 'cancelar MsgBox "Ateno, as informaes no foram gravadas ! " If alterareg Then Unload Me Exit Sub End If clear_controls maskdata.SetFocus Case 2 'sair Unload Me End Select End Sub

Cdigo de rotina de gravao Cdigo do boto de opo Antes de Private Sub Option1_Click() If Option1.Value = True Then Label2.Visible = False Text1.Visible = False End If Text2.SetFocus End Sub

Cdigo do boto de opo A Partir de Private Sub Option2_Click() If Option2.Value = True Then Label2.Visible = False Text1.Visible = False End If Text2.SetFocus End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 180 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Cdigo do boto de opo No perodo de Private Sub Option3_Click() If Option3.Value = True Then Label2.Visible = True Text1.Visible = True End If Text2.SetFocus End Sub

Cdigo do modulo FINANCA.BAS

Cdigo do seo general declarations Option Explicit Public area As Workspace Public db As Database Public tabela As Recordset Public consulta As QueryDef Public alterareg As Boolean Public sql As String Public cliente As Long Public conta As Long

Cdigo de Sub Main Sub main() 'define rea ativa e abre arquivo de dados Set area = DBEngine.Workspaces(0) Set db = area.OpenDatabase(App.Path & "\banco.mdb") 'mostra formulrio de menu frmmenu.Show End Sub
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 181 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Cdigo da funo que preenche as combobox Public Sub enche_combo(combo As Control, data As String, campo As String, indice As String) '-- cria varivel recordset temporria Dim arqtemp As Recordset '-----limpa combo combo.Clear '-----abre tabela como Snapshot Set arqtemp = db.OpenRecordset(data, dbOpenSnapshot) '--inicia loop atravs da tabela--Do Until arqtemp.EOF combo.AddItem arqtemp(campo) combo.ItemData(combo.NewIndex) = arqtemp(indice) arqtemp.MoveNext Loop '--- fecha recordset e no seleciona nada na combo arqtemp.Close combo.ListIndex = -1 End Sub

DbGrid - Dicas e Truques

1-Tornando uma coluna invisvel DbGrid1.columns(i).visible= False

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 182 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

11 ) DBLIST
Tire suas dvidas de como utilizar o controle DBLIST. Veja como configurar as principais propriedades. Acompanhe exemplo comentado passo a passo. Veja exemplo de Pesquisa Dinmica. Aprenda praticando.

Introduo.

A Caixa de Listagem Vinculada aos dados - DBList tem funo idntica a Caixa de Listagem - ListBox, a qual seja, apresentar ao usurio uma lista de opes. A principal diferena consiste no fato de a Caixa de Listagem Vinculada aos dados buscar as informaes em um recordset, enquanto que a Caixa de Listagem, obtm as informaes atravs de uma srie de instrues AddItem. Vejamos como utilizar o controle DBList no roteiro a seguir: 1- Em um formulrio insira o controle Data Control e configure as propriedades: - Name - DataBasename - RecordSource -> nome do Controle. (O nome padro Data1.) -> nome do banco de dados que deseja acessar. -> nome da origem dos dados, geralmente o nome de uma tabela do banco dados referido na opo anterior ou uma string SQL. - RecordSetType -> Tipo do recordset utilizado (0-Table, 1-Dynaset, 2-Snapshot) de

2- A seguir insira o controle DBList e atente para as seguintes propriedades: - RowSource - ListField -> Nome do controle de dados que contm as informaes usadas preencher a lista. -> O nome do campo da origem dos dados a ser exibido na lista. para

Com essas propriedades definidas o DBList j ser povoado. Vejamos as demais: - DataSource - DataField - BoundColumn -> Nome do controle de dados que contm o recordset de destino para as informaes. -> Nome do campo de destino. (O que ser atualizado.) -> Nome do campo que contm o valor a ser copiado para outra tabela.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 183 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Exemplo - Cadastro de Funcionrios.

Vamos mostrar um exemplo de utilizao tpica do Controle DBList atravs de um projeto que tem por objetivo cadastrar os funcionrios de uma empresa. Iremos cadastrar o cdigo, nome, endereo e setor do funcionrio, para isso definimos o banco de dados CADFUN.MDB e a tabela tblcad com os campos indicados da seguinte forma:

Tabela TblCad - CADFUN.MDB ----------------------------Campo Codigo Nome Endereco Setor Tipo Long Text Text Text Comp. 40 40 12 ----------------------------Defina um ndice para o campo nome com o nome de nome Defina um ndice para o campo cdigo com nome de cdigo

-----------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 184 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Nosso formulrio em tempo de projeto ter a aparncia da figura 1.0. Neste formulrio temos os seguintes controles: - 1 data control - 1 Dblist - 1 Frame - 3 Labels - 3 Textbox - 1 CommandButton

Fig. 1.0

-Insira os controles no formulrio e configure suas propriedades como indicado a seguir na tabela 1.0: Tabela 1.0 - Objetos e propriedades do form frmcad.
--------------------------------------------------------------------------Objeto Form Propriedade Name Caption Data Name Caption Visible DBlist Name RowSource MatchEntry CommandButton Name Configurao frmcad "Cadastro de Funcionrios" Data1 Data1 False DBlist1 Data1 0 - Basic Matching Command1
Pg. 185 de 269

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Caption TextBox Name Text TextBox Name Text TextBox Name Text Label Name Caption AutoSize Label Name Caption AutoSize Label Name Caption AutoSize Frame Caption Name

&Sair Text1 " Text2 " Text3 " Label1 Cdigo True Label2 Nome True Label3 Endereo True Funcionrios Frame1

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 186 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Cdigo do Projeto - Cadastro de Funcionrios.

Vejamos agora o cdigo comentado para cada evento do nosso projeto. - Cdigo da seo General Declarations do form. Dim ws as Workspace Dim db as DataBase Dim tblcad as Recordset - Cdigo do evento Form Load que ocorre na carga do formulrio. Private Sub Form_Load() 'define area de trabalho Set area = DBEngine(0) 'abre banco de dados Set db = area.OpenDatabase(App.Path & "\cadfun.mdb") 'abre tabela que ser origem dos dados Set tblcad = db.OpenRecordset("tblcad", dbOpenTable) 'define o indice ativo tblcad.Index = "nome" 'configura propriedades do Data Control Data1.DatabaseName = App.Path & "\cadfun.mdb" Data1.RecordSource = "SELECT nome FROM tblcad ORDER BY nome" Data1.Refresh Set rsdata = Data1.Recordset 'posiciona o ponteiro no primeiro registro rsdata.MoveFirst 'configura propriedades do DBList DBList1.ListField = "Nome" DBList1.BoundText = rsdata!nome 'carrega as caixas de texto com os valores do registro atual load_recs DBList1.BoundText
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 187 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End Sub - Cdigo da funo que carrega os controles com os dados. Public Sub load_recs(strnome As String) 'busca nome selecionado na tabela tblcad.Seek "=", strnome 'se achar ento carrega os controles If Not tblcad.NoMatch Then Text1 = tblcad("codigo") Text2 = tblcad("nome") Text3 = tblcad("endereco") End If End Sub - Cdigo do evento Click de DBList. Private Sub DBList1_Click() 'chama a procedure load_recs passando o parmetro selecionado de DBlist. load_recs DBList1.BoundText End Sub BoundText o valor retornado por BoundColumn aps cada seleo na lista de opes. Note que com a propriedade Match Entry definida para 0 - Basic Matching ao pressionarmos uma tecla nos deslocamos para o nome que comea pela letra digita, e os controles so carregados com os dados automaticamente, tudo isso com pouco cdigo. - Ao executar a aplicao teremos algo como a tela da figura 2.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 188 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 2.0

Exemplo de busca dinmica usando Dblist.

Bem, agora iremos ver mais uma aplicao usando DBLIST. Vamos aproveitar o projeto anterior e incluir mais uma caixa de texto acima do controle DBLIST, conforme figura 3.0 abaixo:

Fig. 3.0

Queremos que a medida que se digita um nome para pesquisa na Caixa de texto a Caixa de listagem seja preenchida com os nomes do banco de dados que coincidem com as letras digitadas, ou seja, se digitarmos 'A' ser mostrada na Caixa de Listagem todos os nomes que comecem com A, e assim por diante.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 189 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para isso iremos fazer as seguinte alteraes: Altere a propriedade RecordsetType do Controle de dados para 1-Dynaset Acrescente o rtulo - Digite o nome para Pesquisa acima da Caixa de texto text1. Defina a propriedade ListField da Caixa de Listagem para nome. Para as Caixas de Texto defina a propriedade DataSource como DATA1, e a propriedade DataField como nome, endereo e setor respectivamente para text2, text3, e text4. Agora s falta inserir o cdigo abaixo para cada evento descrito: - Cdigo da seo General Declarations do form. Option Explicit Dim DB As Database - Cdigo do evento Form Load que ocorre na carga do formulrio. Private Sub Form_Load() Set DB = DBEngine.Workspaces(0).OpenDatabase(app.path "\cadfun.mdb") Data1.RecordSource = "SELECT nome,endereco,setor FROM tblcad ORDER BY nome" Data1.Refresh End Sub - Cdigo do evento Change da Caixa de Texto text1. Private Sub Text1_Change() Dim SQL As String Dim criterio As String criterio = Chr$(39) & Text1.Text & "*" & Chr(39) SQL = "SELECT nome,endereco,setor FROM tblcad WHERE nome LIKE " & criterio Data1.RecordSource = SQL Data1.Refresh End Sub Se voc fez tudo certo, ao digitar a letra A na Caixa de texto text1 o sistema ir preencher a Caixa de listagem ( DBLIST1 ) com todos os nomes que comecem com A, conforme figura 4.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 190 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 4.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 191 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

12 ) REDES (Projeto comentado)


Programas Multiusurios - Criao de Programas Multiusurios. Acesso a Dados, esquemas de bloqueio de registros, a segurana do JET, atualizao dos dados, erros, conflitos e desempenho. Acompanhe projeto explicativo.

- Primeiro vejamos um exemplo para o caso da abertura do banco de dados nos modos exclusivo e compartilhado :

- Acesso Exclusivo/Compartilhado.
Exemplo de Projeto - Comportamento Acesso Exclusivo e Compartilhado Este projeto bem simples mas serve para analisarmos como o Jet se comporta quando da abertura de arquivos em modo exclusivo e compartilhado em ambiente multiusurio. Iremos abrir o arquivo Biblio.mdb que esta no diretrio c:\teste em modo exclusivo e ver o como o Jet responde a uma tentativa de abrir o mesmo arquivo por outro usurio primeiro em modo exclusivo e depois em modo compartilhado. Depois inverteremos os modos para ver o resultado. Voc no precisa instalar este aplicativo em uma rede para testar o compartamento da abertura dos arquivos no modo exclusivo e no modo compartilhado. Para a coisa funcionar basta voc abrir duas instncias do aplicativo e colocar as janelas lado a lado. Vamos ao Projeto, simples por sinal: 1-Crie um novo projeto denominado redes1.vbp. No form1 crie os objetos e as propriedades como listadas na tabela 1.0 e grave o formulrio com o nome redes1.frm. Tabela 1.0 - Objetos e propriedades do form redes1.frm. -------------------------------------------------------------------------Objeto Form Propriedade Name Caption Configurao redes1.frm Arquivo Fechado
Pg. 192 de 269

--------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

-------------------------------------------------------------------------Frame Name Caption OptionButton Name Caption Value OptionButton Name Caption CommandButton Name Caption CommandButton Name Caption Enabled CommandButton Name Caption Cancel frame1 Modo de Acesso optexclusivo Modo Exclusivo True optcompartilhado Modo Compartilhado cmdAbrir "&Abrir Arquivo" cmdFechar "&Fechar Arquivo" False cmdSair "&Sair" True

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

-------------------------------------------------------------------------2 - Eis cdigo do projeto :

Option Explicit Dim db as Database Dim dbname as String Private Sub CmdAbrir_Click() 'inicia o tratamento de erros On Error GoTo AbrirError 'Localiza e abre o banco de dados conforme as opes do sistema. dbname="C:\TESTE\BIBLIO.MDB"
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 193 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

set

db

DbEngine.Workspaces(0).OpenDataBase

(dbname,

iif(optexclusivo,

True, False))

'Mostra na barra do formulrio atravs da propriedade Caption o modo de abertura do arquivo. Me.Caption = iif(optcompartilhado, "Modo Compartilahdo", "Modo Exclusivo")

'Alterna os botes para Abrir e/ou Fechar conforme a opo escolhida e abandona a procedure. cmdFechar.Enabled = True cmdAbrir.Enabled = False Exit Sub 'Inicia o tratamento de erros. AbrirError: Dim msg as String if Err= 3356 then 'Este erro ocorre quanto o usurio tenta abrir um arquivo que j est aberto no modo exclusivo ou quando o usurio tenta abrir no modo exclusivo um arquivo que j est aberto quer no modo exclusivo quer no modo compartilhado. if optcompartilhado then 'O usurio tentou abrir o arquivo no modo compartilhado mas o mesmo j estava aberto no modo exclusivo. msg = "O arquivo esta aberto no modo exclusivo," msg = msg & " voc no pode abri-lo agora, tente mais tarde." else 'O usurio tentou abrir o arquivo no modo exclusivo mas o mesmo j estava aberto por outro usurio.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 194 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

msg = "O arquivo j est aberto, e voc no pode abri-lo " msg = msg & " no modo exclusivo agora, tente mais tarde " endif Else 'Se ocorrer qualquer outro erro... msg = Err.Description Endif 'Mostra a mensagem de erro ao usurio e sai da procedure. MsgBox msg, vbExclamation Exit Sub End Sub

Private Sub cmdFechar_Click()

'1-Fecha o arquivo 2-alterna as opes dos botes de abertura e fechamento do arquivo 3-altera o status da barra do formulrio. db.close cmdAbrir.enabled = True cmdFechar.enabled = False Me.Caption = " Arquivo Fechado " End Sub Private Sub cmdSair_Click() End
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 195 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End Sub

3-Depois de pronto compile o projeto e execute duas instncias do aplicativo e coloque as janelas lado a lado como a fig 1.0 abaixo:

fig 1.0

1 - Primeiro abra o arquivo em modo exclusivo na janela da esquerda. - Feito isto tente a mesma coisa na janela da direita - Voc recebera uma mensagem de erro informando que o banco de dados j esta 2 - Agora abra o arquivo no modo compartilhado na janela da esquerda. - Abra o arquivo no mesmo modo na janela da direita - Observe que agora voc tem o arquivo aberto nas duas instncias do aplicativo. - Feche o arquivo e tente abri-lo no modo exclusivo na janela da direita. - O Jet retornar uma mensagem de erro. aberto

- A seguir um exemplo que analisa o comportamento do Jet na abertura das tabelas nas opes dbDenyRead, dbDenyWrite e dbReadOnly :

- Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly

Acesso a Tabelas usando as opes dbDenyRead, dbDenyWrite e dbReadOnly. Como sabemos o VB abre as tabelas para acesso compartilhado e faz o bloqueio de registros durante a atualizao dos mesmos.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 196 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Se voc necessitar bloquear alguns dados dentro de um conjunto de registros poder utilizar as opes dbDenyRead,dbDenyWrite e dbReadOnly dependendo do tipo do conjunto de registros que estiver acessando.(Ver tabela 1.0 abaixo) Restrio Probe a outros usurios ver os dados Probe a outros usurios modificar ou acrescentar dados Permite acesso somente de Leitura aos Dados ------------------------------------------------------------------------Tabela 1.0 Ao usar estas opes para acessar uma tabela voc deve estar preparado para lidar com as possveis mensagens de erro que o Jet retornar caso outro usurio tentar abrir a mesma tabela com as mesmas opes que voc utilizou. Uma forma de reduzir o nmero de erros que voc receber do Jet, quando precisar de acesso somente para leitura, abrir a tabela como um Snapshot. Iremos usar o arquivo Biblio.mdb que esta no diretrio c:\teste e abrir a tabela Publishers com as opes mencionadas e ver o comportamento do Jet. Para a coisa funcionar basta voc abrir duas instncias do aplicativo e colocar as janelas lado a lado. Inicio do Projeto : 1-Crie um novo projeto denominado redes2.vbp. No form1 crie os objetos e as propriedades como listadas na tabela 1.0 e grave o formulrio com o nome redes2.frm. Tabela 1.0 - Objetos e propriedades do form redes2.frm. --------------------------------------------------------------------------Objeto Propriedade Configurao
Pg. 197 de 269

Constante dbDenyRead dbDenyWrite

RecordSet Table Table,SnapShot Dynaset

-------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------dbReadOnly Table,Dynaset

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

--------------------------------------------------------------------------Form Name Caption ControlBox Frame Name Caption redes2.frm "Banco de Dados - BiBlio.mdb" False frame1 "Abertura da Tabela Publishers Modo" --------------------------------------------------------------------------optionbutton Name Caption option1(0) "No Permite Acesso aos Dados - dbDenyRead --------------------------------------------------------------------------optionbutton Name Caption option1(1) "No permite modificar Dados - dbDenyWrite --------------------------------------------------------------------------optionbutton Name Caption option1(2) "Permite Acesso s de leitura aos Dados - dbReadOnly --------------------------------------------------------------------------CommandButton Name Caption Enabled CommandButton Name Caption Enabled CommandButton Name Caption Cancel CommandButton Name Caption command1(2) "&Incluir Registro" False command1(1) "&Fechar Tabela" False command1(3) "&Sair" True command1(0) "&Abrir a Tabela"

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 198 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2-Cdigo do Projeto: Option Explicit Dim db as Database Dim rs as Recordset Dim dbname as string Private Sub Form_load() 'Localiza e abre o arquivo Biblio.mdb no modo compartilhado. dbname="C:\TESTE\BIBLIO.MDB" set db = DbEngine.Workspaces(0).OpenDataBase(dbname) End Sub

Private Sub Command1_Click() Dim msg As String Select Case Index Case 0 ' processar abertura da tabela com opao escolhida On Error GoTo abrir_erro If Option1(0).Value = True Then Set rs = db.OpenRecordset("publishers", dbOpenTable, dbDenyRead) End If If Option1(1).Value = True Then Set rs = db.OpenRecordset("publishers", dbOpenTable, dbDenyWrite) End If If Option1(2).Value = True Then Set rs = db.OpenRecordset("publishers", dbOpenTable, dbReadOnly) End If rs.Index = "Primarykey"
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 199 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

DBEngine.Idle dbFreeLocks Command1(0).Enabled = False Command1(1).Enabled = True Command1(2).Enabled = True Exit Sub abrir_erro: Select Case Err Case 3261 msg = "No posso abrir a tabela agora " Case Else msg = Err.Description End Select MsgBox msg, vbExclamation Case 1 ' fechar tabela rs.Close Command1(0).Enabled = True Command1(1).Enabled = False Command1(2).Enabled = False Case 2 'incluir registro na tabela On Error GoTo inclui_erro Dim chave As Long rs.MoveLast chave = rs("pubid") + 1 rs.AddNew rs("pubid") = chave rs("name") = "!!! TESTE DE INCLUSO !!!" rs.Update
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 200 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

MsgBox "Um registro foi incluido na tabela Publishers" Exit Sub inclui_erro: Select Case Err Case 3027 msg = "A tabela esta aberta apenas para leitura voc no pode modific-la" Case 3260 msg = "O registro esta atualmente bloqueado, tente mais tarde. " Case Else msg = Err.Description End Select MsgBox msg, vbExclamation Case 3 'sair da aplicao End End Select End Sub

3-Depois de pronto compile o projeto e execute duas instncias do aplicativo e coloque as janelas lado a lado como a fig 1.0 abaixo:

fig 1.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 201 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

1 - Primeiro na janela da esquerda selecione a opo com dbDenyRead. - Abra a Tabela e clique em incluir registros. At aqui tudo bem ! - Agora tente abrir a tabela do lado direito com qualquer das opes - DbDenyRead, dbDenyWrite e dbReadOnly. - Provavelmente voc receber uma mensagem de que no pode abrir a tabela nestes modos. 2 - Agora feche tabela da janela da esquerda desative a opo dbDenyRead e ative a opo dbDenyWrite. - Tente abrir a tabela na janela do lado direito com as duas primeiras opes : dbDenyRead e dbDenyWrite. Voc ser informado que no pode abrir a tabela nestes modos. - Agora tente abrir a tabela do lado direito com a opo de somente Leitura dbReadOnly, desta vez voc conseguira abrir a tabela. - Tente incluir um registro clicando em incluir registro e uma mensagem o informar de que a tabela esta aberta no modo somente leitura e voc no pode incluir registros.

Nota : Da mesma forma voc pode usar as opes descritas acima para criar um dynaset. Ex: Para criar um dynaset com a opo dbDenyWrite
Set rs = db. OpenRecordset("SELECT * FROM Tabela", DbOpenDynaset, dbDenyWrite)

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 202 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

13 ) ERROS
Tratamento. - Como interceptar erros, a instruo On Error, o Objeto Err, Determinando o tipo de erro, localizando os erros, como encerrar o tratamento de erros, os principais erros relacionados a banco de dados e redes, informaes recheadas de exemplos para voc no ter dvidas.

Introduo.
Voc terminou de desenvolver aquele super projeto e esta ansioso para mostrar para o seu chefe. Naturalmente voc depurou o seu cdigo e testou tudo antes de gerar os discos de instalao, afinal o seu emprego est em jogo. A instalao foi um sucesso, basta agora carregar a aplicao, ento voc clica no cone da aplicao e surge na tela a fatdica mensagem: Data error event hit in D:\PROJETO1\TESTES\CLIENTES.MDB isn't a valid Path...", imediatamente voc percebe que esqueceu de mudar o caminho para a abertura do banco de dados, e agora... todos os olhos se voltam para voc e... bem ai voc acorda suando frio, ainda bem que foi tudo um sonho ... ou um pesadelo. Veja bem, quando ocorre um erro durante a execuo de um programa Visual Basic, o controle vai para uma lgica de tratamento de erros que consiste em exibir uma mensagem descrevendo a causa do erro e encerrando o programa a seguir. Este o procedimento padro adotado pelo Visual Basic durante a execuo de um programa compilado; no o leve a mal, ele apenas esta sendo gentil solicitando a sua interveno. Voc pode, e deve, intervir neste processo construindo uma lgica de interceptao e tratamento de erros no seu cdigo, que ir interceptar os possveis erros e trat-los de uma forma mais elegante que a adotada pelo procedimento padro do Visual Basic. Tudo isto se torna mais enftico quando se trabalha com banco de dados no VB, pois neste caso, teremos muitas condies de erro durante a execuo da aplicao. Lembre-se, no existem nem aplicaes nem programadores nem usurios perfeitos.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 203 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Interceptando erros.
Para interceptar um erro no Visual Basic voc usa a instruo On Error. Quando uma instruo On Error est em vigor e ocorrer um erro o VB vai executar as aes determinadas pela instruo. Para estar em vigor a instruo On Error deve ser executada antes da ocorrncia de um erro na mesma funo ou sub-rotina onde ocorreu o erro ou em uma funo ou sub-rotina que tenha chamado a funo ou sub-rotina onde o erro tiver ocorrido. A instruo On Error tem a seguinte sintaxe: On Error goto label Traduzindo-a teremos: Quando ocorrer um erro, transfira a execuo para a linha aps a etiqueta. A etiqueta um identificador alfanumrico que termina com dois pontos (:). (Ex.: Trataerro: ) Ela tem que comear na primeira coluna e tem que estar na mesma funo ou sub-rotina da instruo On Error, sendo exclusiva dentro de um mdulo. Aps a etiqueta voc fornece o cdigo que vai tratar o erro ocorrido. Vejamos um exemplo: Public Sub Exemplo() On error Goto Trata_Erro -> Inicia tratamento de erro Print 1/0 a etiqueta Exit sub Trata_Erro -> Ocorreu um erro, a execuo desviada para a o cdigo que vem aps

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 204 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Trata_Erro: msgbox "No existe diviso por zero !!!!" -> Exibe a mensagem e End Sub Obs.: Note que antes da etiqueta existe a instruo Exit Sub. Sem ela o cdigo aps a etiqueta seria sempre executado, mesmo no havendo ocorrncia de erros. encerra a aplicao.

Identificando o Tipo de Erro.


Cada erro gerado no Visual Basic esta associado a um nmero e tem uma descrio. Para identificar um erro ocorrido, informando o seu nmero, a mensagem de erro, de onde o erro procede, etc. usamos o Objeto Err. O objeto Err foi introduzido na verso 4.0 do VB e incorpora a funcionalidade da instruo Err, da funo Err, da instruo e Funo Error e da funo Error$. Utilizaremos ento as propriedades do objeto Err para identificar o tipo de erro e fazer o seu tratamento, se for o caso. As principais propriedades do objeto Err que utilizaremos so: Number Description Source Fornece Numero do erro gerado Fornece a descrio do erro. Identifica o nome do objeto que gerou o erro

Quando ocorre um erro o VB coloca o nmero do erro na propriedade Number do objeto Err, conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso quanto ao seu tratamento. Vejamos um exemplo prtico: Vamos definir uma tabela com o nome de erro que estar armazenada no banco de dados Controle.mdb (j criado anteriormente ver Definio de bando de dados e Tabelas) e que possuir a seguinte estrutura: --------------------------------------------------------nome do campo Tipo de Dados Tamanho do Campo
Pg. 205 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

--------------------------------------------------------codigo nome Long Caracter 04 30

--------------------------------------------------------1 - Defina um ndice para o campo cdigo ativando as opes: Unique, Primary index. e Requerid Desta forma estamos criando uma chave primria para o campo codigo. Se tentarmos gravar um registro com um nmero de cdigo que j foi gravado o Jet retornar um erro, o erro de nmero de 3022, poderemos portando intercept-lo e atravs do tratamento informar ao usurio que o cdigo j foi utilizado permitindo a seguir ao usurio informar outro cdigo. Tudo se passa como se estivssemos fazendo a critica da entrada de dados do usurio, s que sem utilizar nenhum cdigo a no ser a interceptao e o tratamento do erro. 1- Ao iniciar a aplicao teremos tela da figura 1.0 abaixo

Fig.1.0

2 - Suponhamos que o usurio tente incluir um cdigo que j foi utilizado, ao clicar no boto gravar ocorrer uma mensagem de erro, pois o Jet no permite a duplicao de uma chave primria. Prevendo tal ao iniciamos o tratamento de erros e interceptando-o retornamos ao usurio a mensagem da figura 2.0 abaixo:
Fig.2.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 206 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fazemos isto utilizando a instruo Resume Next colocada aps a mensagem de aviso ao usurio.
Private Sub Command5_Click() On Error GoTo erro_mdb 'inicia o tratamento de erros verifica se esta incluindo ou editando caso contrrio no faz nada If rs.EditMode = dbEditAdd Or rs.EditMode = dbEditInProgress Then grava_regs rs.Update limpa_regs Form1.Caption = "Tratamento de Erros " rs.Bookmark = rs.LastModified load_regs End If Exit Sub erro_mdb: MsgBox "Erro nmero : " & Str$(Err.Number) & " Resume Next End Sub 'gerou o erro --> Cdigo j utilizado !!!" --> linha que ir gerar o erro.

'retorna a ao para a linha de cdigo subsequente aquela que

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 207 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

- Cdigo do projeto para Tratamento de erros. Option Explicit Dim db As Database Dim rs As Recordset Dim dbname As String
Private Sub Command1_Click() 'Inicia processo incluso, limpa os controles e 'foca o textbox codigo Form1.Caption = "Inclusao !!! " rs.AddNew limpa_regs Text1.SetFocus End Sub

Private Sub Command2_Click() 'encerra aplicao End End Sub Private Sub Command3_Click() 'move para o prximo registro rs.MoveNext If rs.EOF() Then rs.MovePrevious Form1.Caption = "Tratamento de Erros " load_regs End Sub Private Sub Command4_Click() 'move para o registro anterior rs.MovePrevious If rs.BOF() Then rs.MoveNext Form1.Caption = "Tratamento de Erros " load_regs End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 208 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Private Sub Form_Load() dbname = App.Path & "\controle.mdb" Set db = DBEngine.Workspaces(0).OpenDatabase(dbname) Set rs = db.OpenRecordset("erro") If rs.RecordCount > 0 Then load_regs Else MsgBox "Arquivo vazio" limpa_regs End If End Sub Public Sub load_regs() 'carrega os dados nos controles Text1 = "" & rs("codigo") Text2 = "" & rs("nome") End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 209 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Public Sub limpa_regs() 'limpa os controles Text1 = "" Text2 = "" End Sub Public Sub grava_regs() 'descarrega o contedo dos controles para gravao rs("codigo") = Text1.Text rs("nome") = Text2.Text End Sub

Finalizando um tratamento de erros.


Aps a interceptao do erro voc faz o tratamento do mesmo e tem que terminar o tratamento de erros com uma instruo que elimine o erro, caso contrrio o prprio tratamento de erros ir gerar um erro. No caso anterior a instruo que eliminou o erro foi a instruo Resume Next, pois devolveu a ao ao usurio. Vejamos abaixo as principais instrues utilizadas para eliminar um erro. Resume Next Resume Resume Label Resume Number Exit Sub Exit Function Exit Property On Error Err.Clear End Retorna a execuo na linha que vem logo aps linha que gerou o erro Executa mais uma vez a linha que gerou o erro. Retorna a execuo da linha que vem aps a etiqueta citada. Retorna a execuo na linha com o nmero indicado. Sai da sub rotina atual. Sai da funo atual. Sai da propriedade atual. Redefine a lgica de tratamento de erros. Elimina o erro sem afetar a execuo do programa. Encerra a execuo do programa.

Vejamos um exemplo onde simulamos vrias situaes de erro e utilizamos o tratamento de erros para determinar o nmero do erro a linha onde ocorreu o erro e que gerou o erro.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 210 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Note que utilizamos nmeros de linha em nosso cdigo para ser possvel a identificao do nmero da linha pelo tratamento de erros.
Private Sub Form_Load() Dim db As Database Dim dbName As String Dim rs As Recordset Dim s As String On Error GoTo TrataErro 'ativa o tratamento de erros dbName = app.path & "\controle.mdb" 10 Set db = DBEngine.Workspaces(0).OpenDatabase(dbName) ' Aqui ocorre um erro, pois a tabela no existe neste banco de dados 20 Set rs = db.OpenRecordset("erros", dbOpenTable) ' Aqui temos a abertura correta da tabela erro 30 Set rs = db.OpenRecordset("erro", dbOpenTable) ' Aqui ocorre mais um erro, pois no existe o campo endereo na ' tabela erro 40 s = rs![endereo] ' Aqui temos outro erro pois o cdigo no aceita valores alfanumricos 50 rs![cdigo] = "XYZ" ' Encerra a aplicao 60 End

Exit Sub LoadError: MsgBox "Erro nmero #" & Str$(Err.Number) & " na Linha " & Str$(Erl) & " - "_ & Err.Description & " - gerado por " & Err.Source Resume Next End Sub 'devolve a ao para a linha subsequente que gerou o erro.

Voc dever obter, ao iniciar o projeto, a mensagem da figura 3.0 e a seguir a mensagem de erro da figura 4.0, e assim por diante.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 211 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig.3.0

Fig.4.0

Observe que a descrio utilizada fornecida pela propriedade description do objeto Err. A instruo que eliminou o erro foi a instruo Resume Next, pois devolve a ao para a linha subsequente que gerou o erro permitindo assim que o aplicao seja executada at o seu final

Principais erros relacionados a 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. Relacionar aqui todos os erros tratveis do Visual Basic seria impossvel, mas vamos tentar listar os principais fornecendo o seu nmero e descrio, vamos l:
-------------------------------------------------------------------------

nmero

Mensagem

-------------------------------------------------------------------------

Erros genricos. 3005 3006 3008 3009 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.
Pg. 212 de 269

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3010 3015 3019 3020 3021 3022 3023 3034 3036 3037 3040 3044 3046

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.

Erros relacionados a bloqueio de registros 3027 3158 3167 3186 3187 3188 3189 3197 3260 3261 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'. 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'. Erros relacionados a Permisses 3107 3108 3109 3110 3111 3112 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'.

-------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 213 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 214 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

14 ) OLE
Conceitos. - O que OLE ? Automao OLE ?, DDE - voc ainda usa ?, mesclando os dados de suas tabelas com arquivos feitos no WORD, no reivente a roda use os recursos que j esto sua disposio, VB com Excel, VB com PowerPoint, tudo com exemplos codificados para voc ver como se faz.

Introduo.
OLE ! no, no o grito da torcida incentivando o seu time, nem a platia a gritar em uma tourada. Mas o que OLE ento ? Esta pergunta no to simples de responder, e, se pudssemos escrever um livro sobre o assunto no o esgotaramos, ento vamos por partes. No princpio o OLE 1.0 surgiu para substituir o DDE (Dinamic Data Exchange), devido as suas limitaes. Nessa poca OLE Object Linking and Embedding. Introduzia dois conceitos: 1 - Linking Cria vnculos ou referncias aos objetos armazenando no documento principal apenas os dados realmente necessrios para exibir, 2 - Embedding imprimir, etc.

Incorpora os dados dos objetos ao documento principal.

Neste contexto surgem as conceitos de objeto vinculado e do objeto incorporado, ento vejamos: Objeto Vinculado - So informaes (objeto) criadas em um arquivo (arquivo origem) e inseridas em outro arquivo (arquivo destino). Embora o objeto vinculado no se torne parte do arquivo de destino, existe um vnculo, uma conexo entre os dois arquivos de forma que o objeto vinculado no arquivo de destino automaticamente atualizado quando o arquivo de origem atualizado. Objeto Incorporado - So informaes (objeto) inseridas em um arquivo (arquivo de destino. Ao ser incorporado o objeto se torna parte do arquivo de destino.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 215 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Ao clicar duas vezes no objeto incorporado, ele aberto no programa de origem em que foi criado. Qualquer alterao feita no objeto incorporado se refletir no arquivo de destino. Como exemplo podemos considerar um documento do Word aonde inserimos uma figura do PaintBrush. - Se vincularmos a figura ao documento , apenas seus vnculos so gravados junto com o documento. - Ao contrrio se incorporarmos a figura ao documento ela gravada juntamente com o texto. - D para concluir que o tamanho dos arquivos com objetos incorporados muito maior que aqueles com objetos vinculados. Outro conceito importante no OLE o conceito de Cliente e Servidor. - Cliente - Servidor Aplicao cliente aquele que solicita os dados. Aplicao aquela que disponibiliza os dados.

No caso do exemplo do Word com a figura do PaintBrush , temos: - Cliente -> - Servidor -> Word , pois solicita os dados (a figura). Paintbrush, pois fornece os dados (a figura).

Os programas MS-Graph, WordArt, etc. so exemplos de programas que atuam somente como servidores, pois s entram em cena quando so requisitados. Excel , Word , PowerPoint, etc. podem atuar como Clientes ou Servidores.

No OLE 2.0, tivemos muitos aperfeioamentos dentre os quais podemos citar: - O Drag-and-Drop - O Uniform Data Transfer - O Visual Editing - A automao OLE

Dentre os acima citados o mais importante para ns a Automao OLE. A automao OLE permite que uma aplicao seja controlada por outra aplicao. atravs dela que podemos requisitar a outro aplicativo que execute uma determinada tarefa.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 216 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Como exemplo clssico iremos , estando no Visual Basic, solicitar ao Word que crie um novo documento e insira um texto no documento criado. Isto possvel usando automao OLE pois o Word suporta OLE e pode atuar como cliente ou Servidor, fornecendo um objeto que suporta os comandos e funes da linguagem WordBasic. Ento mos a obra: 1 - Inicie o Visual Basic, crie um novo projeto. 2 - No formulrio crie um boto de comando com a propriedade Caption definida como AUTOMAO OLE. 3 - Crie um boto de comando com Caption definida como &Sai e acrescente o seguinte cdigo ao boto: Private Sub Command1_Click() End End Sub 4 - Insira o seguinte cdigo ao boto : Private Sub Command2_Click() Dim objword As Object objword.filenew "Normal", 0 objword.Bold objword.FontSize 24 objword.Insert "AUTOMAO OLE !!!" objword.appmaximize "", 1 objword.FilePrintPreview objword.AppActivate "Microsoft Word" End Sub Ao executar a aplicao e clicar no boto de comando AUTOMAO OLE, o Word ser inicializado , criar um novo arquivo , incluir o texto AUTOMAAO OLE em negrito e com fonte de tamanho 24 mostrando o resultado no visualizador de impresso. Para retornar ao aplicativo feche o Word. 'Visualiza a impresso 'declara um varivel objeto 'cria novo arquivo 'define fonte em negrito 'define tamanho da fonte 'insere o texto no arquivo Set objword = CreateObject("Word.Basic") 'cria objeto e inicia o Word

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 217 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Observe que o "corao" do sistema est na funo CreateObject("Word.Basic") pois ela que cria efetivamente o objeto WordBasic e inicia o Word. NOTA IMPORTANTE ! At a verso 7.0 o Word utilizava o WordBasic, a partir da verso 8.0 (MSOFFICE 97) o WordBasic foi substitudo pelo VBA, mas mantm o objeto WordBasic apenas por questo de compatibilidade com as verses anteriores. Como o WordBasic sensvel ao idioma de localizao do WORD o exemplo acima provavelmente no funcionar no Word 6.0 em portugus, mas funcionar no Word 7.0, pois ele converte os comandos do WordBasic para o VBA automaticamente. No VBA foi introduzida uma estrutura de objetos hierarquizada, e para programar em VBA necessrio conhecer esta estrutura. Apenas para ilustrar a diferena vejamos como alguns comandos do WordBasic ficariam em VBA:

Instruo do WordBasic
Bold insert "AUTOMAO OLE" FilePrintPreview

Instruao do VBA 97
Application.Selection.Font.Bold=True Selection.TypeText Text:="AUTOMAO OLE" ActiveDocument.PrintPreview

Usando Automao OLE com o Word - Exemplo Prtico.

Imagine que voc possua uma aplicao em VB que controla um banco de dados dos empregados de sua empresa. Para facilitar vamos utilizar a tabela empregados do banco de dados de exemplo que vem com o Access, NWIND.MDB. Voc criou uma documento padro no Word, uma carta desejando feliz aniversrio aos seus empregados. Estando no seu aplicativo em VB voc deseja que o nome do empregado atual seja inserido em seu documento Word e o mesmo seja impresso.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 218 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Vejamos como realizar tal tarefa: 1 - Crie um documento no Word com o nome de ANIVERSARIO.DOC. Veja modelo abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 219 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

2 - Vamos Criar um novo projeto no Visual Basic , que ser a aplicao que controla nosso cadastro de empregados. Temos abaixo (figura 1.0) a tela principal de nossa aplicao em tempo de projeto:

Fig.1.0

Para montar o formulrio acima descrito observe os seguintes passos: 1 - Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Empregados. 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulrio Empregados ----------------------------------------------------------------------Objeto Form Propriedade Name Caption StartUPosition Data Name Caption Connect Databasename RecordSetType Configurao empregados "Automao OLE com Word 7.0" 2-CenterScreen dtaole "Automao OLE com Word 7.0" Access C:\access\exemplos\Nwind.mdb(*) 1-Dynaset
Pg. 220 de 269

------------------------------------------------------------------------

------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

RecordSource label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize label Name Caption Autosize TextBox Name DataField DataSource TextBox Name DataField DataSource TextBox Name DataField DataSource

"Empregados" label1(0) "Sobrenome" True label1(1) "Nome" True label1(2) "Endereo" True label1(3) "Cidade" True label1(4) "Estado" True label1(5) "Cep" True text1(0) "sobrenome" dtaole text1(1) "Nome" dtaole text1(2) "Endereco" dtaole

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

-----------------------------------------------------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 221 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

TextBox

Name DataField DataSource

text1(3) "cidade" dtaole text1(4) "estado" dtaole text1(5) "Cep" dtaole command1 "&Sair" command2 "&Automao OLE com Word 7.0" Photo Foto dtaole 0 - Clip

-----------------------------------------------------------------TextBox Name DataField DataSource TextBox Name DataField DataSource CommandButton Name Caption CommandButton Name Caption OLE Name Datafield DataSource SizeMode

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

------------------------------------------------------------------

-----------------------------------------------------------------(*)-Esteja certo que o caminho informado aponte para o NWIND.MDB. Como voc pode observar utilizando o controle de dados teremos pouco a codificar. Veja a seguir o cdigo associado aos botes de comandos: 1 - Cdigo associado ao boto que ativa automao OLE:
Private Sub Command2_Click() On Error GoTo trataerro 'ativa tratamento de erros

Dim Word As Object ' Declara uma varial objeto Set Word = CreateObject("Word.Basic") 'Cria uma varivel objeto Word

Word.FileOpen ("e:\winword\ANIVERSARIO.DOC") 'Abre o Arquivo do Word


Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 222 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Word.Bold Word.FontSize 24 Word.Insert CStr(Form1.Text1(1).Text) Form1 Word.Insert " " Text1(0)(Sobrenome) de Form1 Word.appmaximize "", 1 Word.FilePrintPreview Exit Sub trataerro: 'inicia tratamento de erros

'ativa texto em negrito 'aumenta tamanho da fonte para 24 'Insere o contedo de Text1(1)(Nome) de

'Insere um espao entre o nome e o sobrenome 'Insere o contedo de

Word.Insert CStr(Form1.Text1(0).Text)

'Visualiza a impressao

Word.AppActivate "Microsoft Word"

If MsgBox("Ocorreu um erro , voc quer continuar ?", 52) = 6 Then Resume Next Else Exit Sub End If End Sub

2 - Cdigo associado ao boto Sair: Private Sub Command1_Click() End End Sub Ao executar sua aplicao voc obter a tela da figura 2.0 abaixo:

Fig.2.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 223 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Agora ao clicar no boto Automao OLE com Word 7.0 o Visual Basic ir ativar o Word e visualizar a carta para o empregado corrente. Para o primeiro registro iremos obter a carta como a figura 3.0 abaixo

Fig.3.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 224 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Nada mal, no mesmo ? Voc acredita que podemos usar o Word para imprimir um relatrio de uma tabela do nosso banco de dados ? No ???? bem, ento vamos provar... Nosso objetivo ser imprimir um relatrio com o Nome, Sobrenome e Endereo da tabela empregados do banco de dados Nwind, usando o Word 6.0 via automao OLE. Parece complexo, mas na verdade basta definir o objeto Wordbasic como fizemos no exemplo anterior. Para melhorar a formatao iremos imprimir nas clulas de uma tabela previamente preparada para receber os dados. Mo a obra: 1 - Primeiro vamos criar um novo boto de comando para imprimir o relatrio, como abaixo:
---------------------------------------------------------------------------Objeto CommandButton Propriedade Name Caption Configurao command2 "&Relatrio" ----------------------------------------------------------------------------

----------------------------------------------------------------------------

2 - A seguir iremos associar ao evento Click do boto o seguinte cdigo: Cdigo associado ao boto que ativa automao OLE: Private Sub Command2_Click() Call relat End Sub Ao executar sua aplicao voc obter a tela da figura 4.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 225 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig.4.0

Observe que ao clicar no boto o procedimento relat ativado, ento devemos criar uma procedure com o nome de relat. Para isto clique em Tools-> Add Procedure e informe o nome Relat clicando a seguir em o OK e insira cdigo abaixo : Cdigo associado ao boto que ativa automao OLE:
Public Sub relat() Dim db As Database Dim rs As Recordset Dim wordobj As Object Dim i As Integer Dim texto As String Dim ColumnWidths(3) As String 'ativa tratamento de erros On Error GoTo erros 'abre os arquivos e cria um SnapShot Set db = DBEngine.Workspaces(0).OpenDatabase("C:\access\exemplos\Nwind.mdb") Set rs = db.OpenRecordset("Empregados", dbOpenSnapshot) 'cria objeto wordbasic Set wordobj = CreateObject("Word.Basic") With wordobj .filenew .Bold .Insert " AUTOMAO OLE - WORD 7.0 " .centerpara .Style "Normal" End With 'insere uma tabela para receber os dados wordobj.tableinserttable NumColumns:=3, NumRows:=2, InitialColWidth:="4" For i = 0 To 1 With wordobj .TableSelectColumn .TableColumnWidth columnWidth:=ColumnWidths(i) .NextCell
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 226 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End With Next 'salta uma linha With wordobj .NextCell .NextCell .NextCell End With 'Prepara o cabealho do Relatrio With wordobj .FontSize 14 texto = "Sobrenome" .Insert texto .NextCell texto = "Nome" .Insert texto .NextCell texto = "Endereo" .Insert texto .NextCell End With 'salta uma linha da tabela With wordobj .NextCell .NextCell .NextCell End With wordobj.FontSize 12 wordobj.Style "Normal" 'insere os dados na tabela While Not rs.EOF With wordobj texto = rs("sobrenome") .Insert texto .NextCell texto = rs("nome") .Insert texto .NextCell
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 227 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

texto = rs("endereo") .Insert texto .NextCell .Insert " " End With rs.MoveNext Wend With wordobj .appmaximize "", 1 .FilePrintPreview End With 'libera o objeto Set wordobj = Nothing Exit Sub erros: 'inicia tratamento de erros If MsgBox("Ocorreu um erro , voc quer continuar ?", 52) = 6 Then Resume Next Else Exit Sub End If End Sub 'Visualiza a impressao .AppActivate "Microsoft Word"

Devemos obter algo parecido com a figura 5.0 abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 228 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig.4.0

Usando Automao OLE com o Excel - Exemplo Prtico.


Bem, agora veremos como fcil criar uma planilha no Excel 5.0 com os dados de uma tabela usada por meu programa em Visual Basic. Para comear precisaremos de um objeto 'Planilha' do Excel para receber os dados da tabela. Vamos usar o mesmo banco de dados do exemplo anterior (Automao OLE com Word 7.0). Iremos acrescentar um novo boto de comando ao formulrio e associar o cdigo que ir exportar os dados da tabela empregados para o Excel 5.0. 1 - Primeiro vamos criar um novo boto de comando para imprimir o relatrio, como abaixo: -------------------------------------------------------------------------Objeto CommandButton Propriedade Name Caption Configurao command3 "&Exportar" --------------------------------------------------------------------------

-------------------------------------------------------------------------2-A seguir iremos associar ao evento Click do boto o seguinte cdigo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 229 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Cdigo associado ao boto que ativa automao OLE: Private Sub Command2_Click() Call export End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 230 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

15 ) GRFICOS NO VB
Aprenda como criar grficos no Visual Basic 5.0 usando o MSChart. Veja como criar grficos de barras, torta, pizza, 3D, de linha, etc. Configurao e utilizao, tudo com exemplos para esclarecer todas as suas dvidas.

Introduo.
Para construir grficos em sua aplicao voc pode usar o Crystal Reports, o Excel via automao OLE ou o controle grfico do VB, o MSChart. O MSChart permite apresentar seus dados em forma de grfico como uma planilha do Excel (linhas e colunas); grficos tridimensionais, grficos de torta, barra, pizza, etc. Antes de iniciar voc deve adicionar o controle Microsoft Chart Control ao seu projeto da seguinte maneira: Selecione a opo Components do menu Project, selecione o controle Microsoft Chart Control e clique em OK e adicione o controle ao seu formulrio. A figura 1.0 abaixo mostra a barra de ferramentas e a configurao inicial do MSChart:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 231 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 1.0 - Barra de Ferramentas

Fig. 2.0 - MSChart no Formulrio - Configurao Inicial

Agora basta definir a fonte de dados que alimentar o grfico, geralmente uma tabela, e fazer a configurao do Controle MSChart.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 232 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Para abrir um dilogo de propriedades do controle, clique com o boto direito do mouse sobre o mesmo, selecione a opo Properties e a janela para configurao surge como mostrada na figura 2.0 abaixo:

Cada aba permite configurar diversas propriedades utilizadas na confeco de um grfico.

Fig.3.0 - Pg. de Propriedades do MSChart

O MSChart no l aquela maravilha, mas consegue resolver, eu diria uns 70% dos problemas relacionados a confeco de grficos no Visual Basic.

Utilizao e Configurao.
Vejamos agora as propriedades do MSChart e de configur-lo. como

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 233 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 4.0

A configurao inicial do controle grfico apresenta uma srie de quatro barras em cinco colunas com legendas R1 a R5. Esta seqncia de dados definida pela propriedade RowCount. A quantidade de colunas definida pela propriedade ColumnCount. Na figura acima alteramos RowCount para 2 e ColumnCount tambm para 2 e ainda definimos a propriedade RowLabel para cada coluna e a propriedade ShowLegend para True. A propriedade ChartType permite obter os seguintes tipos de grficos: Barra - Valores de 0 e 1 Linha - Valores de 2 e 3 reas - Valores 4, 5 , 6 e 7 Combinao - Valores 8 e 9 Torta - Valor 14 XY - Valor 16

Aba Chart Chart Type - Permite escolhar o tipo de grfico usado Chart Options Show Legend Show Markers Stack Series Series em rows Aba Axis e Axis Grid - Mostra a legenda no grfico - Marcas sobre cada coluna do grfico - Empilhar as colunas - Inverte apresentao, colunas em linhas

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 234 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Existem diversas propriedades que permitem configurar os eixos de um grfico como: Espessura e cor de linhas Definio da escala - Valor Mximo e Mnimo Diviso da Escala - Valor Maior e Menor Aba Series e Series Color Permitem configurar diversas propriedades relacionadas s sries do grfico e a cor interior e da borda de cada srie Aba BackDrop Configura os elementos de fundo e da borda do grfico. O elemento a ser configurado selecionado na lista Property Name Aba Text Atravs da lista Property Name podemos selecionar o ttulo, o rodap, ttulos dos eixos X, Y ou de um segmento eixo Y e definir um nome para cada item , inclusive definindo o alinhamento e a orientao do texto atravs do grupo Alignment e Orientation. Aba Fonts Permite definir a fonte, estilo, tamanho e efeitos de cor. Alm destas propriedades temos as seguintes: Row RowCount RowLabel Data Column - especifica a linha corrente - Determina o nmero de sequncia de dados - define o rtulo de dados da linha corrente - Permite a leitura e a atribuio dos valores de dados ao grfico - Define a coluna ativa.

ColumnCount - Define o nmero de colunas ativas ColumnLabel - Define a legenda para a coluna ativa BorderStyle ChartData dimenses.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 235 de 269

- Define a borda do grfico - Permite atribuir valores s seqncias de dados a partir de uma matriz (array) de duas

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Exemplos de Utilizao Vejamos dois exemplos de utilizando o MSChart: 1 - Vamos construir um grfico cujo objetivo mostrar a evoluo das receitas e despesas mensais. Nosso grfico dever ter as seguinte configurao: Ttulo do Grfico - Receitas e Despesas - Ano 1998 Titulo do Eixo X - Meses Ttulo do Eixo Y - Reais - R$ Seqncias de Dados - Duas seqncias : Receitas e Despesas Mostrar Legendas - Azul para Receitas e Vermelha para despesas grfico dever ter borda com sombra. Nmero de linhas de seqncias de dados - Trs, representando os meses: Agosto, Setembro e Outubro. O jeito do grfico depois de pronto dever ser o da figura 5.0

Fig. 5.0

Agora vamos por a mo na massa e montar o grfico . Iremos fazer isto em tempo de projeto. Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como Grafico Selecione no Menu Project a opo Components e marque Microsoft Chart Control No menu View opo ToolBox insira o controle OCX ( ver fig 1.0) no seu formulrio.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 236 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Ative a janela de configurao de propriedades ( ver figura 2.0), na aba Text , Property Name Title em Text digite o ttulo do grfico - Receitas e Despesas - Ano 1998, selecione alinhamento centralizado e orientao de texto na vertical Como no passo anterior selecione na Aba Text em Property Name selecione X axis Title e em Text informe - Meses com alinhamento centralizado e orientao vertical Ainda como no passo anterior selecione a aba Text em Property Name selecione Y axis Ttile e em Text informe - Reais - R$, com alinhamento centralizado e orientao na horizontal Define a propriedade ShowLegend para True Defina Colcount igual a 2 , pois teremos duas sries , Receitas e Despesas Defina RowCount igual a 3 , pois teremos 3 seqncias de dados - Agosto, Setembro e Outubro Agora faa Column igual a 1 e Row igual a 1 . Isto define que iremos tratar a primeira seqncia de dados e a primeira srie que ser a receita: Defina RowLabel como Agosto Informe na propriedade ColumnLabel - Receita Informe na propriedade Data o valor de 40 Mantendo Row igual a 1 faa Column igual a 2 . Pois iremos tratar a srie Despesa Informe na propriedade ColumnLabel - Despesa Informe na propriedade Data o valor de 50 Agora faa Column igual a 1 e Row igual a 2 Defina RowLabel como Setembro Informe na propriedade Data o valor de 50 Mantendo Row igual a 2 faa Column igual a 2 . Informe na propriedade Data o valor de 26 Agora faa Column igual a 1 e Row igual a 3. Defina RowLabel como Outubro Informe na propriedade Data o valor de 95 Mantendo Row igual a 3 faa Column igual a 2 . Informe na propriedade Data o valor de 26 Na aba Axis selecione Y Axis e em Axis Scale desative Automatic Scaling, definindo a seguir: Minimum -> 0 Maximum -> 100 Major divisions -> 10 Minor divisions -> 1 Na aba Series Color defina a series Receita com a cor Azul e Despesa com a cor Vermelha Na aba BackDrop , Property Name -> Title, define a cor do ttulo e em Border-> Style defina como Single line , Width igual a 1 pt e color como verde Bem, acho que com isso terminamos o grfico, agora basta executar o projeto.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 237 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Projeto - Alunos. A esta altura voc deve estar pensando - "... Po se toda vez que eu tiver que fazer um grfico tiver que usar este processo trabalhoso eu desisto. ! ", e voc esta certo no tem cabimento , mas existe uma maneira bem mais fcil de fazer isto. Que tal alimentar os dados do seu grfico diretamente de seus arquivos de dados ? Vamos mostrar a seguir um projeto simples que indica como fazer isto. Iremos criar um grfico com os dados existentes em nossa tabela tblalunos para obter um grfico que indique o nmero de alunos matriculados por srie. Para facilitar criamos uma consulta que calcula a quantidade de alunos por srie e a armazenamos no banco de dados com o nome de SEL_ SERIE , a instruo SQL da consulta a seguinte:

SELECT DISTINCTROW TBLALUNOS.SERIE, Count(TBLALUNOS.CODALUNO) AS ALUNOS FROM TBLALUNOS GROUP BY TBLALUNOS.SERIE; O cdigo do projeto dado abaixo: Private Sub Form_Load() Set db = DBEngine.Workspaces(0).OpenDatabase("d:\escola\escola.mdb") End Sub

Option Explicit Dim db As Database Dim rs As Recordset Dim qry As QueryDef Dim reg As Integer Dim i As Integer Private Sub grafico_Click() 'O objeto Mschart foi chamado de graf1 Set qry = db.QueryDefs("sel_series")
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 238 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Set rs = qry.OpenRecordset rs.MoveLast rs.MoveFirst reg = rs.RecordCount graf1.chartType = 1 'barra em duas dimenses graf1.ShowLegend = False 'no mostra legenda graf1.Title = "Relao de Alunos por Turma" 'titulo do grfico graf1.ColumnCount = 1 'uma srie graf1.RowCount = reg 'nmero seqncia de dados graf1.Visible = True While Not rs.EOF() For i = 1 To reg graf1.Row = i graf1.RowLabel = rs("SERIE") & " Srie " graf1.Data = rs("alunos") rs.MoveNext Next Wend End Sub O grfico obtido esta

exposto abaixo:

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 239 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Bem, deu para perceber que se quisermos algo mais requintado teremos que usar produtos de terceiros pois o Mschart deixa a desejar mas eu diria que para coisas simples da para quebrar o galho. Ah! ia esquecendo, como imprimir o grfico ??? Insira o controle Picture no seu formulrio e deixa-o invisvel, e seguir insira um boto de comando com o nome de imprimir e acrescente o seguinte cdigo a ele:

Private Sub Command2_Click() graf1.EditCopy Picture1.Picture = Clipboard.GetData() Printer.PaintPicture Picture1.Picture, 0, 0 Printer.EndDoc Picture1.Picture = LoadPicture() End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 240 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

16 ) OPES DE BUSCA RPIDA ( Dicas )


Vamos mostrar como criar uma janela de localizao onde medida que o usurio digita o nome a procurar ,o sistema se antecipe ao que ele esta escrevendo mostrando na tela o item digitado. Muito difcil !!! No, siga o roteiro passo a passo: Crie um novo formulrio (form), desenhe nele uma caixa de texto e, logo abaixo dela uma caixa de listagem. Adicione dois botes de comando, um Cancelar para encerrar o programa e outro OK para mostrar como se determina o valor do texto selecionado na caixa de listagem.(Veja figura abaixo.)

Cdigo para o boto Cancelar Sub Cancelar_Click end End Sub Cdigo para o boto OK Sub OK_Click
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 241 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

msgbox "Voc selecionou " + list1.text End Sub Na rotina do evento Form_Load , use o comando AddItem para preencher a caixa de listagem com alguns nomes de cidades: Sub Form_Load( ) list1.AddItem "Salvador" list1.AddItem "Fortaleza" list1.AddItem "Recife" list1.AddItem "So Paulo" list1.AddItem "Rio de Janeiro" list1.AddItem "Natal" list1.AddItem "Vitria" list1.AddItem "Porto Alegre" list1.AddItem "Manaus" list1.AddItem "Porto Velho" list1.AddItem "Belm" End Sub No evento Text1_Change, digite a rotina de busca, ela entra em ao a cada caractere escrito e tenta localizar na caixa de listagem o item iniciado pelo conjunto de letras j digitado. Sub Text1_Change( ) Search$=UCase$(text1.text) Searchlen=len(Search$) If Searchlen then For i=0 to list1.ListCount-1 if Ucase$(Left$(List.List(i),Searchlen))=Search$ then List1.ListIndex=I Exit For End if Next Endif End Sub

A localizao do item coincidente e feito pelo lao For/Next que transfere a barra de seleo
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 242 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

para o item correspondente (List1.ListIndex=I), saindo do loop com Exit For. Pronto ! Agora Salve o seu projeto e teste-o. Que tal ? Simples, no ? Fonte:Revista Exame Informtica

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 243 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

17 ) HOT SPOTS NO VISUAL BASIC ( Dicas )


Que tal transformar uma picture box do VB em um Hot Spot ? HOT SPOTS ??? Um Hot Spot nada mais do que uma figura que possui regies com eventos distintos para o clique. So tambm chamadas de reas quentes ou hipergrficos. O recurso simples : basta criar dentro da picture box um vetor - array - de labels transparentes. Cada elemento do vetor ter um clique diferente. Vamos ao roteiro passo a passo: Inicie um novo projeto no Visual Basic - o Form1 criado automaticamente.De a ele o nome de frmprinc. Adicione ao Form1 uma picture box com um arquivo bitmap(BMP) ou metafile(WMF) de sua preferncia. Vamos usar o arquivo COMPUTER.WMF do diretrio VB\METAFILE\BUSINESS. De o nome a picture de PI_Princ.(Veja Figura).

Adicione um label sobre PI_Princ com as seguintes propriedades: BackStile = 0 BorderStyle = 1 Caption = Name = LB_Rg Crie um vetor com o controle LB_Rg com quatro ndices.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 244 de 269

'Transparent 'Fixe Single 'Deixe em branco

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Coloque uma label sobre o teclado, outra sobre o video, outra sobre o mouse e outra sobre a cpu. Crie uma label na base do formulrio frmprinc com o nome de lab_qual e na sua propriedade Caption informe: SISTEMA TESTE. Crie uma label no topo do formulrio frmprinc com o nome de lab_nome e na sua propriedade Caption inform: Clique em uma rea para ver o nome do componente. Adice o cdigo seguinte label LB_Rg: Sub LB_Rg_Click (Index as Integer) Dim qual as String Select Case Index Case 0 qual = "Teclado" Case 1 qual = "Vdeo" Case 2 qual = "CPU" Case 3 qual = "Mouse" End Select lab_qual.Caption = " " + qual + " " End Sub Adicione o seguinte cdigo picture PI_Princ: Sub PI_Princ_Click( ) LB_status.Caption= " " End Sub 10. Deixe a borda dos labels visveis em tempo de desenho ocultando-as somente em tempo de execuo. Fazemos isso quando o formulrio carregado: Sub Form_Load Dim i as String For i=0 to 3
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 245 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

LB_Rg(i).BorderStyle = 0 'none next i End Sub Pronto acabamos. Agora salve e teste o seu programa. H inumeras aplicaes para esta tcnica ,basta voc usar a imaginao. Dica: Para trabalhar com reas irregulares combine vrias labels at conseguir a rea desejada. Lembre-se que a instruo Select Case pode conter clusulas como : Case 1 to 4,7,10 isto nos d mais flexibilidade. Ah! se quiser pode usar outros eventos associados label; que tal MouseMove ? Fonte:Revista Frum Access

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 246 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

18 ) FORMULRIOS COM SUBFORMULRIOS NO VB ? (Dicas)

Se voc utiliza o Visual Basic e conhece a facilidade com o Access possui mesmo ? E se... criarmos algo parecido... vamos l. A idia bsica e montar um projeto com os seguintes elementos: Um formulrio principal - Form1 Um controle DBGrid - DBGrid1 Dois controles Data Control - Data1 e Data2

cria um formulrio com um

subformulrio j deve ter ficado com dor de cotovelo, afinal o VB no possui tal recurso. Ser que no

Um arquivo de dados padro Access. Usaremos o NWIND.MDB do Access. (Usaremos as tabelas Pedidos e Detalhes do Pedido) Um boto de comando para encerrar o programa. Duas Caixas de Texto para visualizar os dados Duas Labels - etiquetas para identificar as caixas de texto.

1 - Inicie um novo projeto no Visual Basic. Grave o formulrio como Form1 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo: Tabela 1.0 - Objetos e propriedades do formulrio Agenda -------------------------------------------------------------------------Objeto Form Propriedade Name Caption Data Name Caption Connect DatabaseName RecordSetType RecordSource Data Name Configurao Form1 "Formulrio/Subformulrio" Data1 Tabela -> Pedidos (NWIND.MDB) Access C:\ACCESS2\APLEXEMP\NWIND.MDB 1-Dynaset Pedidos Data2
Pg. 247 de 269

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Caption Connect DatabaseName RecordSetType RecordSource Visible (4) DBGrid Name Caption DataSource Column1 Column2 Column3 TextBox Name Caption DataField DataSource TextBox Name Caption DataField DataSource Label Name Caption AutoSize Label Name Caption AutoSize CommandButton Name Caption

Data2 Access C:\ACCESS2\APLEXEMP\NWIND.MDB 1-Dynaset Detalhes do Pedido False DBGrid1 Detalhes dos Pedidos(NWIND.MDB) Data2 Nmero do Pedito Preo Unitrio Quantidade Text1 "" Nmero do Pedido Data1 Text2 "" Nome do destinatrio Data1 Label1 Nmero Pedido True Label2 Destinatrio True Command1 &Sair

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

--------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 248 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

3 - O seu formulrio dever ter o seguinte jeito:

Fig. 1.0

4- Para incluir as colunas no DBGrid faa o seguinte: - Aps configurar os controles data1 e data2 como indicados e ter colocado o controle DBGrid no seu formulrio, dimensione-o como na figura 1.0. acima. - Selecione o controle DBGrid e clique com o boto direito do mouse sobre o mesmo; o menu da figura 2.0 dever surgir, nele clique na opo Edit. - Clique novamente com o boto direito do mouse sobre o controle DBGrid para obter o menu da figura 3.0.

Fig. 3.0

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 249 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 2.0

Nele notamos as opes Insert, para inserir colunas em determinada posio e Append para inserir aps a ltima coluna.

Clique em Insert para inserir mais uma coluna.

Agora clique na opo Properties... do menu da figura 3.0 . Voc dever obter a tela da figura 4.0, onde na selecionando Columns voc atribui a cada coluna o campo do RecordSource atribudo ao controle Data2.

Fig. 4.0

5 - Agora falta somente acrescentar o seguinte cdigo ao evento reposition do controle Data1:
Private Sub Data1_Reposition() Dim SQL As String SQL = "SELECT * FROM [detalhes do pedido] WHERE [nmero do pedido] = " & Text1.Text Data2.RecordSource = SQL Data2.Refresh End Sub
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 250 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

6 - E o cdigo para encerrar o programa no boto de comando: Private Sub Command1_Click() End End Sub 7- Se voc fez tudo direitinho ao executar o projeto obter a tela da figura 5.0, e ao clicar para movimentarse pelos registros da tabela pedido os registros dos detalhes do pedido sero mostrados simulando um subformulrio.

Fig. 5.0

- E Ento ? Com o VB podemos ou no criar formulrio / Subformulrio ???

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 251 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

19) CRIANDO UM SCREEN SAVER NO VB (Dicas)


Vamos criar um programa no Visual Basic e transform-lo em um Screen Saver. Pode parecer complexo, mas no . Primeiro vamos criar um programa que v enchendo a tela de pontos (o cdigo foi tirado de um exemplo do prprio Visual Basic), e, a seguir faze-lo funcionar como um Screen Saver. Para isto basta atentar-mos para os seguintes detalhes: 1- Ao criar o programa o form dever ocupar toda a janela e no ter ttulo, nem os botes para maximizar ou minimizar devem estar habilitados. Valores das propriedades do Form1 -----------------------------------------Propriedade Caption ControlBox BackColor MaxButton MinButton WindowState Valor "" False &H00000000& (preto) False False 2 ------------------------------------------

-------------------------------------------2 - Insira o controle Timer no formulrio (fig 1.0) e defina as propriedades

Valores das Prop. de Timer1 ------------------------------Propriedade Name Enabled Interval 60 -------------------------------Valor Timer1 True -------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 252 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Fig. 1.0

3 - A seguir insira o cdigo abaixo no evento timer do temporizador: (Aqui fica a seu critrio, use a sua imaginao... )
Private Sub Timer1_Timer() Dim CX, CY, Msg, XPos, YPos ScaleMode = 3 DrawWidth = 5 ForeColor = QBColor(4) FontSize = 24 CX = ScaleWidth / 2 CY = ScaleHeight / 2 Cls Msg = "Bom Dia!" CurrentX = CX - TextWidth(Msg) / 2 ' Horizontal position. CurrentY = CY - TextHeight(Msg) Print Msg ' Print message. Do Counter = Counter + 1 XPos = Rnd * ScaleWidth YPos = Rnd * ScaleHeight ' Get horizontal position. ' Get vertical position. ' Draw confetti. ' Vertical position. ' Declare variables. ' Set ScaleMode to ' pixels. ' Set DrawWidth. ' Set background to red. ' Set point size. ' Get horizontal center. ' Get vertical center. ' Clear form.

PSet (XPos, YPos), QBColor(Rnd * 15) DoEvents ' Yield to other

If Counter > 2000 Then Counter = 0 Form1.Cls End If Loop End Sub

'contador para limpar a tela

' processando

4 - Como o Screen Saver pode ser ativado mais de uma vez, insira o cdigo a seguir no evento Load do formulrio para evitar mais de uma instncia de seu aplicativo na memria.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 253 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Private Sub Form_Load() If App.PrevInstance Then End End If End Sub 5 - Para encerrar o programa utilize os eventos MouseMove, MouseDown e KeyDown, pois quando o usurio pressionar algo ou movimentar o mouse o Screen Saver deve ser encerrado. Insira os cdigos como descrito abaixo: Private Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y As Single) End End Sub Private Sub Form_MouseUp(Button As Integer,Shift As Integer,X As Single,Y As Single) End End Sub Private Sub Form_KeyPress(KeyAscii As Integer) End End Sub 6 - Como o evento MouseMove ativado quando o form for lido pela primeira vez, insira o cdigo abaixo no evento MouseMouse para no fechar o programa na sua ativao. Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Static conta As Integer If conta > 3 Then End Else conta = conta + 1 End If End Sub 7 - Agora ative a opo File->Make EXE File... e informe o nome do seu Screen Saver.
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 254 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

8 - Troque a extenso EXE do arquivo gerado para SCR, e copie o arquivo para o diretrio \WINDOWS\SYSTEM 9 - Agora configure a proteo de tela no seu Windows 95 selecionando o nome do seu programa como o protetor de tela. 10 - Se quiser pode incrementar ainda mais este exemplo, mas ateno, eu no testei este exemplo no Windows 3.X, s no Windows 95.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 255 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

20) ROTINA PARA VALIDAR CPF/CGC NO VISUAL BASIC (Dicas)


Inicie o Visual Basic, Crie um form como abaixo e a seguir insira o cdigo para cada evento do controle MaskedBox. A seguir insira um mdulo com as funes que iro checar o CGC e o CPF e fique a vontade

para otimiz-las. Acho que o resto intuitivo.

Rotinas do formulrio Form1 Private Sub Maskcpfcgc_LostFocus() If Len(Maskcpfcgc.Text) > 0 Then Select Case Len(Maskcpfcgc.Text) Case Is = 11 Maskcpfcgc.Mask = "###.###.###-##" If Not calculacpf(Maskcpfcgc.Text) Then MsgBox "CPF com DV incorreto !!!" Maskcpfcgc = "" Maskcpfcgc.Mask = "##############" Maskcpfcgc.SetFocus End If Case Is = 14 Maskcpfcgc.Mask = "##.###.###/####-##" If Not ValidaCGC(Maskcpfcgc.Text) Then MsgBox "CGC com DV incorreto !!! " Maskcpfcgc = "" Maskcpfcgc.Mask = "##############" Maskcpfcgc.SetFocus End If
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 256 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End Select End If End Sub Private Sub Maskcpfcgc_GotFocus() Maskcpfcgc.Mask = "##############" End Sub Private Sub Maskcpfcgc_KeyPress(KeyAscii As Integer) 'se teclar enter envia um TAB If KeyAscii = 13 Then SendKeys "{TAB}" KeyAscii = 0 End If End Sub Private Sub Command1_Click() End End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 257 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Funes para Validar CPF e CGC Validar CGC Public Function CalculaCGC(Numero As String) As String Dim I As Integer Dim prod As Integer Dim mult As Integer Dim digito As Integer If Not IsNumeric(Numero) Then CalculaCGC = "" Exit Function End If mult = 2 For I = Len(Numero) To 1 Step -1 prod = prod + Val(Mid(Numero, I, 1)) * mult mult = IIf(mult = 9, 2, mult + 1) Next digito = 11 - Int(prod Mod 11) digito = IIf(digito = 10 Or digito = 11, 0, digito) CalculaCGC = Trim(Str(digito)) End Function Public Function ValidaCGC(CGC As String) As Boolean If CalculaCGC(Left(CGC, 12)) <> Mid(CGC, 13, 1) Then ValidaCGC = False Exit Function End If If CalculaCGC(Left(CGC, 13)) <> Mid(CGC, 14, 1) Then ValidaCGC = False Exit Function
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 258 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End If ValidaCGC = True End Function

2- Validar CPF Function calculacpf(CPF As String) As Boolean


'Esta rotina foi adaptada da revista Frum Access On Error GoTo Err_CPF Dim I As Integer Dim strcampo As String 'utilizada nos FOR... NEXT 'armazena do CPF que ser utilizada para o clculo

Dim strCaracter As String esquerda


Dim intNumero As Integer Dim intMais As Integer Dim lngSoma As Long base(intmais) Dim dblDivisao As Double Dim lngInteiro As Long Dim intResto As Integer Dim intDig1 As Integer Dim intDig2 As Integer Dim strConf As String lngSoma = 0 intNumero = 0 intMais = 0 strcampo = Left(CPF, 9) 'Inicia clculos do 1 dgito For I = 2 To 10

'armazena

os

dgitos

do

CPF

da

direita

para

'armazena o digito separado para clculo (uma a um) 'armazena o digito especfico multiplicado pela sua base 'armazena a soma dos dgitos multiplicados pela sua

'armazena a diviso dos dgitos * base por 11 'armazena inteiro da diviso 'armazena o resto 'armazena o 1 digito verificador 'armazena o 2 digito verificador 'armazena o digito verificador

strCaracter = Right(strcampo, I - 1) intNumero = Left(strCaracter, 1) intMais = intNumero * I lngSoma = lngSoma + intMais Next I dblDivisao = lngSoma / 11

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 259 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

lngInteiro = Int(dblDivisao) * 11 intResto = lngSoma - lngInteiro If intResto = 0 Or intResto = 1 Then intDig1 = 0 Else intDig1 = 11 - intResto End If strcampo = strcampo & intDig1 'concatena o CPF com o primeiro digito verificador lngSoma = 0 intNumero = 0 intMais = 0 'Inicia clculos do 2 dgito For I = 2 To 11 strCaracter = Right(strcampo, I - 1) intNumero = Left(strCaracter, 1) intMais = intNumero * I lngSoma = lngSoma + intMais Next I dblDivisao = lngSoma / 11 lngInteiro = Int(dblDivisao) * 11 intResto = lngSoma - lngInteiro If intResto = 0 Or intResto = 1 Then intDig2 = 0 Else intDig2 = 11 - intResto End If strConf = intDig1 & intDig2 'Caso o CPF esteja errado dispara a mensagem If strConf <> Right(CPF, 2) Then calculacpf = False Else calculacpf = True End If Exit Function Exit_CPF: Exit Function Err_CPF: MsgBox Error$ Resume Exit_CPF

End Function
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 260 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 261 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

21) DBGRID COM LISTBOX - PERSONALIZE O SEU DBGRID: CAIXA DE LISTAGEM, TOTALIZANDO POR COLUNAS E CONTADOR DE REGISTROS. (Dicas)
Personalizando e incrementando o DBGrid. Olhe bem para a figura 1.0 abaixo. No, no uma montagem o que voc esta vendo. Voc esta

realmente vendo um projeto usando o controle Dbgrid juntamente com alguns recursos que muitos pensavam que somente outros controles OCX mais poderosos poderiam usar. Na verdade usamos alguns truques para driblar as limitaes do DBGrid, mas que da para fazer voc mesmo vai ver com os seus prprios olhos. As dicas no so de minha autoria, mas adaptadas de alguns exemplos da prpria Apex e de outros garimpos pela Web.

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 262 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Interface Visual do Projeto.

A coisa mais simples do que parece, e, na verdade a quantidade de cdigo pequena. Para montar o formulrio acima descrito observe os seguintes passos:

1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmgrid. 2 - Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo : Tabela 1.0 - Objetos e propriedades do formulrio frmgrid --------------------------------------------------------------------------Objeto Form Propriedade Name Caption ListBox SSPanel Name Caption Name Data Name Configurao frmgrid "DBGrid Personalizado" lista "" PnlTotal data1
Pg. 263 de 269

---------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

DatabaseName RecordSource DbGrid Caption Name Column0 Column1 Column2 DataSource

Grid_List teste "DBGrid Personalizado" grid Aluno Curso Valor Data1

--------------------------------------------------------------------------

-------------------------------------------------------------------------Obs.: A base de dados (Grid_List) foi criada apenas para o exemplo acima e pode ser substituda a seu critrio. Foi utilizada uma tabela chamada teste com a seguinte estrutura: aluno, text, 50 curso, text, 30 valor, Currency Cdigo do Projeto. Declarao de variveis visveis em todo o formulrio.
Option Explicit Private numero_registros As Variant 'contador de registros Const colindex_lista = 1 'coluna onde ser mostrada a lista de itens

Evento Reposition do controle de dados


Private Sub Data1_Reposition() 'ao iniciar '-----------------------------atualiza o total no controle SSPanel--------If pnltotal.Caption = "" Then Soma_Colunas Grid, Data1, "valor", pnltotal, "##,##0.00" 'chama rotina de soma End If

'-----------------verifica se o contador esta vazio-------------------Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 264 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

If IsEmpty(numero_registros) Then numero_registros = Conta_Registros(Data1) 'conta os registros End If With Data1 If .Recordset.RecordCount Then numero_registros Else .Caption = " O arquivo esta vazio " End If End With End Sub Evento Validate do controle de dados
Private Sub Data1_Validate(Action As Integer, Save As Integer) 'dependendo da ao incrementa ou decrementa o contador de registros Select Case Action Case vbDataActionAddNew 'incluso numero_registros = numero_registros + 1 Case vbDataActionDelete 'excluso numero_registros = numero_registros - 1 End Select End Sub

'se h registros mostra a posio

.Caption = " Registro : " & (.Recordset.AbsolutePosition + 1) & " / " &

Carga do formulrio Private Sub Form_Load() 'formata o grid Grid.Columns(0).Width = 2500 'nome Grid.Columns(1).Width = 1550 'curso Grid.Columns(2).Width = 1000 'valor Grid.Columns(0).Alignment = 0 'alinha a esquerda Grid.Columns(1).Alignment = 0 Grid.Columns(2).Alignment = 1 'alinha 'enche a lista com os itens
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 265 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

With Lista .AddItem "Matemtica" .AddItem "Agronomia" .AddItem "Arquitetura" .AddItem "Fsica" .AddItem "Engenharia" .AddItem "Ingls" .AddItem "Qumica" .AddItem "Biologia" .AddItem "Proc. de Dados" .AddItem "Psicologia" .AddItem "Ed. Fsica" End With Data1.Refresh 'mostra o boto na coluna definida Grid.Columns(colindex_lista).Button = True 'define clula selecionada(curso) como negra Grid.MarqueeStyle = dbgHighlightCell End Sub Procedimento para Somar as colunas
Public Sub Soma_Colunas(dbg As DBGrid, dados As Data, nomecampo As String, _ pnl As SSPanel, num_formato As String) Dim soma As Single Dim rs As Recordset 'so para se previnir On Error GoTo trata_erro Set rs = dados.Recordset.clone 'rotina para somar a coluna escolhida(valor)
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 266 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

Do Until rs.EOF soma = soma + Val(rs(nomecampo)) rs.MoveNext Loop pnl = Format(soma, num_formato) Exit Sub trata_erro: MsgBox "Ocorreu um erro durante o processamento, verifique ! " End Sub

Evento AfterUpdate do Grid


Private Sub Grid_AfterUpdate() 'atualizar aps modificar/inserir dados Soma_Colunas Grid, Data1, "valor", pnltotal, "##,##0.00" End Sub Evento BeforeColEdit Private Sub Grid_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Integer, Cancel As Integer) If ColIndex = colindex_lista Then Cancel = True Grid_ButtonClick (ColIndex) End If End Sub 'fora a seleo da lista

Evento ButtonClick do Grid


Private Sub Grid_ButtonClick(ByVal ColIndex As Integer) Dim coluna As Column 'mostra a lista abaixo da coluna selecionada If ColIndex = colindex_lista Then Set coluna = Grid.Columns(ColIndex) With Lista .Left = Grid.Left + coluna.Left .Top = Grid.Top + Grid.RowTop(Grid.Row) + Grid.RowHeight .Width = coluna.Width + 15 .ListIndex = 0
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 267 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

.Visible = True .ZOrder 0 .SetFocus End With End If End Sub

Evento Scroll do Grid


Private Sub Grid_Scroll(Cancel As Integer) 'oculta a lista se rolar o grid Lista.Visible = False End Sub

Evento DblClick do ListBox


Private Sub Lista_DblClick() 'assume o valor clicado Lista_KeyPress vbKeyReturn End Sub

Evento KeyPress do Grid


Private Sub Lista_KeyPress(KeyAscii As Integer) 'verifica a tecla pressionada e dispara ao pertinente Select Case KeyAscii Case vbKeyReturn Grid.Columns(colindex_lista).Text = Lista.Text Lista.Visible = False Case vbKeyEscape Lista.Visible = False End Select End Sub

Evento LostFocus do ListBox


Private Sub Lista_LostFocus() 'oculta a lista ao perder foco Lista.Visible = False
Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva Pg. 268 de 269

Microsoft Visual Basic Base de Dados Escola Secundria de Emdio Navarro 2001/2002 Estruturas, Tratamento e Organizao de Dados

End Sub

Nuno Miguel Martins Barros Professor do Quadro de Nomeao Definitiva

Pg. 269 de 269