Curso de Visual Basic

download Curso de Visual Basic

of 187

description

manual de visual basic

Transcript of Curso de Visual Basic

Visual

Basic

( Verso 5 )

Curso Bsico (Bases de Dados)

Visual Basic Curso Bsico Carlos Eduardo Carvalho Lixa [email protected]

Formador: Carlos Eduardo Carvalho

Pg. 2 de 187

Visual Basic Curso Bsico

Curso Tecnolgico de Informtica

LFM Formao, Lda

Domnio de Tcnicas e Linguagens de Programao (TLP)

Formando: _______________________________________________________________ N: ______

Formador: Carlos Eduardo Carvalho

Pg. 3 de 187

Visual Basic Curso Bsico Indice:

1) 1) INTRODUO ( Conceitos Bsicos )..................................................................................71.1) BANCO DE DADOS ................................................................................................................7 1.2) TRABALHANDO COM TABELAS ......................................................................................9 1.3 - CRIANDO BANCO DE DADOS, TABELAS, NDICES, RELACIONAMENTOS E CHAVES PRIMRIAS. (DATA MANAGER) - .........................................................................11 1.4. RECORDSET: TABLE, DYNASETS, SNAPSHOTS.(DEFINIO, PRINCIPAIS MTODOS E EVENTOS RELACIONADOS)............................................................................17 1.5. DATA CONTROL. (DEFINIO, PRINCIPAIS MTODOS E EVENTOS RELACIONADOS).........................................................................................................................21 1.6. EVENTOS: UM NOVO ENFOQUE (EVENTOS: CONCEITOS, EXEMPLOS .)............24 1.7. O PODER DA SQL (A LINGUAGEM SQL : INTRODUO.).........................................25 1.8. USANDO EDIT, ADDNEW E UPDATE...(EDITANDO, INCLUINDO E ATUALIZANDO...) .......................................................................................................................26 1.9. VISUAL BASIC - DATAS E O ANO 2000.(COMO O VB INTERPRETA O ANO COM DOIS DGITOS.(DD/MM/YY) .....................................................................................................27 1.10. SQL : CRIANDO CONSULTAS PARAMETRIZADAS NO VISUAL BASIC. ..............29

2) TRABALHANDO COM SQL (Conceitos Bsicos ) ..........................................................322.1 Iniciando com a SQL................................................................................................................32 2.2 Criando tabelas via SQL...........................................................................................................33 2.3 ndices e Tabelas - Criar, Alterar e Excluir............................................................................34 2.4 Testando As Instrues Sql .....................................................................................................35

3) TRABALHANDO COM REDES ( Conceitos Bsicos )....................................................383.1 Introduo ................................................................................................................................38 3.2 Acesso aos Dados ......................................................................................................................38 3.3 Bloqueio de Registros................................................................................................................40

4 ) CONTROL DATA ( Projeto Comentado ).........................................................................42 4.1 Acesso a Base de Dados - Data Control............................................................................421) Definio do banco de dados e tabelas. ....................................................................................42 2) Desenhar a interface da aplicao com o usurio ....................................................................43 3) Implementar o cdigo da aplicao ..........................................................................................451-Cdigo para boto incluir dados:.................................................................................................................46 2-Cdigo do boto gravar dados:....................................................................................................................46 3-Cdigo do boto Cancelar a incluso de dados:..........................................................................................47 4-Cdigo para o boto Excluir dados:.............................................................................................................47 5-Cdigo para o boto Localizar dados:.........................................................................................................47 6-Cdigo do evento Reposition:......................................................................................................................48 7-Cdigo do evento Validate:.........................................................................................................................48 8-Cdigo para tratamento de erros .................................................................................................................49

5 ) D.A.O (Projeto comentado)................................................................................................50Estrutura da tabela. .......................................................................................................................50Formador: Carlos Eduardo Carvalho Pg. 4 de 187

Visual Basic Curso Bsico

Interface com o usurio .................................................................................................................50 Codigo da Aplicacao.......................................................................................................................52

6 ) SQL ....................................................................................................................................59Estrutura da tabela. .......................................................................................................................59 Interface com o usurio .................................................................................................................60 Codigo da Aplicacao ......................................................................................................................62

7 ) CRYSTAL REPORTS ( Projeto Comentado ) ..................................................................68Introduo:Gerando os seus relatrios com o Crystal Reports. .................................................68 Criando um novo relatrio. ...........................................................................................................68 Agrupando e ordenando registros. ...............................................................................................70 Inserindo ttulos e Legendas. .........................................................................................................70 Formatao de campos, campos especiais e desenho de linhas e caixas. ....................................70 Trabalhando com frmulas. ..........................................................................................................71 Determinando o estilo e inserindo uma figura em seu relatrio. ................................................72 Imprimindo o relatrio a partir de sua aplicao no Visual Basic. ...........................................73 Relatrio com dados de vrias tabelas e Seleo de registros .....................................................74

