Professional Documents
Culture Documents
Curso Bsico
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 2
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 v-
rios 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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 3
Indice:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 4
Codigo da Aplicacao.......................................................................................................................... 49
6 ) SQL......................................................................................................................................56
Estrutura da tabela.............................................................................................................................. 56
Interface com o usurio...................................................................................................................... 57
Codigo da Aplicacao.......................................................................................................................... 59
7 ) CRYSTAL REPORTS ( Projeto Comentado ) ...................................................................65
Introduo:Gerando os seus relatrios com o Crystal Reports. ......................................................... 65
Criando um novo relatrio. ................................................................................................................ 65
Agrupando e ordenando registros. ..................................................................................................... 67
Inserindo ttulos e Legendas. ............................................................................................................. 67
Formatao de campos, campos especiais e desenho de linhas e caixas. .......................................... 67
Trabalhando com frmulas. ............................................................................................................... 68
Determinando o estilo e inserindo uma figura em seu relatrio. ....................................................... 69
Imprimindo o relatrio a partir de sua aplicao no Visual Basic. .................................................... 70
Relatrio com dados de vrias tabelas e Seleo de registros ........................................................... 71
8 ) ACESSO A BASE DE DADOS PADRO XBASE(DBASE/CLIPPER) .........................81
Acesso utilizando o Controle de Dados Vinculados. (Data Control)................................................. 81
Acesso utilizando a DAO. (Data Access Object) .............................................................................. 85
9 ) SETUP WIZARD................................................................................................................92
10 ) DBGRID............................................................................................................................99
Introduo .......................................................................................................................................... 99
Utilizao e Configurao.................................................................................................................. 99
Controle Financeiro - Definio de tabelas...................................................................................... 102
Controle Financeiro - Interface com o usurio. ............................................................................... 104
Controle Financeiro - Cdigo do projeto. ........................................................................................ 108
DbGrid - Dicas e Truques ................................................................................................................ 113
11 ) DBLIST...........................................................................................................................114
12 ) REDES (Projeto comentado) .........................................................................................119
- Acesso Exclusivo/Compartilhado.................................................................................................. 119
- Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly ................................................... 121
13 ) ERROS ............................................................................................................................126
Introduo. ....................................................................................................................................... 126
Interceptando erros........................................................................................................................... 126
Identificando o Tipo de Erro............................................................................................................ 127
Finalizando um tratamento de erros................................................................................................. 130
Principais erros relacionados a Banco de dados. ............................................................................. 131
14 ) OLE .................................................................................................................................133
Introduo. ....................................................................................................................................... 133
Instruo do WordBasic................................................................................................................ 135
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 5
Instruao do VBA 97 ..................................................................................................................... 135
Usando Automao OLE com o Word - Exemplo Prtico. ............................................................. 135
Usando Automao OLE com o Excel - Exemplo Prtico. ............................................................. 141
15 ) GRFICOS NO VB........................................................................................................143
Introduo. ....................................................................................................................................... 143
Utilizao e Configurao................................................................................................................ 144
16 ) OPES DE BUSCA RPIDA ( Dicas )......................................................................150
17 ) HOT SPOTS NO VISUAL BASIC ( Dicas ) .................................................................152
18 ) FORMULRIOS COM SUBFORMULRIOS NO VB ? (Dicas)...............................154
19) CRIANDO UM SCREEN SAVER NO VB (Dicas)........................................................158
20) ROTINA PARA VALIDAR CPF/CGC NO VISUAL BASIC (Dicas)...........................160
21) DBGRID COM LISTBOX - PERSONALIZE O SEU DBGRID: CAIXA DE
LISTAGEM, TOTALIZANDO POR COLUNAS E CONTADOR DE REGISTROS. (Dicas)
................................................................................................................................................163
Personalizando e incrementando o DBGrid...........................................................................163
Interface Visual do Projeto.....................................................................................................163
Cdigo do Projeto...................................................................................................................164
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 6
1) INTRODUO ( Conceitos Bsicos )
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 colu-
nas, as quais chamamos campos..
O Gerenciador relacional de bancos de dados do Visual Basic e do Access o Microsoft Jet, ele per-
tence 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 co-
muns so:
Todas as tabelas, ndices, consultas, relatrios e cdigo so armazenados num nico arquivo
.MDB
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:
Obs:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 7
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.
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 ta-
bela abaixo relaciona esses objetos e descreve resumidamente suas funes:
Objeto Descrio
DBengine O objeto que referencia o mecanismo de bancos de dados do Microsoft Jet
Workspace Um rea na qual o usurio pode trabalhar com os bancos de dados
Database Uma coleo de informaes organizadas em tabelas, juntamente com informaes a
respeito de ndices e relaes sobre as tabelas
TableDef Uma definio da estrutura fsica de uma tabela de dados
QueryDef Uma consulta armazenada de SQL das informaes contidas no banco de dados.
Recordset Uma coleo de registros de informaes sobre um nico tpico
Field Uma nica unidade de informaes em um banco de dados
Index Uma lista ordenada de registros em um recordset, baseada em um campo chave
definido
Relation Informaes armazenadas a respeito do relacionamento entre duas tabelas
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 8
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 numri-
cos 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 armaze-
nar, 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:
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 bran-
co, 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.
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 relacio-
nar as duas tabelas por meio de um campo cdigo do cliente comum s duas tabelas.
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 Assis-
tente de Tabela.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 9
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.
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 descri-
o opcional.
1 - Aps terminar de definir os campos clique no boto "Salvar" na barra de ferramentas ou esco-
lha o comando Salvar no menu Arquivo para salvar a estrutura da tabela. O Microsoft Access,
ento, envia uma mensagem pedindo para nomear a tabela.
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 Mi-
crosoft Access pode criar um campo que designa um nmero nico para cada registro.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 10
dos:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 11
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.
a) Editar as propriedades de qualquer campo selecionado, neste caso, os dados existentes sero
perdidos.
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 alte-
rar as propriedades desejadas para o campo editado.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 12
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 relaciona-
mento.
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:
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 13
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 14
A abertura de um banco de dados e feita com o uso do mtodo Opendatabase do objeto Workspace,
mostrado no cdigo abaixo :
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 ins-
truo 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, va-
rivel 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 da-
dos. 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 dis-
ponveis:
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.
Como todos os dados de um banco de dados esto armazenados em tabelas, acessar tabelas signifi-
ca acessar diretamente os dados de um arquivo.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 15
O comando Seek s encontra o primeiro registro que atende a seus critrios.
Informe a constante DbOpenTable para identificar o tipo de recordset criado. Veja o cdigo abaixo:
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.
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 exem-
plo abaixo:
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.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 16
Para os snapshots, navegao pelos registros e a criao de recordsets pode ser mais rpi-
da do que nos dynasets.
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 e-
xemplo abaixo:
Os mtodos de movimentao permitem a passagem de um registro para outro no interior dos re-
cordsets, 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 li-
mites do recordset ocorrer um erro.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 17
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)
rs.findfirst criterio
if rs.nomatch
msgbox "Cliente no localizado. "
else
msgbox rs.Fields("nome") & " localizado no arquivo. "
endif
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 limi-
taes:
S pode ser executado sobre uma tabela; no possvel us-lo com um dynaset ou snap-
shot.
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
rs.index = "Nome"
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 18
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 traba-
lhar. 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 for-
nece acesso aos seus dados.
Fig-1
Fig-2
Fig-3
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 19
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 da-
dos, 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 : DatabaseNa-
me=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 pa-
dro 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:
Para contornar a ausncia de funes para excluir e alterar registros podemos acrescentar as mes-
mas 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 bo-
tes de comando de um formulrio de entrada de dados:
data1.Recordset.AddNew
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 20
data1.Recordset.Delete
data1.Recordset.MoveLast
Observe que no foi necessrio utilizar o comando Update, pois as atualizaes so feitas automati-
camente pelo controle de dados quando do deslocamento para um novo registro ou ao fechar o for-
mulrio 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:
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 contro-
le Data, neste momento o primeiro registro do recordset torna-se o registro corrente e o evento Repo-
sition gerado.
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 con-
troles vinculados os novos valores dos campos
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 21
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 rapida-
mente 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 pro-
grama.
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 progra-
mas 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 usu-
rio 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 : pres-
sionar 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 pro-
gramadas. Existem vrias categorias de eventos, entre elas podemos citar:
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 combina-
o> 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 Chan-
ge, 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 quan-
do uma aplicao se inicia.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 22
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 asso-
ciados que podemos utilizar para executar rotinas apropriadas ao contexto. Alm disso even-
tos podem disparar outros eventos.
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.
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
Dim db as Database
Set db=Workspaces(0).Opendatabase("c:\base.mdb")
db.execute "UPDATE tabela SET valor=valor*1.10"
db.close
Instruo Funo
Obtm um grupo de registros e insere os registros em um dynaset ou em uma tabe-
SELECT
la
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 23
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.
2) Seleciona todos os campos da tabela Empregados. Note o uso parmetro (*) indicando todos os
campos da tabela indicada.
3) Conta o nmero de registros que tm uma entrada no campo "Cdigo postal" e coloca o ttulo Con-
tagem no topo da coluna.
4) Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja Perei-
ra.
5) Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes come-
am pela letra S.
SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*'
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.
O recordset correspondente representa o nome do objeto Recordset atualizvel que contm o regis-
tro 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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 24
o objeto de Banco de dados relacionado, seu registro editado descartado sem aviso algum.
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 insta-
llable ISAM.(Dbase,Fox,...)
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.
O banco de dados ou recordset foram abertos para uso exclusivo por outro usurio.
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 imediata-
mente 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.
"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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 25
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: Vi-
sual 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.
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 respon-
svel 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 imple-
menta 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.
Meu Deus, que confuso !!!. Vamos tentar por as coisas nos seus lugares.
Aplicativo Regra
Todos os anos com dois dgitos so automaticamente con-
Aplicaes de 16 bits: Access 2.0, VB 3.0
siderados 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.0 Todos os anos com dois dgitos entre 00 e 29 so do scu-
32 bits, VB5, Access 97 lo 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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 26
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:
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 ins-
truo 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 27
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.
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 direta-
mente 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"
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 = pSe-
rie "
sql=sql & " ORDER BY nome "
set qd=db.CreateQueryDef("Lista_alunos", Sql )
qd.Parameters("pSerie")= "1"
set dyn= qd.OpenRecordset()
Mtodos de QueryDef
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 )
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 28
qd.Execute
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 29
2) TRABALHANDO COM SQL (Conceitos Bsicos )
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 rela-
cionais.
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 rela-
cionais e praticamente todos os produtos de bancos de dados relacionais que esto no mercado su-
portam 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 traba-
lhando a nvel de desktop.
Seus projetos tambm ficaro mais rpidos,pois geralmente a SQL e mais rpida
que o mtodo procedural via DAO.
A portabilidade sua aplicao ser maior visto que a SQL aceita pelos princi-
pais bancos de dados relacionais (Oracle,Sybase,etc.).
Creio que estes motivos j so suficientes para voc dar uma olhada no que a SQL pode fazer por
voc e por seu cdigo.
Se voc tem uma cpia do Access, sua incurso no mundo SQL ser facilitada, pois o Access prati-
camente 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 progra-
mar com SQL.
Estas linguagens ditas da terceira gerao, so caracterizadas por comandos que dizem ao compu-
tador exatamente o que fazer em estruturas sequenciais executadas passo a passo. So chamadas
de linguagens procedurais.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 30
A SQL,por outro lado, caracterizada por ser uma linguagem declarativa, ou seja, ela diz ao compu-
tador o que quer que ele faa, sem se preocupar de que forma o trabalho ser realizado, o que impor-
ta 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:
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.
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
figura 1.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 31
A tabela tblprofessor pode ser definida como a seguir (Access SQL) :
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 par-
tes: o nome do campo e o tipo de dados os quais so separados por um espao entre si.
Para criar a tabela no VB execute a instruo CREATE TABLE passando-a como parmetro do m-
todo 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:
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 )
EXCLUINDO TABELAS
Para excluir uma tabela via SQL usamos a instruo DROP TABLE nome da tabela
ALTERANDO TABELAS
Para alterar uma tabela , adicionando ou excluindo um campo da tabela, usamos a instruo: ALTER
TABLE
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 32
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:
2- Na excluso de um campo basta especificar o nome do campo e usar a clusula DROP COLUMN
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:
A instruo abaixo cria um ndice chamado series, usando os campos serie e periodo da tabela tbla-
lunos, sendo que serie ser usado na ordem ASCENDENTE e periodo na ordem DESCENDENTE.
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:
Para criar e testar todas essas instrues SQL voc pode codific-las direto no Visual Basic e execu-
tar o cdigo para ver o resultado, para isto voce dever usar o mtodo Execute (ver a seguir) do obje-
to DataBase(Veja artigo), mas voc pode usar os seguintes meios:
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.
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 ins-
truo 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 33
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 obje-
tos 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 direta-
mente 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"
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 = pSe-
rie "
sql=sql & " ORDER BY nome "
set qd=db.CreateQueryDef("Lista_alunos", Sql )
qd.Parameters("pSerie")= "1"
set dyn= qd.OpenRecordset()
Mtodos de QueryDef
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 consul-
ta.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 34
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 35
3) TRABALHANDO COM REDES ( Conceitos Bsicos )
3.1 Introduo
Mesmo que voc no desenvolva sistemas para um ambiente de rede, precisa saber alguns concei-
tos 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 pgi-
nas 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:
Portanto se voc usa a seguinte sintaxe para abrir um banco de dados do seu sistema:
O seu arquivo estar sendo aberto no modo compartilhado. At aqui tudo bem !
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 utili-
zado.(Isto inclui todas as suas tabelas e consultas.)
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:
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]])
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 36
Se voc tentar abrir qualquer tabela com as restrices acima mencionadas e um outro usurio j esti-
ver 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 prepa-
rado para interceptar o erro gerado.
- Acesso Exclusivo/Compartilhado.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 37
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 re-
gistro 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 exa-
tamente otamanho de 2048 bytes.
O jet trabalha ento com dois mtodos de bloqueios : o pessimista e o otimista. Vejamos cada um
deles:
Executa o bloqueio da pgina que contm o registro no momento que sua aplicao executar o mto-
do 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 ins-
tantes 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 regis-
tros. Vejamos:
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 impor-
tantes e deles voc deve se proteger, vejamos :
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 38
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.
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.
Dim rs as Recordset
rs.LockEdits = True
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 39
4 ) CONTROL DATA ( Projeto Comentado )
Projeto inteiramente comentado utilizando os controles vinculados, seus mtodos, eventos e proprie-
dades. Aprenda a Criar Tabelas, ndices, Chaves Primrias, Incluir, Alterar, Excluir, Validar e Locali-
zar registros. Construa uma aplicao com poucas linhas de cdigo. Consideraes sobre o uso do
Data Control e comparao com a DAO e SQL.
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 dupli-
cidade 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 geren-
ciar as informaes
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, jun-
tos, 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 ca-
dastrar.
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 da-
dos 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 40
(*)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, Requi-
red.
Isto assegura que teremos uma chave nica para cada cliente cadastrado e nos fornece um ndice
que agiliza no processo de localizao das informaes.
figura 1.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 41
Caption "Total de clientes:"
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
----------------------------------------------------------------------------------------------------------------
label Name label4
Caption "Cidade"
Autosize True
----------------------------------------------------------------------------------------------------------------
label Name label5
Caption "UF"
Autosize True
----------------------------------------------------------------------------------------------------------------
label Name label6
Caption "Cep"
Autosize True
----------------------------------------------------------------------------------------------------------------
label Name label7
Caption "Telefone"
Autosize True
----------------------------------------------------------------------------------------------------------------
TextBox Name codigo
DataField "Codigo"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name nome
DataField "Nome"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name endereco
DataField "Endereco"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name cidade
DataField "cidade"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name uf
DataField "UF"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name cep
DataField "Cep"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
TextBox Name telefone
DataField "Telefone"
DataSource dtaCli
----------------------------------------------------------------------------------------------------------------
CommandButton Name incluir
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 42
Caption "&Incluir"
----------------------------------------------------------------------------------------------------------------
CommandButton Name excluir
Caption "&Excluir"
----------------------------------------------------------------------------------------------------------------
CommandButton Name localizar
Caption "&Localizar"
----------------------------------------------------------------------------------------------------------------
CommandButton Name gravar
Caption "&Gravar"
----------------------------------------------------------------------------------------------------------------
CommandButton Name sair
Caption "&Sair"
----------------------------------------------------------------------------------------------------------------
(*) O arquivo Controle.mdb deve estar no diretrio CONTROLE.
Cdigo Da Aplicao
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:
4- O RecordSource poder ser uma tabela ou uma instruo SQL, no seu caso, a tabela Clientes do
banco de dados Controle.mdb.
Por isso criamos o ndice com o campo cdigo, para utilizar com o mtodo Seek do Recordset Tabe-
la. 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 proprieda-
des discutidas acima da seguinte forma:
Sub Form_load
dtacli.Databasename="C:\Controle\Controle.mdb"
dtacli.Recordsource="Clientes"
dtacli.RecordSetType= 0
End Sub
Caixas de Texto(TextBox)
Agora para cada Textbox voce deve configurar as propriedades como segue:
2- A propriedade DataField de cada TextBox deve ser vinculada ao respectivo campo da tabela Clien-
tes. (Selecione na lista de campos).
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 43
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.
A seguir voc pode se referir ao seu Recordset usando a varivel objeto.(No esquea de defin-la
previamente.)
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 44
sair(4).Caption = "&Sair"
localizar.Enabled = True
End Sub
Neste cdigo verificamos se o nome do boto esta como Cancelar, em caso positivo, cancelamos
qualquer atualizao pendente atravs do metdo CancelUpdate.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 45
5-Cdigo para o boto Localizar dados:
marcador = dtacli.Recordset.Bookmark
dtacli.Recordset.Index = "codigo" 'recordset do tipo Table !!!
Para a rotina de localizao definimos a posio atual do registro ativo usando a propriedade book-
mark
Definimos o ndice ativo (codigo que foi criando anteriormente Solicitamos o cdigo do cliente, arma-
zenando 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 retor-
mamos 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), informan-
do ao usurio e posiciona o ponteiro de registro na posio anterior a busca.
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 contro-
le 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 46
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 '7
Save = False
End Select
End If
End Sub
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:
Case Else
'MsgBox "Erro em : " & Error$(dataerr) 'para mostrar o erro.
response = vbDataErrcontinue 'ou vbdataErrdisplay
End Select
End Sub
A rotina acima utilizado para interceptar erros que ocorrem quando nenhum cdigo est sendo exe-
cutado.
Estes erros podem ocorrer quando a carga do formulrio ainda no estiver completa.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 47
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.
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 Tipo de Dados Tamanho do Campo
---------------------------------------------------------
nome Caracter 30
cgc Caracter 18
endereco Caracter 30
cep Caracter 09
uf Caracter 02
ddd Caracter 04
fone Caracter 10
ramal Caracter 04
fax Caracter 10
contato Caracter 20
produto Caracter 20
---------------------------------------------------------
1-Os campos Nome, CGC e Endereo no podem ser Nulos, ou seja so de preenchimento obriga-
trio.
2-Defina um ndice para o campo nome desativando as opes: Unique, Primary index. e ativando a
opo Requerid
Fig-1
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 48
Para montar o formulrio acima descrito observe os seguintes passos:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 49
Caption "&Exclui"
--------------------------------------------------------------------------
CommandButton Name Grava
Caption "&Grava"
--------------------------------------------------------------------------
CommandButton Name Cancela
Caption "&Cancela"
--------------------------------------------------------------------------
Frame Caption "Telefone/Contato/Produto"
Name Frame2
--------------------------------------------------------------------------
(*)CommandButton Name Command1(0)
Caption "|<"
--------------------------------------------------------------------------
CommandButton Name Command1(1)
Caption "<"
--------------------------------------------------------------------------
CommandButton Name Command1(2)
Caption ">"
---------------------------------------------------------------------------
CommandButton Name Command1(3)
Caption ">|"
---------------------------------------------------------------------------
(**)Label Caption **
AutoSize **
---------------------------------------------------------------------------
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de
um ndice identificador.
Codigo da Aplicacao.
dbname = "\controle.mdb"
Set base = DBEngine.Workspaces(0).OpenDatabase(app.path & dbname)
Set tabela = base.OpenRecordset("fornecedores", dbOpenTable)
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 50
altera.Enabled = False
exclui.Enabled = False
grava.Enabled = False
cancela.Enabled = False
End If
Exit Sub
loaderror:
MsgBox Err.Description, vbCritical
End
End Sub
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 51
End If
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 52
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 53
If Not IsNull(tabela![fone]) Then
fone = tabela![fone]
Else
fone = ""
End If
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
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 54
11-Rotina associada a caixa de texto vinculada ao campo Ramal .
marca = tabela.Bookmark
tabela.Index = "nome"
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 cha-
mando a funo Calculacgc e passando como parmetro o nmero do CGC digitado da seguinte
forma:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 55
validacgc=True
End Function
dim i as integer
dim prod as integer
dim mult as integer
dim digito as integer
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
calculacgc=trim(str(digito))
End Function
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 56
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.
---------------------------------------------------------
nome do campo Tipo de Dados Tamanho do Campo
---------------------------------------------------------
sobrenome Caracter 30
nome Caracter 30
telefone Caracter 13
nascimento date --
endereco Caracter 30
cep Caracter 10
uf Caracter 02
e_mail Caracter 80
pais Caracter 20
obs Caracter 100
foto Caracter 50
---------------------------------------------------------
1-Os campos Sobrenome, nome e nascimento no podem ser Nulos, ou seja so de preenchimento
obrigatrio.
2-Defina um ndice para o campo sobrenome desativando as opes: Unique, Primary index. e ati-
vando a opo Requerid
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 :
2-Consulta Atualizao:
3-Consulta Excluso:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 57
Temos abaixo (figura 1.0) a tela principal de nossa aplicao em tempo de projeto:
-Image
-CommomDialog
-CrystalReport
-ComboBox
-Picture
(Figura 1.0)
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 58
ComboBox Name cmbestados
---------------------------------------------------------------------------
TextBox Name e_mail
MaxLength 80
---------------------------------------------------------------------------
ComboBox Name cmbpaises
---------------------------------------------------------------------------
TextBox Name foto
MaxLength 80
---------------------------------------------------------------------------
TextBox Name obs
Multiline true
---------------------------------------------------------------------------
CommandButton Name Incluir
Caption "&Incluir"
--------------------------------------------------------------------------
CommandButton Name Alterar
Caption "&Alterar"
--------------------------------------------------------------------------
CommandButton Name Excluir
Caption "&Excluir"
--------------------------------------------------------------------------
CommandButton Name Imprime
Caption "Im&prime"
--------------------------------------------------------------------------
CommandButton(#) Name Gravar
Caption "&Gravar"
--------------------------------------------------------------------------
CommandButton(#) Name Cancelar
Caption "&Cancelar"
--------------------------------------------------------------------------
CommonDialog Name CommonDialog1
--------------------------------------------------------------------------
CrystalReport Name CrystalReport1
--------------------------------------------------------------------------
Picture Name Picture1
Visible True
BackColor azul
--------------------------------------------------------------------------
Picture Name Picture2
Visible False
BackColor azul
--------------------------------------------------------------------------
Image Name Image1
Stretch True
--------------------------------------------------------------------------
CommandButton Name foto
Caption Inclui foto
--------------------------------------------------------------------------
CommandButton Name primeiro
Caption "|<"
--------------------------------------------------------------------------
CommandButton Name anterior
Caption "<"
--------------------------------------------------------------------------
CommandButton Name proximo
Caption ">"
--------------------------------------------------------------------------
CommandButton Name ultimo
Caption ">|"
--------------------------------------------------------------------------
(**)Label Caption **
AutoSize **
--------------------------------------------------------------------------
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 59
(**) 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 pictu-
re1.
Codigo da Aplicacao
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
If tabela.RecordCount = 0 Then
MsgBox "O arquivo esta vazio ... vamos comecar a trabalhar..."
Else
tabela.MoveFirst
End If
mostra_reg
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 60
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
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 = ""
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
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 61
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 62
Picture2.Visible = False
End If
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 63
mostra_reg
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 64
18-Cdigo associado ao evento pressionar tecla da caixa de texto e_mail.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 65
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.)
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.
Vamos gerar um relatrio baseado na tabela agenda que se encontra no banco de dados Controle .
Nosso relatrio dever obedecer os seguintes parmetros:
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 66
Vamos selecionar os campos da tabela que sero impressos no relatrio - selecione cada
campo e clique no boto Add.
Fig-2
A esta altura o relatrio esta praticamente terminado, para visualiz-lo clique no boto Preview Re-
port. mostrada a tela da figura 3.0 onde aps clicarmos na aba Design podemos notar cinco se-
es:
Fig-3
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 67
2 - Page Header - contm os elementos do cabealho da pgina.
3 - Details - contm os campos de dados a serem impressos.
4 - Page Footer - refere-se ao rodap da pgina.
5 - Summary - impresso de resumos.
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
Vamos inserir um ttulo em nosso relatrio e uma legenda para o campo sobrenome, para isso sele-
cione a opo Text Field... do menu Insert.
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 Fi-
eld... novamente e digite Nome, clicando em Accept e posicionando a legenda mesmo local da le-
genda sobrenome.
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 68
Fig-5
Selecione a opo Special Field... do menu Insert escolha a opo Print Date e posicione no local
indicado.
Clique com o boto direito do mouse sobre o campo nascimento e selecione a opoChange For-
mat... 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 abai-
xo:
Fig-6
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 69
Fig-7
Agora basta digitar a frmula na caixa Formula Text, vamos l, digite: "Pgina: " + e, a seguir sele-
cione 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 seguin-
te na caixa Formula Text:
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).
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" & "''"
Voc pode utilizar a guia Style para escolher a forma de apresentao do relatrio.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 70
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.
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 Com-
ponents.. do menu Project e a seguir selecionar o controle
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 71
CrystalReport1.Action = 1
End Sub
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 (+).
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 sele-
cionar os registros que queremos imprimir.
Estaremos usando a verso do Crystal Reports que acompanha o Visual Basic 5.0.
Voc trabalha como programador em uma grande escola e recebeu a incumbncia de gerar o relat-
rio 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 72
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:
No espao reservado para observaes devemos informar quando o aluno no atingiu a mdia mmi-
na para aprovao, nota inferior a 5, e colocar a mensagem:
Bem, vamos ao trabalho, no VB ative o Crystal Reports atravs da opo Add Ins->Report Desig-
ner... 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
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 73
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 incorpora-
dos ao nosso relatrio e mantenham a correspondencia entre os dados das mesmas:
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.
Fig. 3.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 74
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)
Fig. 5.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 75
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:
Fig. 6.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 76
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.
Fig. 9.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 77
Se voc fez tudo certo obter algo parecido com a figura 10 abaixo:
Fig. 10
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 dese-
jado 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.
Fig. 12
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 78
Iremos formatar a seo que inserimos de forma a obter os dados de cada aluno em pginas distin-
tas, 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.
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)
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 79
Para isso clique na opo do menu Insert e Formula Field, a seguir informe o nome da formula figu-
ra 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 80
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)
Obs:
No esquea de ao gerar o seu relatrio deixar ativa a opo Verify on Every Print do menu Data-
base ;
Desative opo Save Data with Closed Report na opo Database->Set Location... clique no bo-
to Same as Report.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 81
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:
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 Win-
dows 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".
[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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 82
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 a criao de ndices.(Acesso via Data control). (Neste caso voc pode controlar a or-
dem na qual os registros sero exibidos utilizando uma instruo SQL com propriedade Recordsour-
ce)
Desenhando a interface
Vamos supor que voc quer acessar o arquivo agenda.dbf (Arquivo padro Dbase) que est no dire-
trio teste no drive c.(C:\teste) usando o controle de dados.
-----------------------------------
Nome do campo Tipo Tamanho
-----------------------------------
Nome Caracter 30
Endereco Caracter 30
Telefone Caracter 11
-----------------------------------
- Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como Agenda, e a seguir insira o
controle de dados como indicado abaixo:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 83
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 84
------------------------------------------------------------------
TextBox Name TEXT1
index 0 (**)
DataField "Nome"
DataSource data1
------------------------------------------------------------------
TextBox Name TEXT1
index 1
DataField "Endereco"
DataSource data1
------------------------------------------------------------------
TextBox Name TEXT1
index 2
DataField "telefone"
DataSource data1
------------------------------------------------------------------
CommandButton Name COMMAND1
index 0 (***)
Caption "&Incluir"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 1
Caption "&Excluir"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 2
Caption "&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 co-
mum o nome e o tipo.
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.
Option Explicit
Private rs As Recordset
If rs.RecordCount = 0 Then
MsgBox "O arquivo vazio , inserir registro .", vbExclamation
Command1_Click (0) 'boto p/incluir registro
End If
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 85
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 Record-
count indica que o arquivo est vazio, em caso positivo emitimos uma mensagem ao usurio (mgs-
box) e "foramos" a incluso de um registro no arquivo. (Command1_click(0)).
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 Ac-
cess. 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 localiza-
o 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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 86
Set db=DBEngine.Workspaces(0).Opendatabase ("C:\TESTE",false,false, "Dba-
seIII" )
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
- Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Agenda2, o qual dever ter
a seguinte aparncia:
Fig-5
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 87
index 1
DataField "Endereco"
DataSource data1
------------------------------------------------------------------
TextBox Name TEXT1
index 2
DataField "telefone"
DataSource data1
------------------------------------------------------------------
CommandButton Name COMMAND1
index 0 (***)
Caption "&Incluir"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 1
Caption "&Excluir"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 2
Caption "&Sair"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 3
Caption "&Alterar"
------------------------------------------------------------------
CommandButton Name COMMAND1
index 4
Caption "&Gravar"
------------------------------------------------------------------
CommandButton Name COMMAND2
index 0 (****)
Caption "<<"
------------------------------------------------------------------
CommandButton Name COMMAND2
index 1
Caption "<"
------------------------------------------------------------------
CommandButton Name COMMAND2
index 2
Caption ">"
------------------------------------------------------------------
CommandButton Name COMMAND2
index 3
Caption ">>"
------------------------------------------------------------------
(*) 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 co-
mum o nome e o tipo.
Cdigo do projeto.
Option Explicit
Private db As Database
Private rs As Recordset
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 88
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
rs.MoveNext
If rs.EOF Then rs.MovePrevious
End If
Case MOVE_LAST
rs.MoveLast
End Select
mostra_reg
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 89
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) 'incluir registro
Else
rs.MoveLast
End If
End If
End If
Case 2 'sair do sistema
End
Case 3 'alterar
rs.Edit
Text1(0).SetFocus
Case 4 'gravar registros
grava_regs
End Select
mostra_reg
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 90
A grande vantagem da conexo com base externas via DAO que voc pode utilizar os ndices para
os formatos de arquivos DbaseIII e FoxPro.
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:
Nota: O padro de ndices .NTX utilizados pelo Clipper no suportado pelo Jet. Uma forma de re-
solver isto utilizar filtros e ordenaes.
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:
Se tudo estiver certo o Access informa que o arquivo foi anexado com sucesso.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 91
Selecione o nome do banco de dados da caixa de dilogo Open Database e clique em Open
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 92
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 sem-
pre 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 distribui-
dos.
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:
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 93
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.
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 sur-
gir 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 continu-
ar:
Tela 02
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 94
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 seleciona-
mos nada, apenas clicamos em Next para prosseguir.
Tela 04
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 95
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 funcio-
nar. Voc pode remover qualquer arquivo que porventura j exista na mquina do usurio. Para dis-
tribuir 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 Depen-
dency 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...
Tela 05
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 96
7 - A seguir o Setup Wizard mostra a tela 7.0 onde basta clicar no boto Finish para iniciar compac-
tao 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
Tela 08
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 97
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 !!!
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 Wi-
zard.
- Aps a gerao verifique no diretrio a presena dos arquivos Setup.exe, Setup1.ex_ e Se-
tup.lst dentre outros.
- 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.
- 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 98
2 - Voc no vai conseguir executar o projeto setup1.vbp no Visual Basic, se tentar obter a mensa-
gem 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:
2 - Edite o arquivo Setup1.rc e faa a traduo das mensagens, salve o arquivo como Setup1.rc
Pronto, a primeira decepo foi resolvida, agora vamos segunda: Fazer os testes executando o
projeto Setup1.vbp diretamente no Visual Basic. Siga o roteiro:
3 - Agora Salve o arquivo Setup.lst e execute o arquivo setup.exe do diretrio aonde foram gerados
os arquivos de instalao.
Nota: Para ver qual foi o parmetro passado pelo commando /cmd, Clique em Tools->Options e na
guia Advanced.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 99
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
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 re-
cursos 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.
fig1.
Name - Nome do Controle (O padro data1) e Caption - Especifica o nome que aparece no
controle de dados.
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 proprie-
dade, 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 100
Fig-4
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 especi-
ficar opes avanadas de tratamento do Recordset sem uma linha de cdigo sequer.
Fig-6
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 101
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:
1 - Vamos iniciar com a criao do menu, simples na verdade, mas que serve para os nossos prop-
sitos. 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 de-
mais formulrios do projeto.
- 1 controle SSPanel
- 5 botes SSCommand
Fig-6
- Insira os controles no formulrio e configure suas propriedades como indicado a seguir na tabela
1.0:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 102
BevelWidth 1
---------------------------------------------------------------------------
SSCommand Name SSCommand1(4)
Picture fig 1.0 - Sair do Sistema
BevelWidth 1
---------------------------------------------------------------------------
SSPanel Caption ""
Name painel
Align 1-Align Top
BevelWidth 1
BevelInner 0-None
BevelOuter 2-Raised
--------------------------------------------------------------------------
(*) 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.
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:
End Sub
Vamos agora definir o banco de dados e as tabelas utilizadas pelo sistema. A princpio o sistema
usar as seguintes tabelas:
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.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 103
- 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.
(*) 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 Re-
quired.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 104
- Defina os seguintes ndices para esta tabela:
----------------------------------
nome do ndice composio
----------------------------------
- PrimaryKey cod_lanca ndice - chave primria (j definido)
----------------------------------
- datatrans data_trans ndice - datatrans por data de transao
----------------------------------
Vamos agora desenhar a interface com o usurio. Nesta fase iremos construir trs formulrios que
comporo o nosso projeto:
1 - O formulrio frmtrans o formulrio principal de nossa aplicao, pois atravs dele iremos geren-
ciar a movimentao das contas. Ele ter o aspecto da fig1.0 abaixo:
Fig-1.0
1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmtrans.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 105
Frame Name Frame2
Caption Perodo / Tipo de Transao
----------------------------------------------------------------------------
ComboBox Name CboCliente
style 0-Dropdown Combo
----------------------------------------------------------------------------
ComboBox Name CboConta
style 0-Dropdown Combo
----------------------------------------------------------------------------
Label Name Label6
Caption ""
----------------------------------------------------------------------------
MaskedBox Name maskini
Mask 99/99/99
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
MaskedBox Name maskfim
Mask 99/99/99
PrompInclude False
PromptChar " "
----------------------------------------------------------------------------
ComboBox Name CboTipo
style 0-Dropdown Combo
----------------------------------------------------------------------------
(*)CommandButton Name command1(0)
Caption "&Incluir"
---------------------------------------------------------------------------
CommandButton Name command1(1)
Caption "&Excluir"
---------------------------------------------------------------------------
CommandButton Name command1(2)
Caption "&Alterar"
---------------------------------------------------------------------------
CommandButton Name command1(3)
Caption "&Sair"
---------------------------------------------------------------------------
CommandButton Name command2
Caption "&Processa"
---------------------------------------------------------------------------
SSPanel Caption ""
Name SSPanel1
---------------------------------------------------------------------------
Data Name data1
---------------------------------------------------------------------------
DbGrid Name DbGrid1
Column1 Data
Column2 Documento
Column3 Transacao
Column4 Historico
Column5 Valor
Column6 Saldo
---------------------------------------------------------------------------
(**)Label Caption **
AutoSize **
---------------------------------------------------------------------------
(*)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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 106
Tem o seguinte aspecto mostrado na Fig. 2.0 abaixo:
Fig-2.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 107
Name SSPanel1
---------------------------------------------------------------------------
(*)CommandButton Name command1(0)
Caption "&Grava"
---------------------------------------------------------------------------
CommandButton Name command1(1)
Caption "&Cancela"
---------------------------------------------------------------------------
CommandButton Name command1(2)
Caption "&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 no-
me do respectivos controle descrito na fig 2.0.
Fig-3.0
1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmexcl.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 108
Visible false
----------------------------------------------------------------------------
CommandButton Name command2
Caption "OK"
---------------------------------------------------------------------------
CommandButton Name command1
Caption "&Cancela"
---------------------------------------------------------------------------
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 109
Dim msg As String
atualiza_grid (sql)
Data2.Refresh
End Sub
Cliente = cbocliente.ItemData(cbocliente.ListIndex)
conta = cboconta.Text
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 110
sql = "SELECT data_trans, cod_trans, lancamento, nu_dcto, saldo,
obs_trans FROM tbltrans"
sql = sql & " WHERE cod_cli=" & cboclien-
te.ItemData(cbocliente.ListIndex)
sql = sql & " AND cod_conta=" & cboconta.Text
'-----atualiaza Recordsource-------
sql = sql & " ORDER BY data_trans"
Data2.RecordSource = sql
atualiza_grid (sql)
Data2.Refresh
End Sub
'---------formata grid--------------------
DBGrid1.Columns(0).Width = 900
DBGrid1.Columns(1).Width = 950
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 111
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
End Sub
'---------------------------------------------
Set arqtemp = db.OpenRecordset(sql, dbOpenDynaset)
'---------------------------------------------
If arqtemp.EOF Then
MsgBox "No h dados no arquivo !", vbExclamation
arqtemp.Close
Exit Sub
End If
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 112
Case 0 'gravar
grava_recs
tabela.Update
If alterareg Then
Unload Me
Exit Sub
End If
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
Option Explicit
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 113
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
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
End Sub
DbGrid1.columns(i).visible= False
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 114
11 ) DBLIST
Tire suas dvidas de como utilizar o controle DBLIST. Veja como configurar as principais proprieda-
des. 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 - List-
Box, 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.
- DataSource -> Nome do controle de dados que contm o recordset de destino para
as informaes.
- DataField -> Nome do campo de destino. (O que ser atualizado.)
- BoundColumn -> Nome do campo que contm o valor a ser copiado para outra tabela.
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 115
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 116
Cdigo do Projeto - Cadastro de Funcionrios.
Dim ws as Workspace
Dim db as DataBase
Dim tblcad as Recordset
End Sub
End Sub
BoundText o valor retornado por BoundColumn aps cada seleo na lista de opes.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 117
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.
Fig. 2.0
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 118
Defina a propriedade ListField da Caixa de Listagem para nome.
Para as Caixas de Texto defina a propriedade DataSource como DATA1, e a propriedade Data-
Field como nome, endereo e setor respectivamente para text2, text3, e text4.
Option Explicit
Dim DB As Database
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:
Fig. 4.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 119
12 ) REDES (Projeto comentado)
- Primeiro vejamos um exemplo para o caso da abertura do banco de dados nos modos exclusivo e
compartilhado :
- Acesso Exclusivo/Compartilhado.
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.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 120
Option Explicit
Dim db as Database
Dim dbname as String
Exit Sub
AbrirError:
Dim msg as String
if optcompartilhado then
'O usurio tentou abrir o arquivo no modo compartilhado mas
o mesmo j estava aberto no modo exclusivo.
else
'O usurio tentou abrir o arquivo no modo exclusivo mas
o mesmo j estava aberto por outro usurio.
endif
Else
'Se ocorrer qualquer outro erro...
msg = Err.Description
Endif
'Mostra a mensagem de erro ao usurio e sai da procedure.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 121
MsgBox msg, vbExclamation
Exit Sub
End Sub
'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
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
- A seguir um exemplo que analisa o comportamento do Jet na abertura das tabelas nas opes db-
DenyRead, dbDenyWrite e dbReadOnly :
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 122
Como sabemos o VB abre as tabelas para acesso compartilhado e faz o bloqueio de registros durante
a atualizao dos mesmos.
Se voc necessitar bloquear alguns dados dentro de um conjunto de registros poder utilizar as op-
es dbDenyRead,dbDenyWrite e dbReadOnly dependendo do tipo do conjunto de registros que
estiver acessando.(Ver tabela 1.0 abaixo)
Ao usar estas opes para acessar uma tabela voc deve estar preparado para lidar com as poss-
veis 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 so-
mente 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 :
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 123
---------------------------------------------------------------------------
CommandButton Name command1(1)
Caption "&Fechar Tabela"
Enabled False
---------------------------------------------------------------------------
CommandButton Name command1(3)
Caption "&Sair"
Cancel True
---------------------------------------------------------------------------
CommandButton Name command1(0)
Caption "&Abrir a Tabela"
---------------------------------------------------------------------------
2-Cdigo do Projeto:
Option Explicit
Dim db as Database
Dim rs as Recordset
Dim dbname as string
End Sub
rs.Index = "Primarykey"
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 124
msg = Err.Description
End Select
rs.Close
Command1(0).Enabled = True
Command1(1).Enabled = False
Command1(2).Enabled = False
rs.MoveLast
chave = rs("pubid") + 1
rs.AddNew
rs("pubid") = chave
rs("name") = "!!! TESTE DE INCLUSO !!!"
rs.Update
Exit Sub
inclui_erro:
Select Case Err
Case 3027
msg = "A tabela esta aberta apenas para leitura voc no po-
de modific-la"
Case 3260
msg = "O registro esta atualmente bloqueado, tente mais tar-
de. "
Case Else
msg = Err.Description
End Select
MsgBox msg, vbExclamation
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:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 125
fig 1.0
- 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 db-
DenyWrite.
- 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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 126
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...", imediata-
mente voc percebe que esqueceu de mudar o caminho para a abertura do banco de dados, e ago-
ra... 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 compi-
lado; 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.
Interceptando erros.
Quando uma instruo On Error est em vigor e ocorrer um erro o VB vai executar as aes determi-
nadas 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 chama-
do a funo ou sub-rotina onde o erro tiver ocorrido.
Traduzindo-a teremos:
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 127
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:
Trata_Erro:
msgbox "No existe diviso por zero !!!!"
-> Exibe a mensagem e encerra a aplicao.
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.
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 trata-
mento, se for o caso.
Quando ocorre um erro o VB coloca o nmero do erro na propriedade Number do objeto Err, conhe-
cendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso quanto ao seu trata-
mento. Vejamos um exemplo prtico:
Vamos definir uma tabela com o nome de erro que estar armazenada no banco de dados Contro-
le.mdb (j criado anteriormente ver Definio de bando de dados e Tabelas ) e que possuir a se-
guinte estrutura:
---------------------------------------------------------
nome do campo Tipo de Dados Tamanho do Campo
---------------------------------------------------------
codigo Long 04
nome Caracter 30
---------------------------------------------------------
Desta forma estamos criando uma chave primria para o campo codigo.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 128
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
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.
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.
Fig.2.0
Fazemos isto utilizando a instruo Resume Next colocada aps a mensagem de aviso ao usurio.
erro_mdb:
MsgBox "Erro nmero : " & Str$(Err.Number) & " --> Cdigo j utilizado !!!"
Resume Next 'retorna a ao para a linha de cdigo subsequente aquela que
'gerou o erro
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 129
- Cdigo do projeto para Tratamento de erros.
Option Explicit
Dim db As Database
Dim rs As Recordset
Dim dbname As String
End Sub
Set db = DBEngine.Workspaces(0).OpenDatabase(dbname)
Set rs = db.OpenRecordset("erro")
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 130
Public Sub limpa_regs()
'limpa os controles
Text1 = ""
Text2 = ""
End Sub
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.
Resume Next Retorna a execuo na linha que vem logo aps linha que gerou o erro
Resume Executa mais uma vez a linha que gerou o erro.
Resume Label Retorna a execuo da linha que vem aps a etiqueta citada.
Resume Number Retorna a execuo na linha com o nmero indicado.
Exit Sub Sai da sub rotina atual.
Exit Function Sai da funo atual.
Exit Property Sai da propriedade atual.
On Error Redefine a lgica de tratamento de erros.
Err.Clear Elimina o erro sem afetar a execuo do programa.
End 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.
Note que utilizamos nmeros de linha em nosso cdigo para ser possvel a identificao do nmero
da linha pelo tratamento de erros.
Dim db As Database
Dim dbName As String
Dim rs As Recordset
Dim s As String
' Aqui ocorre um erro, pois a tabela no existe neste banco de dados
20 Set rs = db.OpenRecordset("erros", dbOpenTable)
' Aqui temos outro erro pois o cdigo no aceita valores alfanumricos
50 rs![cdigo] = "XYZ"
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 131
Exit Sub
LoadError:
MsgBox "Erro nmero #" & Str$(Err.Number) & " na Linha " & Str$(Erl) & " - "_
& Err.Description & " - gerado por " & Err.Source
Resume Next 'devolve a ao para a linha subsequente que gerou o erro.
End Sub
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.
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 subse-
quente que gerou o erro permitindo assim que o aplicao seja executada at o seu final
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 Database name' isn't a valid database name.
3006 Database 'name' is exclusively locked.
3008 Table 'name' is exclusively locked.
3009 Couldn't lock table 'name'; currently in use.
3010 Table 'name' already exists.
3015 'Index name' isn't an index in this table.
3019 Operation invalid without a current index.
3020 Update or CancelUpdate without AddNew or Edit.
3021 No current record.
3022 Duplicate value in index, primary key, or relationship.
Changes were unsuccessful.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 132
3023 AddNew or Edit already used.
3034 Commit or Rollback without BeginTrans.
3036 Database has reached maximum size.
3037 Can't open any more tables or queries.
3040 Disk I/O error during read.
3044 'Path' isn't a valid path.
3046 Couldn't save; currently locked by another user.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 133
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 dispo-
sio, 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 limi-
taes. Nessa poca OLE Object Linking and Embedding. Introduzia dois conceitos:
Neste contexto surgem as conceitos de objeto vinculado e do objeto incorporado, ento vejamos:
Embora o objeto vinculado no se torne parte do arquivo de destino, existe um vnculo, uma cone-
xo entre os dois arquivos de forma que o objeto vinculado no arquivo de destino automaticamen-
te atualizado quando o arquivo de origem atualizado.
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 Paint-
Brush.
- Se vincularmos a figura ao documento , apenas seus vnculos so gravados junto com o documen-
to.
- 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.
Os programas MS-Graph, WordArt, etc. so exemplos de programas que atuam somente como servi-
dores, pois s entram em cena quando so requisitados. Excel , Word , PowerPoint, etc. podem atuar
como Clientes ou Servidores.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 134
- O Drag-and-Drop
- O Uniform Data Transfer
- O Visual Editing
- A automao OLE
Como exemplo clssico iremos , estando no Visual Basic, solicitar ao Word que crie um novo docu-
mento e insira um texto no documento criado.
Isto possvel usando automao OLE pois o Word suporta OLE e pode atuar como cliente ou Ser-
vidor, fornecendo um objeto que suporta os comandos e funes da linguagem WordBasic.
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:
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.
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 coman-
dos do WordBasic para o VBA automaticamente.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 135
No VBA foi introduzida uma estrutura de objetos hierarquizada, e para programar em VBA necess-
rio conhecer esta estrutura. Apenas para ilustrar a diferena vejamos como alguns comandos do
WordBasic ficariam em VBA:
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 empre-
gados.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 136
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 137
------------------------------------------------------------------
label Name label1(5)
Caption "Cep"
Autosize True
------------------------------------------------------------------
TextBox Name text1(0)
DataField "sobrenome"
DataSource dtaole
------------------------------------------------------------------
TextBox Name text1(1)
DataField "Nome"
DataSource dtaole
------------------------------------------------------------------
TextBox Name text1(2)
DataField "Endereco"
DataSource dtaole
------------------------------------------------------------------
TextBox Name text1(3)
DataField "cidade"
DataSource dtaole
------------------------------------------------------------------
TextBox Name text1(4)
DataField "estado"
DataSource dtaole
------------------------------------------------------------------
TextBox Name text1(5)
DataField "Cep"
DataSource dtaole
------------------------------------------------------------------
CommandButton Name command1
Caption "&Sair"
------------------------------------------------------------------
CommandButton Name command2
Caption "&Automao OLE com Word 7.0"
------------------------------------------------------------------
OLE Name Photo
Datafield Foto
DataSource dtaole
SizeMode 0 - Clip
------------------------------------------------------------------
Como voc pode observar utilizando o controle de dados teremos pouco a codificar.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 138
Exit Sub
Fig.2.0
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 139
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 emprega-
dos 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 forma-
tao 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 Propriedade Configurao
----------------------------------------------------------------------------
CommandButton Name command2
Caption "&Relatrio"
----------------------------------------------------------------------------
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 :
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 140
'ativa tratamento de erros
On Error GoTo erros
For i = 0 To 1
With wordobj
.TableSelectColumn
.TableColumnWidth columnWidth:=ColumnWidths(i)
.NextCell
End With
Next
wordobj.FontSize 12
wordobj.Style "Normal"
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 141
End With
rs.MoveNext
Wend
With wordobj
.appmaximize "", 1
.FilePrintPreview 'Visualiza a impressao
.AppActivate "Microsoft Word"
End With
'libera o objeto
Set wordobj = Nothing
Exit Sub
Fig.4.0
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 Propriedade Configurao
--------------------------------------------------------------------------
CommandButton Name command3
Caption "&Exportar"
--------------------------------------------------------------------------
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 142
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 143
15 ) GRFICOS NO VB
Aprenda como criar grficos no Visual Basic 5.0 usando o MSChart. Veja como criar grficos de bar-
ras, torta, pizza, 3D, de linha, etc. Configurao e utilizao, tudo com exemplos para esclarecer to-
das 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 cli-
que em OK e adicione o controle ao seu formulrio.
Agora basta definir a fonte de dados que alimentar o grfico, geralmente uma tabela, e fazer a confi-
gurao do Controle MSChart.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 144
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:
O MSChart no l aquela maravilha, mas consegue resolver, eu diria uns 70% dos problemas rela-
cionados a confeco de grficos no Visual Basic.
Utilizao e Configurao.
Fig. 4.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 145
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 pro-
priedade ShowLegend para True.
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
Permitem configurar diversas propriedades relacionadas s sries do grfico e a cor interior e da bor-
da de cada srie
Aba BackDrop
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 orienta-
o do texto atravs do grupo Alignment e Orientation.
Aba Fonts
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 146
ChartData - Permite atribuir valores s seqncias de dados a partir de uma matriz (array) de
duas dimenses.
Exemplos de Utilizao
1 - Vamos construir um grfico cujo objetivo mostrar a evoluo das receitas e despesas mensais.
Nosso grfico dever ter as seguinte configurao:
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.
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 centraliza-
do 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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 147
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.
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 alu-
nos 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:
Option Explicit
Dim db As Database
Dim rs As Recordset
Dim qry As QueryDef
Dim reg As Integer
Dim i As Integer
rs.MoveLast
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 148
rs.MoveFirst
reg = rs.RecordCount
For i = 1 To reg
graf1.Row = i
graf1.RowLabel = rs("SERIE") & " Srie "
graf1.Data = rs("alunos")
rs.MoveNext
Next
Wend
End Sub
Bem, deu para perceber que se quisermos algo mais requintado teremos que usar produtos de tercei-
ros 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:
graf1.EditCopy
Picture1.Picture = Clipboard.GetData()
Printer.PaintPicture Picture1.Picture, 0, 0
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 149
Printer.EndDoc
Picture1.Picture = LoadPicture()
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 150
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 !!!
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.)
Sub Cancelar_Click
end
End Sub
Sub OK_Click
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 151
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
para o item correspondente (List1.ListIndex=I), saindo do loop com Exit For.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 152
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.
Inicie um novo projeto no Visual Basic - o Form1 criado automaticamente.De a ele o nome de frm-
princ.
Adicione ao Form1 uma picture box com um arquivo bitmap(BMP) ou metafile(WMF) de sua prefern-
cia. Vamos usar o arquivo COMPUTER.WMF do diretrio VB\METAFILE\BUSINESS. De o nome a
picture de PI_Princ.(Veja Figura).
BackStile = 0 'Transparent
BorderStyle = 1 'Fixe Single
Caption = 'Deixe em branco
Name = LB_Rg
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 Capti-
on informe: SISTEMA TESTE.
Crie uma label no topo do formulrio frmprinc com o nome de lab_nome e na sua propriedade Cap-
tion inform: Clique em uma rea para ver o nome do componente.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 153
Case 3
qual = "Mouse"
End Select
lab_qual.Caption = " " + qual + " "
End Sub
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 exe-
cuo. Fazemos isso quando o formulrio carregado:
Sub Form_Load
Dim i as String
For i=0 to 3
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 154
18 ) FORMULRIOS COM SUBFORMULRIOS NO VB ? (Dicas)
Se voc utiliza o Visual Basic e conhece a facilidade com o Access cria um formulrio com um sub-
formulrio j deve ter ficado com dor de cotovelo, afinal o VB no possui tal recurso. Ser que no
possui mesmo ? E se... criarmos algo parecido... vamos l.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 155
AutoSize True
--------------------------------------------------------------------------
Label Name Label2
Caption Destinatrio
AutoSize True
--------------------------------------------------------------------------
CommandButton Name Command1
Caption &Sair
--------------------------------------------------------------------------
Fig. 1.0
- 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 figu-
ra 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
Fig. 2.0
- Nele notamos as opes Insert, para inserir colunas em determinada posio e Append para
inserir aps a ltima coluna.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 156
- 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 atri-
budo ao controle Data2.
Fig. 4.0
5 - Agora falta somente acrescentar o seguinte cdigo ao evento reposition do controle Data1:
7- Se voc fez tudo direitinho ao executar o projeto obter a tela da figura 5.0, e ao clicar para movi-
mentar-se pelos registros da tabela pedido os registros dos detalhes do pedido sero mostrados si-
mulando um subformulrio.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 157
Fig. 5.0
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 158
19) CRIANDO UM SCREEN SAVER NO VB (Dicas)
Vamos criar um programa no Visual Basic e transform-lo em um Screen Saver. Pode parecer com-
plexo, mas no .
Primeiro vamos criar um programa que v enchendo a tela de pontos (o cdigo foi tirado de um e-
xemplo do prprio Visual Basic), e, a seguir faze-lo funcionar como um Screen Saver.
1- Ao criar o programa o form dever ocupar toda a janela e no ter ttulo, nem os botes para maximi-
zar ou minimizar devem estar habilitados.
Fig. 1.0
3 - A seguir insira o cdigo abaixo no evento timer do temporizador: (Aqui fica a seu critrio, use a sua
imaginao... )
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 159
End Sub
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.
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 cdi-
gos como descrito abaixo:
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.
7 - Agora ative a opo File->Make EXE File... e informe o nome do seu Screen Saver.
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 160
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 contro-
le 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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 161
Funes para Validar CPF e CGC
Validar CGC
Dim I As Integer
Dim prod As Integer
Dim mult As Integer
Dim digito As Integer
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
CalculaCGC = Trim(Str(digito))
End Function
ValidaCGC = True
End Function
2- Validar CPF
lngSoma = 0
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 162
intNumero = 0
intMais = 0
strcampo = Left(CPF, 9)
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
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 163
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.
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 164
1 - Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como frmgrid.
Obs.: A base de dados (Grid_List) foi criada apenas para o exemplo acima e pode ser substituda a
seu critrio.
aluno, text, 50
curso, text, 30
valor, Currency
Cdigo do Projeto.
Option Explicit
Private numero_registros As Variant 'contador de registros
Const colindex_lista = 1 'coluna onde ser mostrada a lista de itens
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 165
End If
End With
End Sub
End Sub
Carga do formulrio
End With
Data1.Refresh
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 166
Set rs = dados.Recordset.clone
trata_erro:
MsgBox "Ocorreu um erro durante o processamento, verifique ! "
End Sub
Evento BeforeColEdit
Private Sub Grid_BeforeColEdit(ByVal ColIndex As Integer, ByVal KeyAscii As Inte-
ger, Cancel As Integer)
If ColIndex = colindex_lista Then 'fora a seleo da lista
Cancel = True
Grid_ButtonClick (ColIndex)
End If
End Sub
With Lista
.Left = Grid.Left + coluna.Left
.Top = Grid.Top + Grid.RowTop(Grid.Row) + Grid.RowHeight
.Width = coluna.Width + 15
.ListIndex = 0
.Visible = True
.ZOrder 0
.SetFocus
End With
End If
End Sub
disponvel em www.2p.com.br
Visual Basic Curso Bsico. Pag..: 167
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
disponvel em www.2p.com.br