8 ) ACESSO A BASE DE DADOS PADRO XBASE(DBASE/CLIPPER) ........................90Acesso utilizando o Controle de Dados Vinculados. (Data Control) ..........................................90 Acesso utilizando a DAO. (Data Access Object) ..........................................................................94

9 ) SETUP WIZARD .............................................................................................................103 10 ) DBGRID ........................................................................................................................110Introduo.....................................................................................................................................110 Utilizao e Configurao. ...........................................................................................................110 Controle Financeiro - Definio de tabelas. ...............................................................................113 Controle Financeiro - Interface com o usurio. .........................................................................115 Controle Financeiro - Cdigo do projeto. ..................................................................................119 DbGrid - Dicas e Truques.............................................................................................................124

11 ) DBLIST ..........................................................................................................................125 12 ) REDES (Projeto comentado) ......................................................................................130- Acesso Exclusivo/Compartilhado..............................................................................................130 - Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly..............................................137

13 ) ERROS ...........................................................................................................................142Introduo. ...................................................................................................................................142 Interceptando erros. .....................................................................................................................142 Identificando o Tipo de Erro. ......................................................................................................143 Finalizando um tratamento de erros. .........................................................................................147 Principais erros relacionados a Banco de dados.........................................................................148

14 ) OLE ................................................................................................................................150Introduo. ...................................................................................................................................150Formador: Carlos Eduardo Carvalho Pg. 5 de 187

Visual Basic Curso Bsico

Instruo do WordBasic...............................................................................................................152 Instruao do VBA 97.....................................................................................................................152 Usando Automao OLE com o Word - Exemplo Prtico. .......................................................152 Usando Automao OLE com o Excel - Exemplo Prtico..........................................................160

15 ) GRFICOS NO VB .......................................................................................................162Introduo. ...................................................................................................................................162 Utilizao e Configurao. ...........................................................................................................163

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

Formador: Carlos Eduardo Carvalho

Pg. 6 de 187

Visual Basic Curso Bsico

1) INTRODUO ( Conceitos Bsicos )

1.1) BANCO DE DADOSPodemos 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 . 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.

Formador: Carlos Eduardo Carvalho

Pg. 7 de 187

Visual Basic Curso Bsico

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 Database TableDef QueryDef Recordset Field Index Relation 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 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

Formador: Carlos Eduardo Carvalho

Pg. 8 de 187

Visual Basic Curso Bsico

1.2) TRABALHANDO COM TABELASAs 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. 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 podeFormador: Carlos Eduardo Carvalho Pg. 9 de 187

Visual Basic Curso Bsico 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 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. (*) - 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.

Formador: Carlos Eduardo Carvalho

Pg. 10 de 187

Visual Basic Curso Bsico

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: 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.Formador: Carlos Eduardo Carvalho Pg. 11 de 187

Visual Basic Curso Bsico 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:

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.

Formador: Carlos Eduardo Carvalho

Pg. 12 de 187

Visual Basic Curso Bsico 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, clicar no boto Indexes, e, seguir os passos indicados:

1. 2. 3. 4.

Informar o nome do ndice na caixa de texto Index Name. Definir as propriedades do ndice, marcando as caixas de verificao apropriadas. Selecionar os campos componentes na caixa de listagem apropriada. 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:

Formador: Carlos Eduardo Carvalho

Pg. 13 de 187

Visual Basic Curso Bsico

Formador: Carlos Eduardo Carvalho

Pg. 14 de 187

Visual Basic Curso Bsico

Formador: Carlos Eduardo Carvalho

Pg. 15 de 187

Visual Basic Curso Bsico

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

Formador: Carlos Eduardo Carvalho

Pg. 16 de 187

Visual Basic Curso Bsico

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

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 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. Desvantagens do uso de Tabelas No se pode utilizar filtros para restringir os registros usando determinados critrios.Formador: Carlos Eduardo Carvalho Pg. 17 de 187

Visual Basic Curso Bsico O comando Seek s encontra o primeiro registro que atende a seus critrios.

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

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.

Formador: Carlos Eduardo Carvalho

Pg. 18 de 187

Visual Basic Curso Bsico 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. 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:

Formador: Carlos Eduardo Carvalho

Pg. 19 de 187

Visual Basic Curso Bsico 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. 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 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.Formador: Carlos Eduardo Carvalho Pg. 20 de 187

Visual Basic Curso Bsico

1.5. DATA CONTROL. (DEFINIO, PRINCIPAIS MTODOS E 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

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

Formador: Carlos Eduardo Carvalho

Pg. 21 de 187

Visual Basic Curso Bsico 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 . 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" 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. 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 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.AddNewFormador: Carlos Eduardo Carvalho Pg. 22 de 187

'path/nome do arquivo 'fonte dos dados(tabela clientes) 'tipo de recordset(0-tabela) 'implementa as alteraes

Visual Basic Curso Bsico 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 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

Formador: Carlos Eduardo Carvalho

Pg. 23 de 187

Visual Basic Curso Bsico 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. 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. 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.Formador: Carlos Eduardo Carvalho Pg. 24 de 187

Visual Basic Curso Bsico 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.)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") 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 Funo Obtm um grupo de registros e insere os registros em um dynaset ou em umaPg. 25 de 187

Formador: Carlos Eduardo Carvalho

Visual Basic Curso Bsico tabela UPDATE 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 TRANSFORM cada coluna DELETE FROM Remove registros de uma tabela INSERT INTO Acrescenta um grupo de registros a uma tabela. 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' 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, ATUALIZANDO...)

ADDNEW

E

UPDATE...(EDITANDO,

INCLUINDO

E

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.

Formador: Carlos Eduardo Carvalho

Pg. 26 de 187

Visual Basic Curso Bsico - 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. 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. 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.Formador: Carlos Eduardo Carvalho Pg. 27 de 187

Visual Basic Curso Bsico 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 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 Regra Todos os anos com dois dgitos so automaticamente Aplicaes de 16 bits: Access 2.0, VB 3.0 considerados como do sculo 20 Todos os anos com dois dgitos so do sculo corrente VB 4.0 16 bits (definido pelo relgio do sistema). Access 95 (com a nova biblioteca), VB 4.0Todos os anos com dois dgitos entre 00 e 29 so do sculo 32 bits, VB5, Access 97 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;Formador: Carlos Eduardo Carvalho Pg. 28 de 187

Visual Basic Curso Bsico 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 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.Formador: Carlos Eduardo Carvalho Pg. 29 de 187

Visual Basic Curso Bsico 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 Dim set set db as Database dyn as Recordset db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)

Ou elimin-la : db.Querydefs.Delete "Lista_alunos" Para tirar maior proveito das QueryDefs costuma-se cri-las de forma que aceitem parmetros, para isto usamos a palavra-chave PARAMETERS para passar um ou mais parmetros para as consultas SQL. Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma determinada srie, para isso criamos a consulta e passamos o parmetro da srie desejada: Dim db as Database Dim qd as QueryDef Dim dyn as Recordset Dim Sql as String set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie = pSerie " sql=sql & " ORDER BY nome " set qd=db.CreateQueryDef("Lista_alunos", Sql ) qd.Parameters("pSerie")= "1" set dyn= qd.OpenRecordset() 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:Formador: Carlos Eduardo Carvalho Pg. 30 de 187

Visual Basic Curso Bsico 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.

Formador: Carlos Eduardo Carvalho

Pg. 31 de 187

Visual Basic Curso Bsico

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

Formador: Carlos Eduardo Carvalho

Pg. 32 de 187

Visual Basic Curso Bsico 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. 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 INSERT UPDATE DELETE - Seleciona um conjunto de registros de uma ou mais tabelas usando um critrio especfico. - Adiciona dados a uma tabela. - Atualiza os dados de uma tabela segundo critrios especficos. - 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 TblCursos TblNotas TblProfessor codaluno nome endereco codaluno telefone codcurso codprofessor nascimento codcurso nota nome nomepai nomecurso ano endereco nomemae codprofessor bimestre telefone observacao Observacao Periodo serie numero Obs : Codaluno , Codcurso, CodProfessor so chaves primrias de suas respectivas tabelas. Para exercitar iremos definir os relacionamentos entre as tabelas da seguinte forma (figura 1.0 abaixo:

figura 1.0

Formador: Carlos Eduardo Carvalho

Pg. 33 de 187

Visual Basic Curso Bsico A tabela tblprofessor pode ser definida como a seguir (Access SQL) : CREATE TABLE tblprofessor (codprofessor INTEGER CONSTRAINT nome TEXT (50), endereco TEXT (50), telefone TEXT (15) ); primarykey PRIMARY KEY,

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 SHORT LONG LONGTEXT LONGBINARY TEXT A tabela TblCursos ser criada pela instruo: CREATE TABLE tblcursos (codcurso INTEGER CONSTRAINT primarykey PRIMARY KEY, nomecurso TEXT (15), codprofessor INTEGER CONSTRAINT tblprofessorFK REFERENCES tblprofessor); A clusula CONSTRAINT utilizada para definir uma chave primria e uma chave externa. Note que existe uma relao de um para muitos entre a tabela TblProfessor e a tabela TblCursos, sendo que a coluna codprofessor da tabela TblCursos, uma chave estrangeira (Foreign Key - FK ) Tipos de dados do JET YES/NO NUMERIC - BYTE COUNTER - Contador CURRENCY - Moeda DATE/TIME NUMERIC - SINGLE NUMERIC - DOUBLE NUMERIC - INTEGER NUMERIC - LONG MEMO OLE OBJECTS TEXT

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 TABLEFormador: Carlos Eduardo Carvalho Pg. 34 de 187

Visual Basic Curso Bsico 1- Na incluso de um campo temos que especificar o NOME, TIPO e TAMANHO do campo, e usar a clusula ADD COLUMN Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos: ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50) 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

2.4 Testando As Instrues SqlPara 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.Formador: Carlos Eduardo Carvalho Pg. 35 de 187

Visual Basic Curso Bsico 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: Dim db as Database Dim qd as QueryDef set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER BY nome" Uma vez criada a QueryDef podemos execut-la e manipul-la como um recordset: Dim Dim set set db as Database dyn as Recordset db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb") dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)

Ou elimin-la : db.Querydefs.Delete "Lista_alunos" Para tirar maior proveito das QueryDefs costuma-se cri-las de forma que aceitem parmetros, para isto usamos a palavra-chave PARAMETERS para passar um ou mais parmetros para as consultas SQL. Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma determinada srie, para isso criamos a consulta e passamos o parmetro da srie desejada : Dim db as Database Dim qd as QueryDef Dim dyn as Recordset Dim Sql as String set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb") sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie = pSerie " sql=sql & " ORDER BY nome " set qd=db.CreateQueryDef("Lista_alunos", Sql ) qd.Parameters("pSerie")= "1" set dyn= qd.OpenRecordset() 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:Formador: Carlos Eduardo Carvalho Pg. 36 de 187

Visual Basic Curso Bsico 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.

Formador: Carlos Eduardo Carvalho

Pg. 37 de 187

Visual Basic Curso Bsico

3) TRABALHANDO COM REDES ( Conceitos Bsicos ) 3.1 IntroduoMesmo 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 !

3.2 Acesso aos DadosO 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]])Formador: Carlos Eduardo Carvalho Pg. 38 de 187

Visual Basic Curso Bsico 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) Os usurios podem visualizar os dados mas no podem atualizar as informaes da tabela, nem incluir novos registros, at voc fech-la.(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) 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", DbOpenDynaset, dbAppendOnly) 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. 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 dbReadOnlyFormador: Carlos Eduardo Carvalho Pg. 39 de 187

dbDenyWrite

dbReadOnly

Visual Basic Curso Bsico

3.3 Bloqueio de RegistrosSe 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. 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.

Formador: Carlos Eduardo Carvalho

Pg. 40 de 187

Visual Basic Curso Bsico 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. 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 Impossvel atualizar; atualmente bloqueado pelo usurio x na mquina y. Ocorre quando voc tenta bloquear uma pgina que j est bloqueada por outro usurio.

Erro 3260

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

Formador: Carlos Eduardo Carvalho

Pg. 41 de 187

Visual Basic Curso Bsico

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. 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 TELEFONEFormador: Carlos Eduardo Carvalho

Tipo de Dados LONG INTEGER(*) CARACTER CARACTER CARACTER CARACTER CARACTER CARACTER

Tamanho 03 30 30 30 08 02 11Pg. 42 de 187

Visual Basic Curso Bsico

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

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 ---------------------------------------------------------------------------------------------------------------Form Name Clientes Caption "Cadastro de Clientes" ---------------------------------------------------------------------------------------------------------------Data Name dtaCli Caption "Total de clientes:"Formador: Carlos Eduardo Carvalho Pg. 43 de 187

Visual Basic Curso Bsico Connect Access Databasename "C:\CONTROLE\CONTROLE.MDB"(*) RecordSetType 0-Table RecordSource "Clientes" ---------------------------------------------------------------------------------------------------------------label Name label1 Caption "Cdigo" Autosize True ---------------------------------------------------------------------------------------------------------------label Name label2 Caption "Nome" Autosize True ---------------------------------------------------------------------------------------------------------------label Name label3 Caption "Endereo" Autosize True ---------------------------------------------