Escolar Documentos
Profissional Documentos
Cultura Documentos
VB 5
VB 5
Basic
( Verso 5 )
Curso Bsico
Agradecimentos
Embora tenha custado horas e horas de montagem (word) essa apostila no teria sido confeccionada
se eu no tivesse encontrado a Home Page do Jos Carlos Macoratti Visual Basic Banco de
dados.
Excelente trabalho de garimpo deste profissional que com certeza prova que podemos encontrar
vrios servios de boa qualidade e de graa na Internet.
Por favor se quiserem agradecer visitem este site.
http://www.geocities.com/SiliconValley/Bay/3994/
macoratti@riopreto.com.br
Indice:
1)
INTRODUO ( Conceitos Bsicos )......................................................................................6
1.1) BANCO DE DADOS..................................................................................................................6
1.2) TRABALHANDO COM TABELAS...........................................................................................8
1.3 - CRIANDO BANCO DE DADOS, TABELAS, NDICES, RELACIONAMENTOS E
CHAVES PRIMRIAS. (DATA MANAGER) -...............................................................................10
1.4. RECORDSET: TABLE, DYNASETS, SNAPSHOTS.(DEFINIO, PRINCIPAIS MTODOS
E EVENTOS RELACIONADOS)....................................................................................................14
1.5. DATA CONTROL. (DEFINIO, PRINCIPAIS MTODOS E EVENTOS
RELACIONADOS)..........................................................................................................................18
1.6. EVENTOS: UM NOVO ENFOQUE (EVENTOS: CONCEITOS, EXEMPLOS .)...................21
1.7. O PODER DA SQL (A LINGUAGEM SQL : INTRODUO.)..............................................22
1.8. USANDO EDIT, ADDNEW E UPDATE...(EDITANDO, INCLUINDO E ATUALIZANDO...)
..........................................................................................................................................................23
1.9. VISUAL BASIC - DATAS E O ANO 2000.(COMO O VB INTERPRETA O ANO COM DOIS
DGITOS.(DD/MM/YY)..................................................................................................................24
1.10. SQL : CRIANDO CONSULTAS PARAMETRIZADAS NO VISUAL BASIC.......................26
6 ) SQL.....................................................................................................................................56
Estrutura da tabela............................................................................................................................56
Interface com o usurio.....................................................................................................................57
Codigo da Aplicacao.........................................................................................................................59
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
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
Introduo.......................................................................................................................................133
Instruo do WordBasic...............................................................................................................135
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
Todas as tabelas, ndices, consultas, relatrios e cdigo so armazenados num nico arquivo
.MDB
Obs:
Embora o Visual Basic utilize arquivos padro MDB; Formulrios, Relatrios e Mdulos so
tratados de forma diferente pelo prprio Visual Basic e, nativamente, o Visual Basic no utiliza
Macros.
Alem disso no Access e Visual Basic podemos utilizar outros arquivos alm dos arquivos
MDB; como arquivos DBF do Dbase/Clipper, arquivos do Paradox, do Btrieve, etc.
Os recursos de definio de dados do mecanismo Jet permitem a criao, a modificao e a excluso
de tabelas, ndices e consultas. O Jet tambm aceita a validao de dados em nvel de campo e
registro. A integridade de dados tem suporte sob a forma de chaves primrias e integridade
referencial entre tabelas.
Para manipulao de dados, o Jet admite o uso da SQL e de objetos de acesso aos dados. Esses
objetos permitem ao programador manipular informaes contidas no banco de dados, atravs da
definio das propriedades dos objetos e pela execuo dos mtodos associados aos objetos. A
tabela abaixo relaciona esses objetos e descreve resumidamente suas funes:
Objeto
DBengine
Workspace
Database
TableDef
QueryDef
Recordset
Field
Index
Relation
Descrio
O objeto que referencia o mecanismo de bancos de dados do Microsoft Jet
Um rea na qual o usurio pode trabalhar com os bancos de dados
Uma coleo de informaes organizadas em tabelas, juntamente com informaes a
respeito de ndices e relaes sobre as tabelas
Uma definio da estrutura fsica de uma tabela de dados
Uma consulta armazenada de SQL das informaes contidas no banco de dados.
Uma coleo de registros de informaes sobre um nico tpico
Uma nica unidade de informaes em um banco de dados
Uma lista ordenada de registros em um recordset, baseada em um campo chave
definido
Informaes armazenadas a respeito do relacionamento entre duas tabelas
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 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
relacionar as duas tabelas por meio de um campo cdigo do cliente comum s duas tabelas.
Criando Tabelas no Access ( No Visual Basic use o Data Manager)
possvel criar uma tabela com um Assistente de Tabela, mas se ele no oferecer o tipo de tabela
desejada, pode-se criar a tabela sem ajuda. Mesmo que no se utilize o Assistente de Tabela pode-se
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
usar o Construtor de Campos para selecionar campos individuais das tabelas de amostra do
Assistente de Tabela.
Para criar uma tabela sem um Assistente (Access verso 2.0 )
1-Na janela Banco de Dados, clique no boto "Tabela" e, ento, escolha o boto "Novo".
2-Na caixa "Nova Tabela", clique no boto "Nova tabela".
O Microsoft Access exibe a janela Tabela no modo Estrutura, no qual so definidos os campos da
tabela.
Para definir campos na tabela
1 - Na coluna "Nome do Campo" digite o nome do primeiro campo seguindo as convenes de
nomenclatura padro do Microsoft Access. -Ou- Clique no boto "Construir" na barra de
ferramentas e selecione o campo a partir do Construtor de Campos. O tipo de dados e outras
propriedades para cada campo j esto definidas, embora possam ser alterados caso desejado.
2 - Na coluna "Tipo de Dados", mantenha o padro (Texto) ou clique na seta e selecione o tipo
de dados desejado.
3 - Na coluna "Descrio" digite a descrio da informao que este campo ir conter. A
descrio opcional.
4 - Se desejar, defina as propriedades do campo na parte inferior da janela.
5 - Repita os passos de 1 a 4 para cada campo.
Para salvar a tabela
1 - Aps terminar de definir os campos clique no boto "Salvar" na barra de ferramentas ou
escolha o comando Salvar no menu Arquivo para salvar a estrutura da tabela. O Microsoft
Access, ento, envia uma mensagem pedindo para nomear a tabela.
2 - Digite um nome para a tabela conforme as convenes de nomenclatura do Microsoft Access
e, ento, escolha OK.
Observaes
recomendvel que se designe o campo de (*) chave primria em qualquer tabela. Se isto no
for feito o Microsoft Access pergunta ao usurio se este deseja que o programa crie uma chave
primria quando salvar a tabela pela primeira vez. Adicionalmente definio das propriedades
de campo, pode-se, tambm, definir as propriedades da tabela. As propriedades da tabela so
atributos de toda a tabela, preferencialmente a campos individuais apenas.
Quando uma coluna ou caixa de propriedades clicada, o Microsoft Access exibe dicas teis
acerca de cada coluna ou propriedade na poro inferior direita da janela.
Aps criar tabelas, pode-se criar consultas, formulrios, relatrios e outros objetos de banco de
dados que auxiliam o usurio a manipular seus dados.
(*) - A chave primria um campo ou combinao de campos que permite a identificao nica
de cada registro de uma tabela. Assim como o ndice principal para a tabela, ela utilizada para
associar dados entre tabelas. Se uma tabela no inclui um campo de chave primria bvio, o
Microsoft Access pode criar um campo que designa um nmero nico para cada registro.
10
indicados:
1. Informe o nome da tabela na caixa de texto Name.
2. Informe o nome do campo na caixa de texto Field Name.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
11
Obs:
12
A criao de um ndice de uma tabela no Data Manager simples. Basta selecionar a janela Table
Editor, clicar no boto Indexes, e, seguir os passos indicados:
1.
2.
3.
4.
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:
13
14
A abertura de um banco de dados e feita com o uso do mtodo Opendatabase do objeto Workspace,
mostrado no cdigo abaixo :
Dim meubd as Database
Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")
Para trabalhar com os objetos de acesso a dados voc usa as variveis do objeto para cada tipo
de objeto (Database, Recordset,...). Para designar um objeto a uma varivel do objeto utilize a
instruo SET.
No cdigo acima primeiro definimos uma varivel objeto de banco de dados(meubd), e a seguir
usamos o mtodo Opendatabase para designar nosso banco de dados, nome e localizao,
varivel objeto declarada.
Aps abrir o banco de dados voc deve definir um Recordset para ter acesso aos dados contidos
no banco de dados.
Recordsets
O novo objeto Recordset o recurso mais importante relacionado com os objetos de acesso a
dados. Ele ocupa o lugar dos objetos tabela, dynaset e snapshot das verses anteriores. Agora ao
invs de abrir uma tabela ou criar um dynaset voc abre um Recordset. H trs tipos de Recordsets
disponveis:
Tabelas - so as estruturas fsicas que contm os dados em um banco de dados.
Dynaset - so um conjunto de ponteiros para acesso a campos e registros localizados em
uma ou mais tabelas.
Snapshot- so uma cpia somente de leitura dos dados de uma ou mais tabelas.
Como todos os dados de um banco de dados esto armazenados em tabelas, acessar tabelas
significa acessar diretamente os dados de um arquivo.
Vantagens do uso de Tabelas
a nica forma de Recordset que aceita o uso de ndices, tornado desta forma a pesquisa
em uma tabela mais rpida do que em um dynaset ou snapshot.
As alteraes efetuados pelos usurios ficam imediatamente disponveis, no sendo
necessrio dar o refresh para atualizar os dados.
15
Um snapshot uma cpia dos dados de um recordset em um dado instante. Ele muito semelhante
a um dynaset pois pode ser criado a partir das tabelas bsicas com as mesmas instrues.(SQL,
QueryDef,...). A diferena principal que um snapshot no pode ser atualizado.
Vantagens do uso de Snapshots
Permitem reunir informaes de diversas tabelas.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
16
Permitem utilizar os mtodos de busca Find e o uso de filtros e ordem de classificao para
mudar a viso dos dados.
Para os snapshots, navegao pelos registros e a criao de recordsets pode ser mais
rpida do que nos dynasets.
Utilizamos os mtodos de localizao para localizar registros que satisfaam a critrios determinados.
Os mtodos de localizao somente podem ser utilizados em Dynasets e Snapshots. No possvel
utiliz-los em objetos Tabela.
Vejamos a seguir os mtodos de Localizao:
FindFirst:
A partir do incio do recordset, localiza o primeiro registro que atende aos critrios definidos.
FindNext:
A partir da posio atual no recordset, localiza o registro seguinte (prximo) que satisfaz aos critrios
definidos.
FindPrevious:
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
17
A partir da posio atual no recordset, localiza o registro seguinte(anterior) que satisfaz aos critrios
definidos.
FindLast:
A partir do incio do recordset, localiza o ltimo registro que satisfaz aos critrios definidos.
Aps a executar o mtodo de localizao voc deve verificar o status da propriedade NOMATCH. Se
Nomatch verdadeira o mtodo no encontrou o registro desejado, se Nomatch falsa o ponteiro
do registro se posiciona no registro encontrado.
Como exemplo suponha que temos um banco de dados Controle, no diretrio Controle, que contm
uma tabela Clientes, e que desejamos encontrar o cliente de nome Ana Maria Rosa nesta tabela.
Veja o fragmento de cdigo abaixo:
Dim bd as Database
Dim rs as Recordset
Dim criterio as string
Set bd = DBEngne.Workspaces(0).OpenDatabase("C:\Controle\Controle.mdb")
Set rs = bd.OpenRecordset("Clientes",DbOpenDynaset)
criterio="nome='Ana Maria Rosa'"
rs.findfirst criterio
if rs.nomatch
msgbox "Cliente no localizado. "
else
msgbox rs.Fields("nome") & " localizado no arquivo. "
endif
O mtodo Seek somente pode ser utilizado com o recordset do tipo Table(Tabela), e, embora ele seja
o mais rpido dos mtodos de localizao e posicionamento de registros apresenta as seguintes
limitaes:
S pode ser executado sobre uma tabela; no possvel us-lo com um dynaset ou
snapshot.
S pode ser usado com um ndice ativo, e os parmetros devem coincidir com os campos do
ndice ativo.
Um Seek s localiza o primeiro registro que satisfaz aos valores de ndices especificados.
Para invocar o mtodo Seek necessrio fazer a chamada ao mtodo usando os operadores de
comparao (<, <=, =, >=, >, <>), lembrando que os valores de chaves que esto sendo comparados
devem ter o mesmo tipo de dados dos campos no ndice de controle. Veja exemplo a seguir:
Dim bd as Database
Dim rs as Recordset
Set bd = DBEngine.Workspaces(0).OpenDatabase "C:\Controle\Controle.mdb")
Set rs = bd.OpenRecordset("Clientes",DbOpenTable)
rs.index = "Nome"
rs.seek "=", "Ana Maria Rosa"
if rs.nomatch
msgbox "Cliente no localizado. "
else
msgbox rs.Fields("nome") & " localizado no arquivo. "
endif
No cdigo acima definimos um recordset rs do tipo Tabela e a seguir definimos o ndice ativo rs.index
= "Nome" e invocamos o mtodo Seek usando o operador = com nome a ser procurado.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
18
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.
19
O controle de dados foi criado para proporcionar um meio simples de acesso a um banco de dados.
Para usar o controle de dados, siga os passos a seguir:
Selecione o controle na caixa de ferramentas.
Desenhe o controle em seu formulrio.
Defina a propriedade DatabaseName
Defina a propriedade Recordsource
Defina a propriedade RecordsetType
A essa altura voc criou os vnculos para o banco de dados e o Recordset com o qual deseja
trabalhar. O controle assume para si as tarefas de:
Abrir o banco de dados e as tabelas ou consultas associadas.
Navegar pelos registros.(Utiliza mtodos MoveFirst,Movelast,Movenext e Moveprevious.)
Carregar os valores diversos campos nos controles utilizados para exibir e editar os dados.
Gravar os dados editados dos controles no Recordset
Funcionamento e utilizao.
Com base nas propriedades Name e RecordSource o controle de dados cria um Recordset que
fornece acesso aos seus dados.
De incio selecione o objeto controle de dados na Toolbox do Visual Basic e
acrescente-o ao seu formulrio.(Fig.1)
Fig-1
Fig-3
20
Definio de Propriedades.
Agora voc deve associar um banco de dados e um recordset a um controle de dados definindo as
propriedades do controle. As propriedades necessrias a isso so :
DatabaseName - Para bancos de dados do Access, representa o nome do arquivo do banco de
dados, inclusive o nome completo do caminho. (Para banco de dados diferentes do Access
necessrio informar o nome do caminho at o subdiretrio dos dados. Ex-Para padro Dbase :
DatabaseName=c:\dir)
RecordSource - Especifica as informaes que deseja obter no banco de dados - uma tabela, uma
instruo SQL .
RecordsetType - Se deseja criar um 2-snapshot ou um acessar uma 0-table altere esta propriedade,
pois o padro 1-dynaset.
Connect - Necessria quando o banco de dados no for do Access. Ex - Para banco de dados
padro Dbase - Connect=dBASEIII.
possvel optar por ativar essas propriedades durante a execuo do seu aplicativo. Vejamos um
exemplo:
Voc acrescentou um controle dados a seu formulrio e definiu a propriedade Name como Data1, e
quer ter acesso no arquivo TESTE.MDB (arquivo access) aos dados da tabela clientes, vejamos o
cdigo abaixo:
data1.DatabaseName="C:\TESTE\TESTE.MDB"
data1.RecordSource="Clientes"
data1.recordsetType=0
data1.Refresh
'path/nome do arquivo
'fonte dos dados(tabela clientes)
'tipo de recordset(0-tabela)
'implementa as alteraes
21
data1.Recordset.AddNew
2-Boto para excluso de dados:
data1.Recordset.Delete
data1.Recordset.MoveLast
Observe que no foi necessrio utilizar o comando Update, pois as atualizaes so feitas
automaticamente pelo controle de dados quando do deslocamento para um novo registro ou ao
fechar o formulrio atravs dos eventos Validate e Reposition.
Validate
Este evento ocorre sempre antes de um registro se tornar o registro corrente ou antes da execuo
do mtodo Update ou antes da excluso de um registro ou do fechamento do recordset/formulrio;
Voc pode associar a este evento o cdigo para validao de seus dados, como no exemplo abaixo:
Private Sub data1_Validate(Action As Integer, Save As Integer)
If Save Then
Select Case MsgBox("Salvar Alteraes ?", vbQuestion + vbYesNo)
Case vbYes '6
If nome.Text = Empty Then
MsgBox "Informe o nome do Cliente !",, "Gravar Clientes"
nome.SetFocus
Save = False
Action = vbDataActionCancel
Exit Sub
ElseIf endereco.Text = Empty Then
MsgBox "Informe endereo do cliente !",, "Gravar Clientes"
endereco.SetFocus
Save = False
'-no salva
Action = vbDataActionCancel '-cancela
Exit Sub
End If
Case vbNo '7
Save = False
End Select
End If
End Sub
Outro evento que pode ser utilizado para validar dados o evento Reposition:
Evento Reposition
Ocorre sempre aps o controle posicionar o registro corrente e aps a carga do recordset pelo
controle Data, neste momento o primeiro registro do recordset torna-se o registro corrente e o evento
Reposition gerado.
Movendo-se em um recordset com o Controle Data
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
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
22
Controle se move para o registro solicitado e gera um evento Reposition informando a todos os
controles vinculados os novos valores dos campos
Consideraes finais.
Voc pode utilizar o controle de dados sozinho no caso de aplicativos em que o usurio tenha acesso
somente para leitura ou quando no existe a necessidade de incluso/excluso de registros.
O Controle de dados timo para prototipao de um aplicativo, pois voc pode desenvolver
rapidamente os formulrios.
Para um sistema multiusurio de uso intenso o controle de dados pode no ser uma boa escolha,
pois pode aumentar a quantidade de conflitos de bloqueio de registros.
Provavelmente a melhor soluo seja o uso combinado dos controle de dados e de cdigo de
programa.
23
Open - para os formulrios, o evento Open ocorre quando um formulrio aberto, mas antes que o
primeiro registro seja apresentado. Para os relatrios, o evento ocorre antes que um relatrio seja
visualizado ou impresso.
Close - ocorre quando um formulrio ou relatrio fechado e removido da tela.
O evento Open ocorre antes do evento Load, que por sua vez disparado quando um formulrio
aberto e seus registros exibidos.
O evento Close ocorre depois do evento Unload, que disparado depois que o formulrio
fechado, mas antes que ele seja removido da tela.
Os formulrios, relatrios, botes de comando, caixa de listagem, caixa de verificao, boto
de opo, grupo de opo e demais objetos possuem propriedades, mtodos e eventos
associados que podemos utilizar para executar rotinas apropriadas ao contexto. Alm disso
eventos podem disparar outros eventos.
24
Ento se voc no est utilizando a SQL, estar trabalhando muito e seu cdigo sofrendo as
conseqncias.
Vejamos na tabela abaixo um resumo das clusulas manipulativas e suas finalidades:
Instruo
Funo
Obtm um grupo de registros e insere os registros em um dynaset ou em uma
SELECT
tabela
UPDATE
Define os valores dos campos de uma tabela em uma atualizao
Cria uma tabela de resumo, utilizando o contedo de um campo como cabealho de
TRANSFORM
cada coluna
DELETE FROM Remove registros de uma tabela
INSERT INTO
Acrescenta um grupo de registros a uma tabela.
Vejamos alguns exemplos da instruo SELECT:
1) Seleciona os campos "Primeiro nome" e "Sobrenome" de todos os registros da tabela Empregados.
SELECT [Primeiro nome], [Sobrenome] FROM Empregados
2) Seleciona todos os campos da tabela Empregados. Note o uso parmetro (*) indicando todos os
campos da tabela indicada.
SELECT Empregados.* FROM Empregados
3) Conta o nmero de registros que tm uma entrada no campo "Cdigo postal" e coloca o ttulo
Contagem no topo da coluna.
SELECT Count([Cdigo postal]) AS Contagem FROM Clientes
4) Seleciona os campos "Primeiro nome" e "Sobrenome" de cada registro cujo sobrenome seja
Pereira.
SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] = 'Pereira'
5) Seleciona os campos "Primeiro nome" e "Sobrenome" para Empregados cujos sobrenomes
comeam pela letra S.
SELECT [Primeiro nome], [Sobrenome] FROM Empregados WHERE [Sobrenome] Like 'S*'
FROM - Indica as tabelas utilizadas como fonte de dados
WHERE- Especifica as condies que os registros devem satisfazer para compor o subconjunto de
dados.
1.8.
USANDO EDIT,
ATUALIZANDO...)
ADDNEW
UPDATE...(EDITANDO,
INCLUINDO
Ao utilizar o mtodo Edit o Jet copia o registro atual de um Recordset do tipo dynaset ou Tabela
para o Buffer de Cpia para posterior edio.
A Sintaxe usada a seguinte: recordset.Edit
O recordset correspondente representa o nome do objeto Recordset atualizvel que contm o registro que voc quer editar.
Observaes
Logo que voc usa o mtodo Edit, as mudanas feitas nos campos do registro atual so copiadas
no buffer de cpia. Depois que voc faz as mudanas desejadas no registro, use o mtodo de
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
25
26
Regra
Todos os anos com dois dgitos so automaticamente
considerados como do sculo 20
Todos os anos com dois dgitos so do sculo corrente
(definido pelo relgio do sistema).
27
Access 95 (com a nova biblioteca), VB 4.0 Todos os anos com dois dgitos entre 00 e 29 so do sculo
32 bits, VB5, Access 97
XXI e os demais do sculo XX
J deu para perceber que importante saber com qual verso de biblioteca OLEAUT32.DLL seu
sistema esta trabalhando. Para isso faa o seguinte:
1-abra o Explorer e no diretrio System;
2-localize o arquivo OLEAUT32.DLL;
3-Clique com o boto direito do mouse sobre o arquivo;
4-Selecione propriedades;
5-Selecione a ficha Verso e clique em Verso do Produto;
6-Se o nmero da verso for igual ou superior a 2.20.4049 a nova regra esta sendo usada.
Criando a sua prpria interpretao. Voc pode querer implementar as suas prprias regras, como
por exemplo: - datas com dois dgitos no ano entre 00 e 49 sero interpretadas como do sculo XXI
(2000 e 2049), - e datas entre 50 e 99 como do sculo XX.(1950 e 1999). Para isto basta criar uma
procedure com o seguinte cdigo:
Private Sub cmdConvertDate_Click()
Dim strYear As String
Dim intSlash As Integer
If IsDate(txtDate) or txtDate = "2/29/00" Then
'procura primeiro separador
intSlash = InStr(txtDate, "/")
If intSlash > 0 Then
'procura segundo separador
intSlash = InStr(intSlash + 1, txtDate, "/")
If intSlash > 0 Then
'Extrai ano da data
strYear = Mid(txtDate, intSlash + 1)
If Len(strYear) = 2 Then
If CInt(strYear) < 50 Then
' Menor que 50: ano = 20XX.
strYear = "20" & strYear
Else
' Maior que 50: ano = 19XX.
strYear = "19" & strYear
End If
End If
MsgBox "Data Informada: " & txtDate
MsgBox "ANO (Sua Regra): " & strYear
MsgBox "ANO (Regra do VB): " & Year(txtDate)
Else
MsgBox "Data no formato no esperado!"
End If
Else
MsgBox "Data no formato no esperado!"
End If
Else
MsgBox "Data invlida !"
End If
' Limpando a data no texto
txtDate.Text = Left(txtDate.Text, intSlash) & strYear
End Sub
Bem, espero no ter criado mais confuso com as datas.
(Referncia: Article ID:Q162718 - Microsoft )
28
db as Database
dyn as Recordset
db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb")
dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)
Ou elimin-la :
db.Querydefs.Delete "Lista_alunos"
Para tirar maior proveito das QueryDefs costuma-se cri-las de forma que aceitem parmetros, para
isto usamos a palavra-chave PARAMETERS para passar um ou mais parmetros para as consultas
SQL.
Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma determinada
srie, para isso criamos a consulta e passamos o parmetro da srie desejada:
Dim db as Database
Dim qd as QueryDef
Dim dyn as Recordset
Dim Sql as String
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie =
pSerie "
sql=sql & " ORDER BY nome "
set qd=db.CreateQueryDef("Lista_alunos", Sql )
qd.Parameters("pSerie")= "1"
set dyn= qd.OpenRecordset()
Mtodos de QueryDef
Os mtodos usados pelas QueryDefs so: Execute e OpenRecordset.
O mtodo Execute usado para executar comandos de ao como DELETE ou UPDATE que no
retornam um conjunto de registros, usado tambm para criar tabelas e ndices via instruo SQL.
O mtodo OpenRecordset usado para retornar um conjunto de registros como resultado da
consulta.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
29
30
Seus projetos tambm ficaro mais rpidos,pois geralmente a SQL e mais rpida
que o mtodo procedural via DAO.
A portabilidade sua aplicao ser maior visto que a SQL aceita pelos principais bancos de dados relacionais (Oracle,Sybase,etc.).
Creio que estes motivos j so suficientes para voc dar uma olhada no que a SQL pode fazer por
voc e por seu cdigo.
Com a SQL podemos realizar as seguintes tarefas:
Se voc tem uma cpia do Access, sua incurso no mundo SQL ser facilitada, pois o Access
praticamente escreve em SQL para voc, depois voc s precisar copiar e colar as instrues no seu
cdigo em Visual Basic. Mas vale a pena aprender pelo menos as instrues mais importantes em
SQL. Com isso voc j conseguira usar muito do seu potencial.
Talvez o maior problema para os que j utilizavam uma linguagem procedural (Basic, Clipper, Fortran,
Cobol, etc), ao lidar com a SQL seja o seguinte: Voc tem que mudar a forma de pensar ao
programar com SQL.
Estas linguagens ditas da terceira gerao, so caracterizadas por comandos que dizem ao
computador exatamente o que fazer em estruturas sequenciais executadas passo a passo. So
chamadas de linguagens procedurais.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
31
A SQL,por outro lado, caracterizada por ser uma linguagem declarativa, ou seja, ela diz ao
computador o que quer que ele faa, sem se preocupar de que forma o trabalho ser realizado, o que
importa o resultado.
A SQL composta de subconjuntos de comandos para executar diferentes tarefas. Assim podemos
dizer que a SQL suporta :
Uma linguagem de definio de dados ( DDL )
Uma linguagem de manipulao de dados ( DML )
Uma linguagem de segurana de dados ( DCL )
A DDL permite criar e modificar e excluir a estrutura de uma tabela e seus ndices; seus principais
comandos so:
CREATE - Cria tabelas, campos e ndices num banco de dados.
DROP
- Remove tabelas e ndices de um banco de dados.
ALTER - Altera a estrutura de uma tabela de um banco de dados.
A DML permite manipular os dados (Inserir, Excluir e Atualizar) bem como executar consultas atravs
da recuperao de subconjuntos de dados para posterior tratamento. seus principais comandos so:
SELECT
INSERT
UPDATE
DELETE
figura 1.0
32
primarykey
PRIMARY
KEY,
A instruo CREATE TABLE ir criar a tabela tblprofessor, com as definies da lista de campos
entre parnteses, separados um dos outros por vrgulas. Cada descrio de campo possui duas
partes: o nome do campo e o tipo de dados os quais so separados por um espao entre si.
A clusula CONSTRAINT utilizada para definir a chave primria codprofessor.
Para criar a tabela no VB execute a instruo CREATE TABLE passando-a como parmetro do
mtodo Execute do objeto Database. Ex: db.Execute ("CREATE TABLE...")
Os nomes dos tipos de dados utilizados pelo JET no igual aos nomes exigidos pelas instrues
SQL. Veja na tabela a abaixo a correspondncia entre ambos:
Tipos de Dados SQL
BIT
BYTE
COUNTER
CURRENCY
DATETIME
SINGLE
DOUBLE
SHORT
LONG
LONGTEXT
LONGBINARY
TEXT
33
Para alterar uma tabela , adicionando ou excluindo um campo da tabela, usamos a instruo: ALTER
TABLE
1- Na incluso de um campo temos que especificar o NOME, TIPO e TAMANHO do campo, e usar a
clusula ADD COLUMN
Assim para incluir o campo CIDADE com 50 caracteres na tabela tblalunos fazemos:
ALTER TABLE tblalunos ADD COLUMN cidade TEXT (50)
2- Na excluso de um campo basta especificar o nome do campo e usar a clusula DROP COLUMN
O cdigo abaixo exclui o campo NOME da tabela tblalunos
ALTER TABLE tblalunos DROP COLUMN nome
Note que no ser possvel excluir um campo empregado em um ndice ou em uma relao.
CRIANDO NDICES
Podemos criar um ndice de um nico campo ou um ndice de vrios campos com a instruo:
CREATE INDEX.
Na criao do ndice devemos informar o nome do ndice o nome da tabela e pelo menos um campo
a ser includo como ndice. Assim se quisermos criar um ndice pela data de nascimento na tabela
tblalunos fazemos:
CREATE INDEX nascimento ON tblalunos(nascimento)
A instruo abaixo cria um ndice chamado series, usando os campos serie e periodo da tabela
tblalunos, sendo que serie ser usado na ordem ASCENDENTE e periodo na ordem
DESCENDENTE.
CREATE INDEX series ON tblalunos(serie ASC, periodo DESC)
EXCLUINDO NDICES
Para excluir um ndice de uma tabela utilize a instruo DROP INDEX Devemos informar o nome do
ndice e o nome da tabela. Assim para excluir o ndice serie criando anteriormente fazemos:
DROP INDEX series ON tblalunos
34
instruo SQL o JET verifica erros de sintaxe, depois ele tenta otimizar a instruo e a seguir executa
a instruo, tudo isto leva tempo e a coisa piora se voc estiver executando as mesmas instrues
SQl diversas vezes, pois o JET ter que refazer tudo novamente.
Ao criar e armazenar definies de consultas atravs de instrues SQL o Access analisa a instruo
e a otimiza s ento ele armazena a instruo original e a otimizada, quando for executar a instruo
o trabalho estar feito e o tempo de execuo ser diminuido.
Cada consulta armazada em um banco de dados Access um objeto QueryDef, o conjunto de
objetos QueryDef compem a coleo QueryDefs do objeto Database . Ento uma QueryDef uma
consulta SQL pr-compilada e pr-otimizada.
Para criar uma QueryDef usamos o mtodo CreateQuery do objeto DataBase ou a criamos
diretamente usando o prprio Microsoft Access.
O CreateQuery necessita de dois parmetros: o nome da QueryDef e a instruo SQL que o cria.
Vejamos com o criar uma consulta SQL e armazen-la no banco de dados:
Para criar uma consulta chamada Lista_Alunos , que lista todos os alunos por ordem alfabtica da
tabela tblalunos e armazen-la no banco de dados Escola.mdb, fazemos o seguinte:
Dim db as Database
Dim qd as QueryDef
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
set qd=db.CreateQueryDef("Lista_alunos", "SELECT * FROM tblalunos ORDER
BY nome"
Uma vez criada a QueryDef podemos execut-la e manipul-la como um recordset:
Dim
Dim
set
set
db as Database
dyn as Recordset
db=DbEngine.Workspaces(0).OpenDatabase(app.path & "\escola.mdb")
dyn=db.QueryDefs("lista_alunos").OpenRecordset(dbOpendynaset)
Ou elimin-la :
db.Querydefs.Delete "Lista_alunos"
Para tirar maior proveito das QueryDefs costuma-se cri-las de forma que aceitem parmetros, para
isto usamos a palavra-chave PARAMETERS para passar um ou mais parmetros para as consultas
SQL.
Suponha que no caso do exemplo anterior gostariamos de listar todos os alunos de uma determinada
srie, para isso criamos a consulta e passamos o parmetro da srie desejada :
Dim db as Database
Dim qd as QueryDef
Dim dyn as Recordset
Dim Sql as String
set db=DbEngineworkspaces(0).Opendatabase(app.path & "\escola.mdb")
sql= "PARAMETERS pSerie String SELECT * FROM tblalunos WHERE serie =
pSerie "
sql=sql & " ORDER BY nome "
set qd=db.CreateQueryDef("Lista_alunos", Sql )
qd.Parameters("pSerie")= "1"
set dyn= qd.OpenRecordset()
Mtodos de QueryDef
Os mtodos usados pelas QueryDefs so: Execute e OpenRecordset.
O mtodo Execute usado para executar comandos de ao como DELETE ou UPDATE que no
retornam um conjunto de registros , usado tambm para criar tabelas e ndices via instruo SQL.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
35
36
37
dbDenyWrite
dbReadOnly
dbAppendOnly
Se voc tentar abrir qualquer tabela com as restrices acima mencionadas e um outro usurio j
estiver com ela aberta ocorrer uma mensagem de erro.
Dai conclui-se que o cdigo de tratamento de erros dever ser utilizado em todos os lugares onde o
mtodo OpenRecordset for utilizado, pois neste caso o mtodo falhar e voc tem que estar
preparado para interceptar o erro gerado.
Que tal provarmos tudo isso ? Ento vamos l...
Veja na seo REDES os sequintes exemplos:
- Acesso Exclusivo/Compartilhado.
- Acesso as tabelas - dbDenyRead, dbDenyWrite e dbReadOnly
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
38
39
Erro 3260
Quanto ao mtodo de bloqueio a utilizar, na maior parte dos aplicativos de bancode dados, o bloqueio
otimista a melhor opo, mas existiro situaes em que voc dever usar o bloqueio pessimista.
Para estabelecer o mtodo de bloqueio de registro, defina a propriedade LockEdits da tabela ou do
dynaset com que est trabalhando. Assim:
1-Produzir bloqueio Pessimista - LockEdits = True
Dim rs as Recordset
rs.LockEdits = True
2-Produzir bloqueio Otimista - LockEdits = False
Dim rs as Recordset
rs.LockEdits = False
Como dissemos a liberao do bloqueio automtica, mas em aplicativos com intensa entrada de
dados voc pode precisar fazer pausas momentneas no processamento do aplicativo para permitir
ao Jet realizar o seu trabalho de manuteno; para isto utilizar o mtodo Idle, da seguinte forma:
DbEngine.Idle dbFreeLocks
40
A informao cdigo do cliente deve ser nica para cada cliente, ou seja, no poder haver
duplicidade no cdigo quando da importao dos dados.
As informaes referentes a cdigo, nome, endereo, cidade, cep e uf so obrigatrias.
sistema deve permitir incluir, excluir e localizar dados nos arquivos.
sistema ser desenvolvido em Visual Basic e usar o Controle de dados Vinculados para
gerenciar as informaes
Tipo de Dados
CODIGO
NOME
ENDERECO
CIDADE
CEP
UF
LONG INTEGER(*)
CARACTER
CARACTER
CARACTER
CARACTER
CARACTER
Tamanho
03
30
30
30
08
02
CARACTER
41
11
(*)Como cada cliente deve ter um cdigo nico garantindo assim a exata identificao do mesmo,
defina o tipo de dados para o campo cdigo como LONG INTEGER, e ative o atributo Counter e a
opo Required, dessa forma criamos um campo do tipo contador que o prprio sistema ir controlar
a cada incluso/excluso.
3-Defina um ndice para o campo codigo ativando as seguintes opes: Unique, Primary index,
Required.
Isto assegura que teremos uma chave nica para cada cliente cadastrado e nos fornece um ndice
que agiliza no processo de localizao das informaes.
figura 1.0
42
Name
dtaCli
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
---------------------------------------------------------------------------------------------------------------Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
43
CommandButton
Name
incluir
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.
44
Feito isto o Controle de dados, DtaCli fornecer o vinculo entre o seu formulrio e o Banco de dados
atravs da propriedade DataField das Caixas de Texto(TextBox) e tambm as ferramentas para a
navegao atravs do banco de dados.
Para movimentar-se pelos registros da tabela Clientes basta clicar nos botes do objeto DtaCli.
Cdigo associado a cada boto de commando
Dica: - A palavra Recordset pode representar um objeto e uma propriedade.
Desta forma voc pode atribuir um Recordset a uma varivel objeto, da seguinte forma:
Set meusdados = Data1.Recordset
A seguir voc pode se referir ao seu Recordset usando a varivel objeto.(No esquea de defin-la
previamente.)
No exemplo a seguir no usaremos esta notao.
Para inserir as linhas de cdigo basta clicar duas vezes no boto correspondente do seu formulrio.
1-Cdigo para boto incluir dados:
Private Sub Incluir_Click()
dtacli.Recordset.AddNew
Aps clicar no boto Incluir, voce pode digitar os dados referentes a cada cliente e a seguir clicar no
boto Gravar para gravar as informaes na sua tabela Clientes ou cancelar o processo de incluso.
2-Cdigo do boto gravar dados:
Private Sub gravar_Click()
If nome.Text = Empty Then
MsgBox "Informe o nome do Cliente.", vbExclamation, "Gravar Clientes"
nome.SetFocus
Exit Sub
End If
If endereco.Text = Empty Then
MsgBox "Informe o endereco do cliente.", vbExclamation,"Gravar Clientes"
endereco.SetFocus
Exit Sub
End If
If cidade.Text = Empty Then
MsgBox "Informe a cidade do cliente.", vbExclamation,"Gravar Clientes"
cidade.SetFocus
Exit Sub
End If
If uf.Text = Empty Then
MsgBox "Informe a UF do cliente.", vbExclamation, "Gravar Clientes"
uf.SetFocus
Exit Sub
End If
If cep.Text = Empty Then
MsgBox "Informe o Cep do cliente.", vbExclamation, "Gravar Clientes"
cep.SetFocus
Exit Sub
End If
dtacli.UpdateRecord
45
dtacli.Recordset.Bookmark = dtactl.Recordset.LastModified
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.
Em seguida movemos o ponteiro de registros para o ltimo registro.
Finalmente habilitamos os botes Incluir, Excluir e Localizar e mudamos o nome do boto para Sair.
Agora, se o nome do boto no for Cancelar solicitamos a confirmao para sair do Sistema(End) ou
abandonar a rotina(Exit Sub) e retornar ao sistema.
4-Cdigo para o boto Excluir dados:
Private Sub excluir_Click()
If MsgBox("Confirma Excluso do cliente
-> " & dtactl.Recordset![codigo],
vbQuestion + vbYesNo, "Excluir Clientes") = vbYes Then
dtacli.Recordset.Delete
dtacli.Refresh
End If
End Sub
46
Para a rotina de localizao definimos a posio atual do registro ativo usando a propriedade
bookmark
Definimos o ndice ativo (codigo que foi criando anteriormente Solicitamos o cdigo do cliente,
armazenando o valor na varivel critrio.
Se (If) criterio for diferente (<>) de vazio (empty), ento um valor foi fornecido e podemos iniciar a
localizao usando o mtodo seek. Se no for informado nenhum valor para a varivel criterio
retormamos o ponteiro de registro para a posio anterior ao inicio da localizao.
Se o valor no for encontrado (Nomatch=True) o sistema emite uma mensagem (msgbox),
informando ao usurio e posiciona o ponteiro de registro na posio anterior a busca.
6-Cdigo do evento Reposition:
Private Sub dtactl_Reposition() 'primeiro evento a ocorrer
If dtacli.Recordset.RecordCount < > 0 Then
incluir(0).Enabled = True
excluir(1).Enabled = True
dtacli.Caption = "Total de Clientes: " & dtactl.Recordset.RecordCount
Else
excluir(1).Enabled = False
incluir(0).Enabled = True
gravar(2).Enabled = False
dtacli.Caption = "O arquivo esta vazio"
End If
End Sub
O evento Reposition ocorre quando o Data control move-se de um registro para outro. No cdigo
acima cada vez que o o evento Reposition disparado atualizamos a propriedade Caption do controle
de dados atribuando a mesma o nmero total de registro do arquivo via propriedade RecordCount.
Alm disso habilitamos os botes incluir e excluir se houver registros no arquivo e desabilitamos os
botes excluir e gravar se o arquivo estiver vazio.
7-Cdigo do evento Validate:
Private Sub dtactl_Validate(Action As Integer, Save As Integer)
If Save Then
Select Case MsgBox("Deseja Salvar Alteraes ?", vbQuestion + vbYesNo)
Case vbYes '6
If nome.Text = Empty Then
MsgBox "Nome do Cliente deve ser informado !",, "Gravar Clientes"
nome.SetFocus
47
O evento Validate acionado quando o Data Control est para mover-se de um registro para um
novo. Nesse meio tempo voc pode cancelar ou no as mudanas feitas no registro. A sub rotina do
evento Validate possui dois argumentos:
Action
Save
True
False
48
A rotina acima utilizado para interceptar erros que ocorrem quando nenhum cdigo est sendo
executado.
Estes erros podem ocorrer quando a carga do formulrio ainda no estiver completa.
49
Estrutura da tabela.
Definicao da estrutura da tabela.
Vamos definir uma tabela com o nome de fornecedores que estar armazenada no banco de dados
Controle.mdb e que possuir a seguinte estrutura:
--------------------------------------------------------nome do campo
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
obrigatrio.
2-Defina um ndice para o campo nome desativando as opes: Unique, Primary index. e ativando a
opo Requerid
50
Fig-1
Para montar o formulrio acima descrito observe os seguintes passos:
1-Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Fornecedores.
2-Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 1.0 abaixo :
Tabela 1.0 - Objetos e propriedades do formulrio Fornecedores
--------------------------------------------------------------------------Objeto
Propriedade
Configurao
--------------------------------------------------------------------------Form
Name
Fornecedores
Caption
"Cadastro de Fornecedores"
--------------------------------------------------------------------------TextBox
Name
Nome
Maxlength
30
--------------------------------------------------------------------------MaskedBox
Name
CGC
Mask
##.###.###/###-##
PrompInclude
False
PromptChar
" "
--------------------------------------------------------------------------TextBox
Name
Endereco
Maxlength
30
--------------------------------------------------------------------------MaskedBox
Name
Cep
Mask
#####-###
PrompInclude
False
PromptChar
" "
--------------------------------------------------------------------------TextBox
Name
UF
MaxLength
2
--------------------------------------------------------------------------TextBox
Name
DDD
MaxLength
4
--------------------------------------------------------------------------MaskedBox
Name
Fone
Mask
####-##-##
PrompInclude
False
PromptChar
" "
--------------------------------------------------------------------------Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
51
TextBox
Name
Ramal
MaxLength
4
--------------------------------------------------------------------------MaskedBox
Name
Fax
Mask
####-##-##
PrompInclude
False
PromptChar
" "
--------------------------------------------------------------------------TextBox
Name
Contato
MaxLength
20
--------------------------------------------------------------------------TextBox
Name
Produto
MaxLength
20
--------------------------------------------------------------------------Frame
Caption
""
Name
Frame1
--------------------------------------------------------------------------CommandButton
Name
Inclui
Caption
"&Inclui"
-------------------------------------------------------------------------CommandButton
Name
Altera
Caption
"&Altera"
-------------------------------------------------------------------------CommandButton
Name
Exclui
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.
(**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao
nome do respectivo controle TextBox,MaskEdbox ou CommandButton.
Codigo da Aplicacao.
Codificando a sua aplicao.
Para inserir as linhas de cdigo basta clicar duas vezes no controle correspondente do formulrio.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
52
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
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
53
54
If (tabela.EditMode = dbEditAdd) Or _
(tabela.EditMode = dbEditInProgress) Then
tabela.CancelUpdate
tabela.Bookmark = marca
mostra_reg
End If
inclui.Enabled = True
exclui.Enabled = True
altera.Enabled = True
grava.Enabled = True
cancela.Enabled = True
End Sub
9-Procedimento de evento para gravar os registros.
Public Sub grava_reg()
If nome = Empty Then
MsgBox "O nome obrigatorio ! "
nome.SetFocus
atualiza = False
Exit Sub
End If
If cgc = Empty Then
MsgBox "O CGC tambem obrigatorio ! "
cgc.SetFocus
atualiza = False
Exit Sub
End If
If endereco = Empty Then
MsgBox "O endereco obrigatorio "
endereco.SetFocus
atualiza = False
Exit Sub
End If
tabela![nome] = nome
tabela![cgc] = cgc
tabela![endereco] = endereco
tabela![cep] = IIf(IsNull(cep), "", cep)
tabela![uf] = IIf(IsNull(uf), "", uf)
tabela![ddd] = IIf(IsNull(ddd), "", ddd)
tabela![fone] = IIf(IsNull(fone), "", fone)
tabela![ramal] = IIf(IsNull(ramal), "", ramal)
tabela![fax] = IIf(IsNull(fax), "", fax)
tabela![contato] = IIf(IsNull(contato), "", contato)
tabela![produto] = IIf(IsNull(produto), "", produto)
End Sub
Dica: Poderiamos usar a seguinte notao abaixo para diminuir o cdigo:
Ao invs de -> tabela![cep] = IIf(IsNull(cep), "", cep)
Fazemos
ou
-> tabela![cep] =
55
nome = ""
End If
If Not IsNull(tabela![cgc]) Then
cgc = tabela![cgc]
Else
cgc = ""
End If
If Not IsNull(tabela![endereco]) Then
endereco = tabela![endereco]
Else
endereco = ""
End If
If Not IsNull(tabela![cep]) Then
cep = tabela![cep]
Else
cep = ""
End If
If Not IsNull(tabela![uf]) Then
uf = tabela![uf]
Else
uf = ""
End If
If Not IsNull(tabela![ddd]) Then
ddd = tabela![ddd]
Else
ddd = ""
End If
If Not IsNull(tabela![fone]) Then
fone = tabela![fone]
Else
fone = ""
End If
If Not IsNull(tabela![ramal]) Then
ramal = tabela![ramal]
Else
ramal = ""
End If
If Not IsNull(tabela![fax]) Then
fax = tabela![fax]
Else
fax = ""
End If
If Not IsNull(tabela![contato]) Then
contato = tabela![contato]
Else
contato = ""
End If
If Not IsNull(tabela![produto]) Then
produto = tabela![produto]
Else
produto = ""
End If
End Sub
11-Procedimento de Evento para limpar os controles .
Public Sub limpa_reg()
nome = ""
cgc = ""
endereco = ""
cep = ""
uf = ""
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
56
ddd = ""
fone = ""
ramal = ""
fax = ""
contato = ""
produto = ""
End Sub
Dica: Se tivessemos utilizado um 'control array' poderiamos ter usado um
lao For/Next para diminuir o cdigo.
Ex:
for x=0 to 5
text1(x).text=""
next
57
End Sub
14-Cdigo associado a opo Sair do menu.
Private Sub mnusair_Click()
End
End Sub
15-Funo para Validar o CGC.
Podemos implementar nosso sistema com uma funo que valide o nmero do CGC do Cliente.
A funco para validao pode ser colocada no evento Lostfocus do controle Maskedbox CGC
chamando a funo Calculacgc e passando como parmetro o nmero do CGC digitado da seguinte
forma:
i as integer
prod as integer
mult as integer
digito as integer
58
End Function
59
6 ) SQL
Strutured Query Language - Otimize sua aplicao usando a SQL em seu cdigo e agilize o acesso
a seus dados. Aprenda a manipular as principais instrues da linguagem SQL de uma forma prtica.
Veja nesta aplicao como incluir, atualizar, excluir dados de suas tabelas usando a SQL. Deixa a
SQL fazer todo o servio.
Utilizando a SQL:
Estrutura da tabela.
Definicao da estrutura da tabela.
Vamos definir uma tabela com o nome de agenda que estar armazenada no banco de dados
Controle.mdb e que possuir a seguinte estrutura:
--------------------------------------------------------nome do campo
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
ativando 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 :
INSERT INTO agenda ( sobrenome, nome, telefone, nascimento, endereco, cep,
uf, e_mail, pais, obs, foto ) SELECT parsobrenome AS Expr1, parnome AS
Expr2, partelefone AS Expr3, parnascimento AS Expr4, parendereco AS Expr5,
parcep AS Expr6, paruf AS Expr7, pare_mail AS Expr8, parpais AS Expr9,
parobs AS Expr10, parfoto AS Expr11;
2-Consulta Atualizao:
UPDATE Agenda SET Agenda.sobrenome = parsobrenome, Agenda.nome = parnome,
Agenda.telefone
=
partelefone,
Agenda.nascimento
=
parnascimento,
Agenda.endereco = parendereco, Agenda.cep = parcep, Agenda.uf = paruf,
Agenda.e_mail = pare_mail, Agenda.pais = parpais, Agenda.obs = parobs,
Agenda.foto = parfoto WHERE ((Agenda.sobrenome=[parsobrenome]));
3-Consulta Excluso:
DELETE * FROM agenda WHERE sobrenome=parsobrenome;
60
-Image
-CommomDialog
-CrystalReport
-ComboBox
-Picture
(Figura 1.0)
61
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
**
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
62
-------------------------------------------------------------------------(**) Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao
nome do respectivo controle TextBox,MaskEdbox ou CommandButton.
(#) Estes botes de comando so colocados no controle picture2 e os demais no controle
picture1.
Codigo da Aplicacao
Codificando a sua aplicao.
Para inserir as linhas de cdigo basta clicar duas vezes no controle correspondente do formulrio.
1-Cdigo da seo General Declarations do formulrio
Option Explicit
Public banco As Database
Public area As Workspace
Public tabela As Recordset
Public consulta As QueryDef
Public atualiza As Boolean
Public alterar As Boolean
Public fotos As String
Public marca As Variant
Define as variveis que sero visveis em todo o formulrio.
2-Cdigo do evento Load do formulrio.
Private Sub Form_Load()
Set area = DBEngine.Workspaces(0)
Set banco = area.OpenDatabase("C:\vb16\CONTROLE.MDB")
Set tabela = banco.OpenRecordset("Agenda", dbOpenTable)
tabela.Index = "sobrenome"
enche_combo cmbestados, "estados", "uf"
enche_combo cmbpaises, "paises", "pais"
If tabela.RecordCount = 0 Then
MsgBox "O arquivo esta vazio ... vamos comecar a trabalhar..."
Else
tabela.MoveFirst
End If
mostra_reg
End Sub
3-Cdigo da procedure para mostrar os registros.
Public Sub mostra_reg()
Dim nomefoto As String
If Not IsNull(tabela![sobrenome]) Then
sobrenome = tabela![sobrenome]
Else
sobrenome = ""
End If
If Not IsNull(tabela![nome]) Then
nome = tabela![nome]
Else
nome = ""
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
63
End If
If Not IsNull(tabela![endereco]) Then
endereco = tabela![endereco]
Else
endereco = ""
End If
If Not IsNull(tabela![cep]) Then
cep = tabela![cep]
Else
cep = ""
End If
If Not IsNull(tabela![uf]) Then
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
4-Cdigo da procedure para preencher as caixas de combinao.
Private Sub enche_combo(combo As Control, data As String, campo As String)
Dim arqtemp As Recordset
combo.Clear
Set arqtemp = banco.OpenRecordset(data, dbOpenSnapshot)
Do Until arqtemp.EOF
combo.AddItem arqtemp(campo)
arqtemp.MoveNext
Loop
arqtemp.Close
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
64
combo.ListIndex = 0
End Sub
5-Cdigo da procedure para limpar as caixas de texto.
Sub limpa_reg(janela As Form)
Dim i As Integer
For i = 0 To janela.Controls.Count - 1
If TypeOf janela.Controls(i) Is TextBox Then
janela.Controls(i).Text = ""
End If
Next i
End Sub
6-Cdigo associado ao boto Incluir.
Private Sub inclui_Click()
alterar = False
marca = tabela.Bookmark
limpa_reg frmagenda
foto.Visible = True
Picture1.Visible = False
Picture2.Visible = True
Image1.Picture = LoadPicture("")
sobrenome.SetFocus
End Sub
7-Cdigo associado ao boto Alterar.
Private Sub altera_Click()
alterar = True
sobrenome.Enabled = False
nome.SetFocus
foto.Visible = True
Picture2.Visible = True
Picture1.Visible = False
End Sub
8-Cdigo associado ao boto Excluir.
Private Sub exclui_Click()
If MsgBox("Confirma Exclusao ", vbYesNo, tabela![nome]) = vbYes Then
tabela.Delete
If Not tabela.EOF Then
tabela.MoveNext
ElseIf Not tabela.BOF Then
tabela.MovePrevious
End If
mostra_reg
End If
End Sub
9-Cdigo associado ao boto Gravar.
Private Sub grava_Click()
atualiza = True
If alterar Then
grava_reg 2
alterar = False
sobrenome.Enabled = True
Else
grava_reg 1
End If
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
65
If atualiza Then
foto.Visible = False
Picture1.Visible = True
Picture2.Visible = False
End If
End Sub
10-Cdigo associado ao boto Cancelar.
Private Sub cancela_Click()
tabela.Bookmark = marca
mostra_reg
foto.Visible = False
Picture1.Visible = True
Picture2.Visible = False
sobrenome.Enabled = True
End Sub
11-Cdigo associado ao boto Imprime.
Private Sub imprime_Click()
CrystalReport1.Destination = 0
CrystalReport1.ReportFileName = "c:\vb16\agenda.rpt"
CrystalReport1.Action = 1
End Sub
12-Cdigo associado ao boto Inclui Foto.
Private Sub foto_Click()
Dim filter As String
fotos = ""
filter = "Arquivos BMP (*.BMP)|*.bmp|Todos os arqs.|*.*"
CommonDialog1.filter = filter
CommonDialog1.DefaultExt = "BMP"
CommonDialog1.ShowOpen
fotos = CommonDialog1.filename
If Not fotos = Empty Then
Image1.Picture = LoadPicture(fotos)
Else
Image1.Picture = LoadPicture("")
End If
End Sub
13-Cdigo associado ao boto primeiro(|<).
Private Sub primeiro_Click()
tabela.MoveFirst
mostra_reg
End Sub
14-Cdigo associado ao boto anterior(<).
Private Sub anterior_click()
tabela.MovePrevious
If tabela.BOF Then
tabela.MoveFirst
End If
mostra_reg
End Sub
15-Cdigo associado ao boto proximo(>).
Private Sub proximo_click()
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
66
tabela.MoveNext
If tabela.EOF Then
tabela.MoveLast
End If
mostra_reg
End Sub
16-Cdigo associado ao boto ultimo(>|).
Private Sub ultimo_click()
tabela.MoveLast
mostra_reg
End Sub
16-Cdigo da procedure para gravar os dados nos arquivos.
Public Sub grava_reg(operacao As Integer)
If sobrenome = Empty Then
MsgBox "O sobrenome/Apelido obrigatorio ! "
sobrenome.SetFocus
atualiza = False
Exit Sub
End If
If nome = Empty Then
MsgBox "O nome tambem obrigatorio ! "
nome.SetFocus
atualiza = False
Exit Sub
End If
If endereco = Empty Then
MsgBox "O endereco obrigatorio "
endereco.SetFocus
atualiza = False
Exit Sub
End If
If nascimento = Empty Then
MsgBox "A data de nascimento obrigatria "
nascimento.SetFocus
atualiza = False
Exit Sub
End If
If operacao = 1 Then
Set consulta = banco.QueryDefs("insagenda")
Else
Set consulta = banco.QueryDefs("upagenda")
End If
area.BeginTrans
consulta("parsobrenome") = sobrenome
consulta("parnome") = nome
consulta("parendereco") = endereco
consulta("parnascimento") = CDate(Format(nascimento, "d-m-yy"))
consulta("parcep") = IIf(IsNull(cep), "", cep)
consulta("paruf") = IIf(IsNull(cmbestados.Text), "", cmbestados.Text)
consulta("parpais") = IIf(IsNull(cmbpaises.Text), "", cmbpaises.Text)
consulta("partelefone") = IIf(IsNull(telefone), "", telefone)
consulta("pare_mail") = IIf(IsNull(e_mail), "", e_mail)
consulta("parobs") = IIf(IsNull(obs), "", obs)
consulta("parfoto") = IIf(IsNull(fotos), "", fotos)
consulta.Execute
area.CommitTrans
End Sub
17-Cdigo associado a opo sair do menu.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
67
68
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.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
69
Vamos selecionar os campos da tabela que sero impressos no relatrio - selecione cada
campo e clique no boto Add.
Ao final devemos ter algo parecido com a figura 2.0 abaixo:
Fig-2
A esta altura o relatrio esta praticamente terminado, para visualiz-lo clique no boto Preview
Report. mostrada a tela da figura 3.0 onde aps clicarmos na aba Design podemos notar cinco
sees:
Fig-3
70
Fig-4
71
Fig-5
Fig-6
72
Fig-7
Agora basta digitar a frmula na caixa Formula Text, vamos l, digite: "Pgina: " + e, a seguir
selecione a funo TrimLeft na lista Functions;, ainda na lista Functions, selecione a funo ToText
e finalmente selecione o item PageNumber no final da lista Functions. Ao final deveremoster o
seguinte na caixa Formula Text:
"Pgina: " + TrimLeft (ToText (PageNumber, 0 ) )
A funo PageNumber retorna um valor nmerico do nmero da pgina por isso usamosa funo
ToText para convert-la em uma string , e a seguir usamos a funo TrimLeft para removermos os
espaos a direita.
Vamos verificar a frmula clicando no boto Check , se tudo estiver corretoo crystal informa com a
mensagem No errors found indicando que a sintaxe est correta.
Agora basta clicar no boto Accept e posicionar a frmula no canto esquerdo da seo Page Footer.
Encerrado o relatrio basta salv-lo atravs da opo Save do menu File einformar o nome para o
relatrio.(Nosso caso informa agenda).
Devemos ressaltar que a linguagem de frmulas do Crystal Reports diferente do VisualBasic, assim
por exemplo, se usarmos a propriedade SelectionFormula do Crystalque permite definir condies
para a impresso em nosso relatrio de forma a imprimir somente os nomes iniciados pela letra "J"
teramos algo como:
CrystalReport1.SelectionFormula = "{AGENDA.NOME} >= " & "''" & "J" & "''"
Note que a refrencia a campos da tabela feita entre chaves ({}).
73
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.
A caixa de texto Title lhe permite inserir o ttulo para o relatrio.
Finalmente crie um boto de comando no formulrio que ir disparar a impresso do relatrio com o
nome de Imprime e a seguir associe o seguinte cdigo ao boto de comando:
Private Sub imprime_Click()
CrystalReport1.Destination = 0
CrystalReport1.ReportFileName = "c:\Controle\agenda.rpt"
CrystalReport1.SortFields(0) = "+{Agenda.Sobrenome}"
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
74
CrystalReport1.Action = 1
End Sub
A propriedade Action definida para 1 dispara a impresso do relatrio.
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 (+).
Cdigo do Aluno
Nome do Aluno
Data de Emisso do relatrio
Periodo, Curso, Srie , Bimestre
Nome da Matria Cursada
Nota do bimestre para cada aluno/matria.
S para lembrar voc possui somente o Visual Basic 5.0.E vai ter que usar o Crystal Reports para
gerar o relatrio.
Ah!, esqueci de avisar, o relatrio era para ontem...
- Vamos supor que temos trs tabelas:
Dados Disclipinas/Notas
Cadastro dos alunos
Cadastro de Disciplinas
Cadastro Professores
- Tblnotas
- TblAlunos
- TblCursos
- TblProfessor
TblCursos
codcurso
nomecurso
codprofessor
TblNotas
codaluno
codcurso
nota
ano
bimestre
Observacao
TblProfessor
codprofessor
nome
endereco
telefone
75
J deu para perceber que os dados dos seus relatrios no esto todos em uma nica tabela, e, voc
vai ter que juntar os dados para obter o relatrio que dever ter o seguinte layout:
Nome Escola
BOLETIM ESCOLAR
pag. n
Bimestre
-----------------------------------------------------------------------Nome do Aluno
cod. aluno
data emisso
Perodo
Curso
Srie
Nmero
------------------------------------------------------------------------Nome das disciplinas| Nota
|
OBSERVAES
--------------------|---------|-----------------------------------------.
|
|
.
|
|
.
|
|
-------------------------------------------------------------------------
No espao reservado para observaes devemos informar quando o aluno no atingiu a mdia
mmina para aprovao, nota inferior a 5, e colocar a mensagem:
"NOTA ABAIXO DA NOTA MNIMA - ALUNO EM RECUPERAO".
Alm disso deveremos informar a mdia aritmtica das notas do aluno no bimestre.
Bem, vamos ao trabalho, no VB ative o Crystal Reports atravs da opo Add Ins->Report
Designer... ou crie um atalho na rea de trabalho para chamar o Crystal Reports.
Selecionando a opo New do menu File teremos a tela da figura 1.0 abaixo:
Fig. 1.0
76
A seguir temos um lista de todas as tabelas e consultas gravadas na base de dados que iremos
utilizar (fig 2.0)
Fig. 2.0
No prximo passo, Links, que esta o segredo para que os dados das trs tabelas sejam
incorporados ao nosso relatrio e mantenham a correspondencia entre os dados das mesmas:
O Crystal reconhece os relacionamentos entre as tabelas automaticamente, mas possvel cri-los
nesta etapa, bastando clicar sobre o campo de uma tabela e arrast-lo at o campo correspondente
da outra tabela, apos feito isto uma linha unindo os dois campos indica que o relacionamento foi
criado.
Nesta etapa podemos tambm eliminar as associaes existentes bem como admitir novas bases de
dados ao relatrio.
Naturalmente uma relao vlida somente ser efetivada entre campos indexados (pelo menos um) e
do mesmo tipo.
Fig. 3.0
77
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
78
Vamos selecionar os campos da tabela que sero impressos no relatrio - selecione cada campo e
clique no boto Add. Os campos do nosso relatrio sero os seguintes:
Nome do Campo
Codaluno
Nome
periodo
serie
numero
nomecurso
nota
Ano
bimestre
Tabela de Origem
tblalunos
tblalunos
tblalunos
tblalunos
tblalunos
tblcursos
tblnotas
tblnotas
tblnotas
Fig. 6.0
79
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
80
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
desejado e posicionando-o no relatrio.
Para formatar um campo clique com o boto direito do mouse sobre o campo, o menu da figura 12
surgir com as vrias opes de formatao.
Fig. 12
81
Iremos formatar a seo que inserimos de forma a obter os dados de cada aluno em pginas
distintas, para isso clique com o boto direito do mouse sobre a seo e ative as opes mostradas
na figura 13:
Fig. 13
Vamos agora inserir o campo que calcular a mdia aritmtica das notas dos alunos.
Clique no campo nota e a seguir no boto com smbolo de somatria.
A seguir na janela da figura abaixo(figura 14) selecione a opo average e posicione o campo abaixo
do campo nota.
Fig. 14.
Deveremos tambm inserir uma frmula que ir mostrar a mensagem no espao observaes quando
a nota do aluno para a matria for abaixo da nota mnima (5)
82
Para isso clique na opo do menu Insert e Formula Field, a seguir informe o nome da formula
figura 15:
Fig. 15
Logo a seguir a janela da figura 16 ser mostrada e iremos montar a frmula nela mostrada:
Fig. 16
Observe as janelas Fields, Functions e Operators. Para selecionar um de seus elementos basta
clicar duas vezes sobre o mesmo.
83
Fig.17
Obs.: Para desenhas as linhas e a caixa em torno do nome BOLETIM usamos os botes da barra de
ferramentas do crystal (fig 18).
Fig. 18
Muito bem, e como ficaria o cdigo para imprimir o relatrio boletim.rpt no Visual Basic ? Que tal algo
como:
(Aqui chamamos o nosso controle Crystal Reports de CR1)
cr1.WindowState = 2
'janela maximizada
cr1.WindowControlBox = True
'imprime na tela
cr1.Action = 1
'inicia impresso
Obs:
No esquea de ao gerar o seu relatrio deixar ativa a opo Verify on Every Print do menu
Database ;
Desative opo Save Data with Closed Report na opo Database->Set Location... clique no
boto Same as Report.
84
O Visual Basic utiliza o formato do banco de dados do Access, isto significa que os objetos:tabelas,
consultas, ndices, etc., so armazenados em um nico arquivo MDB o qual considerado como o
banco de dados.
No Dbase,FoxPro e Clipper o banco de dados pode ser constitudo de muitos arquivos; arquivos de
dados(DBF), arquivos de ndices(NDX ou NTX) , etc.
Esse formato de banco de dados considerado um banco de dados externo do tipo ISAM.(Indexed
Sequential Access Method)
Ao usar o Controle de Dados para acessar uma base de dados padro Xbase voc dever fornecer
as seguintes informaes ao Visual Basic:
1 - Propriedade Connect
2 - Propriedade Databasename -
3 - Propriedade RecordSource -
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
Dbase III=XBS200.DLL
Obs: Se durante a instalao do VB voc optou pela instalao dos arquivos ISAM, o Setup colocar
automaticamente as entradas no arquivo VB.INI, mas lembre-se que ao distribuir a sua aplicao
voc dever instalar um arquivo INI com o mesmo nome do seu arquivo executvel no diretrio
Windows do usurio. (Ou informar o diretrio usando a propriedade IniPath).
Ex:DBEngine.INIPath=path)
Alm disso verifique se o arquivo XBS200.DLL est presente no diretrio System do Windows caso
contrrio voc obter a mensagem de erro: "Can't find installable ISAM".
Exemplo de arquivo INI:
[Installable ISAMs]
Dbase III=C:\WINDOWS\SYSTEM\XBS200.DLL
Dbase IV=C:\WINDOWS\SYSTEM\XBS200.DLL
FoxPro 2.0=C:\WINDOWS\SYSTEM\XBS200.DLL
FoxPro 2.5=C:\WINDOWS\SYSTEM\XBS200.DLL
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
85
Btrieve=C:\WINDOWS\SYSTEM\BTRV200.DLL
Alm disso devemos incluir a seo abaixo no arquivo INI:
[Dbase ISAM]
Deleted=On
Isto evita que os registros deletados que ainda no foram removidos do arquivo apaream nos seus
dados. (A eliminao fsica requer a execuo de procedimentos do prprio Dbase/Clipper.)
Finalizando, tenha em mente que o acesso a arquivos externos do tipo ISAM apresentam algumas
restries, tais como:
No suportam os objetos: QueryDef, Relation, Container e Document
No suportam os mtodos: CompactDatabase , RepairDatabase, CreateQueryDef, OpenQueryDef e
DeleteQueryDef
No suportam a criao de ndices.(Acesso via Data control). (Neste caso voc pode controlar a
ordem na qual os registros sero exibidos utilizando uma instruo SQL com propriedade
Recordsource)
Desenhando a interface
Vamos supor que voc quer acessar o arquivo agenda.dbf (Arquivo padro Dbase) que est no
diretrio teste no drive c.(C:\teste) usando o controle de dados.
O arquivo agenda possui a seguinte estrutura:
----------------------------------Nome do campo
Tipo
Tamanho
----------------------------------Nome
Caracter
30
Endereco
Caracter
30
Telefone
Caracter
11
----------------------------------Vamos montar o formulrio Agenda conforme descrito abaixo:
- Inicie um novo projeto no Visual Basic. Grave o formulrio Form1 como Agenda, e a seguir insira o
controle de dados como indicado abaixo:
86
87
label
Name
label3
Caption
"Telefone"
Autosize
True
-----------------------------------------------------------------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
comum o nome e o tipo.
(***) Os botes de comandos tambm so um control array como as caixas de texto.
Cdigo do projeto.
Vamos usar o mnimo de cdigo possvel, apenas para ilustrar o funcionamento da conexo do motor
Jet com o arquivo agenda.dbf.
1 - Cdigo da seo de declaraes do formulrio
Option Explicit
Private rs As Recordset
2 - Cdigo do evento Activate do Formulrio.
Private Sub Form_Activate()
Set rs = Data1.Recordset 'designamos o conjunto de registro
' varivel recordset rs .
'(isso melhora o desempenho)
If rs.RecordCount = 0 Then
MsgBox "O arquivo vazio , inserir registro .", vbExclamation
Command1_Click (0) 'boto p/incluir registro
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
88
End If
End Sub
Como o controle de dados no pode lidar com um conjunto de registros vazio, se o arquivo estiver
vazio ocorrer uma mensagem de erro. Por isso o evento Activate verifica se a propriedade
Recordcount indica que o arquivo est vazio, em caso positivo emitimos uma mensagem ao usurio
(mgsbox) e "foramos" a incluso de um registro no arquivo. (Command1_click(0)).
3 - Cdigo associado aos botes Incluir , Excluir e Sair.
Private Sub Command1_Click(Index As Integer)
Select Case Index
Case 0
' boto incluir registro
rs.AddNew
Text1(0).SetFocus 'foca caixa de texto vinculada ao nome
Case 1
'boto excluir registro
If MsgBox("Confirma excluso deste registro ? " & rs!nome, _
vbQuestion + vbYesNo + vbDefaultButton2) = vbYes Then
rs.Delete 'exclui registro do arquivo
rs.MoveNext
If rs.EOF Then
If rs.BOF Then
MsgBox "O arquivo vazio , inserir registro .",
vbExclamation
Command1_Click (0)
'incluir registro
Else
rs.MoveLast
End If
End If
End If
Case 2 'boto sair do sistema
End
End Select
End Sub
Obs:
89
2 - Voc dever informar tambm qual o tipo de arquivo ao qual voc esta se conectando.(DbaseIII,
DbaseIV, etc.) Veja abaixo como ficar o cdigo para o nosso caso:
Dim db as Database
Set
db=DBEngine.Workspaces(0).Opendatabase
"DbaseIII" )
("C:\TESTE",false,false,
3 - Finalmente utilize o mtodo OpenRecordset e informe o nome do arquivo DBF, sem extenso, que
voc quer acessar. ( AGENDA )
Dim rs as Recordset
Set rs= db.OpenRecordset("agenda", dbOpenTable )
Desenhando a interface
Utilizaremos o mesmo arquivo agenda.dbf que se encontra no diretrio c:\teste.
- Inicie um novo projeto no Visual Basic.Grave o formulrio Form1 como Agenda2, o qual dever ter a
seguinte aparncia:
Fig-5
- Adicione ao Form1 os objetos e configure as propriedades conforme a tabela 2.0:
Tabela 2.0 - Objetos e propriedades do formulrio Agenda2
-----------------------------------------------------------------Objeto
Propriedade
Configurao
-----------------------------------------------------------------Form
Name
Agenda
Caption
"Agenda"
-----------------------------------------------------------------label
Name
label1
Caption
"Nome"
Autosize
True
-----------------------------------------------------------------label
Name
label2
Caption
"Endereo"
Autosize
True
-----------------------------------------------------------------label
Name
label3
Caption
"Telefone"
Autosize
True
-----------------------------------------------------------------TextBox
Name
TEXT1
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
90
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"
-----------------------------------------------------------------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
comum o nome e o tipo.
(***)(****) Os botes de comandos tambm so um control array como as caixas de texto.
Cdigo do projeto.
Vejamos agora o cdigo associado a cada evento ou boto de comando.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
91
92
93
94
Se tudo estiver certo o Access informa que o arquivo foi anexado com sucesso.
Na janela banco de dados o arquivo anexado visualizado como:
95
96
9 ) SETUP WIZARD
Veja como gerar os discos de distribuio e o programa de instalao para a sua aplicao usando o
SETUP WIZARD . Que tal um programa de instalao para o seu sistema em portugus ?.
A questo da distribuio.
Voc acabou de desenvolver uma aplicao em Visual Basic , testou , depurou e, finalmente, est
pronto para distribu-la aos usurios finais.
Geralmente tais usurios no possuem o Visual Basic instalado em suas mquinas. (voc deve
sempre considerar essa situao como a padro.)
Voc ter ento que distribuir com sua aplicao uma srie de arquivos DLL, e, se sua aplicao usar
controles personalizados, ter tambm que distribuir os arquivos de controle VBX/OCX que utiliza.
Para isto ou voc cria um programa de instalao com o Setup Wizard que determina os arquivos
que voc precisa distribuir ou tenta determinar por si mesmo quais os arquivos precisam ser
distribuidos.
Se voc acha que pode fazer isso sem ajuda do Setup Wizard, e, s para voc sentir a complexidade
da tarefa, vamos tentar relacionar o que voc ter que selecionar para distribuir:
1 - Arquivo executvel (EXE) , de banco de dados (MDB) e os arquivos INI.
2 - Os arquivos DLL indispensveis a qualquer aplicao:
(Considerando a verso 4.0 do Visual Basic 16/32)
- VB40016.DLL ou VB40032.DLL
- VB4EN16.DLL ou VB4EN32.DLL
- OC25.DLL
- OLE2.DLL
- VAEN2.DLL
- VAEN2.OLB
3 - Os arquivos DLL/OCX especificamente exigidos pela sua aplicao:
Ex.: Se voc usar o objeto de acesso a dados - DAO e o Crystal Reports:
- DAO2516.DLL ou DAO2532.DLL
- CRYSTL16.OCX ou CRYSTL32.OCX
4 - Os arquivos dependentes de outros arquivos DLL j incluidos:
Ex: Se voc usou a DAO (DAO2516.DLL) ter que incluir:
-VAEN2.OLB
-MSAJT200.DLL
-MSJETERR.DLL
-MSJETINT.DLL
-VBAJET.DLL
-VBDB16.DLL
Se voc ainda no desistiu, realmente voc corajoso, v em frente e, boa sorte, voc vai precisar.
O Setup Wizard fornecido com o Visual Basic e voc poder us-lo para criar um programa que
instalar sua aplicao na mquina do usurio.
As tarefas bsicas que o Setup Wizard faz so:
97
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
surgir tela inicial (Introduction) clique no boto Next e o Setup Wizard mostra a tela 1.0, abaixo:
Tela 01
Nesta tela selecionamos a opo Create a Setup Programa e a seguir clicamos no boto Browse...
para selecionar o projeto agenda.vbp que est no diretrio C:\VB5. Vamos clicar em Next para ir para
o prximo passo.
2 - Na tela 2.0, abaixo, selecionamos a opo Disk Directories (\Disk1, \Disk2, etc.) para gerar os
arquivos em diretrios (Disk1, Disk2, etc.) no disco rgido, a seguir clicar no boto Next para
continuar:
Tela 02
98
3 - Na tela 3.0, selecionamos o diretrio (C:\TEMP) onde os diretrios sero criados e os arquivos
copiados e tambm o tamanho dos discos (1.44) usados para distribuio.
Tela 03
4 - Na tela 4.0, como nossa aplicao no usa drivers OBDC nem conexo via ISAM no
selecionamos nada, apenas clicamos em Next para prosseguir.
Tela 04
99
5 - Ao surgir a prxima tela clicamos em Next pois nossa aplicao no usa controles ActiveX. A tela
5.0 informa os arquivos de controle utilizados por nossa aplicao e a DLL do arquivo DAO usado em
nossa aplicao.
Tela 05
Para ver detalhes dos arquivos selecionados clique no boto File Details...
6 - Na tela 6.0, o Setup Wizard mostra todos os arquivos que nossa aplicaoprecisar para
funcionar. Voc pode remover qualquer arquivo que porventura j exista na mquina do usurio. Para
distribuir o arquivo de dados clicamos no boto Add... e selecionamos o arquivo controle.mdb.
Para ver detalhes sobre cada arquivo selecione-o e clique em File Details...
Para ver a dependncia de cada arquivo, selecione o arquivo e observe a caixa de texto Dependency
Of: Para ver o nmero de arquivos e a quantidade total de espao em disco necessria para a
instalao de sua aplicao clique em Summary info...
Tela 05
Tela 07
Tela 08
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:
Setup
10 ) DBGRID
Mil e uma utilidades. Veja como utilizar o DBGrid suas propriedades e como configur-lo. Tire suas
dvidas atravs de projeto explicado passo a passo.(Projeto para Controle bancrio.)
Introduo
Utilizao da Grade Vinculada aos dados: DbGrid.
A Grade Vinculada aos dados - DbGrid oferece um meio para visualizar vrios registros ao mesmo
tempo. Assemelha-se ao commando Browse usado no Clipper/FoxPro e ao modo tabela do Access.
O seu primo pobre no VB seria o controle Grid, e, apenas para dimensionar a diferena, o Grid est
limitado a 16352 linhas e 5450 colunas no Dbgrid a quantidade de linhas esta condicionada aos
recursos do sistema e a 1700 colunas, sem contar que o desempenho do Dbgrid e bem superior ao
do Grid.
Enquanto o Grid precisa ser configurado quase que totalmente via cdigo, para usar o Dbgrid basta
arrastar o cone do Controle para o seu formulrio e definir a propriedade DataSource para identificar
o controle de dados que contm os dados que voc quer exibir, e pronto, a grade exibe todos os
campos dos registros do recordset.
Nota:
Utilizao e Configurao.
Vejamos passo a passo como utilizar o Dbgrid com o controle de dados vinculados
- Data Control.
De incio selecione o objeto controle de dados na Toolbox do Visual Basic e
acrescente-o ao seu formulrio.(Fig.1)
fig1.
Defina a seguir as propriedades:
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 .
Connect - Necessria quando o banco de dados no for do Access. Ex - Para banco de dados
padro Dbase - Connect=dBASEIII.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
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
especificar opes avanadas de tratamento do Recordset sem uma linha de cdigo sequer.
Fig-6
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
propsitos. Fica a seu critrio increment-lo. Vamos l.
- Inicie o VB e acione a opo Insert->MDI Form para inserir um formulrio MDI que conter os
demais formulrios do projeto.
- O nosso formulrio dever ter o aspecto mostrado na figura 1.0 abaixo:
Fig-6
- Insira os controles no formulrio e configure suas propriedades como indicado a seguir na tabela
1.0:
Tabela 1.0 - Objetos e propriedades do form frmmenu.
--------------------------------------------------------------------------Objeto
Propriedade
Configurao
--------------------------------------------------------------------------MDIForm
Name
frmmenu
Picture
fig 1.0
--------------------------------------------------------------------------(*)SSCommand
Name
SSCommand1(0)
Picture
fig 1.0 - Clientes,Contas,Transaes
BevelWidth
1
-------------------------------------------------------------------------SSCommand
Name
SSCommand1(1)
Picture
fig 1.0 - Gerenciar o movimento
BevelWidth
1
--------------------------------------------------------------------------SSCommand
Name
SSCommand1(2)
Picture
fig 1.0 - Relatrios do Sistema
BevelWidth
1
--------------------------------------------------------------------------SSCommand
Name
SSCommand1(3)
(*) Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um
ndice identificador.
(**) Para usar o Editor de Menus do VB pressione CTRL+E e informe o nome que deseja para o menu
na propriedade Caption e na propriedade Name informe o nome de referncia do menu.
Para criar subitens clique na seta para direita repita o passo anterior
e a seguir no boto Next para ir para o prximo subitem.
Obs.: Para sublinhar a primeira letra do nome do menu insira o caractere
& antes da letra. Ex: &Cadastros
-> exibe Cadastros.
2 - Agora basta atribuir o cdigo a cada boto de comando, no nosso caso s usaremos o boto que
gerencia o movimento e o boto para sair do sistema.
- No boto que gerencia o movimento - Menu Movimento - iremos carregar o formulrio frmtrans.
- No boto para sair do Sistema inserimos o cdigo que encerra a aplicao. Veja abaixo:
Private Sub SSCommand1_Click(Index As Integer)
Select Case Index
Case 0 'boto 1 - Cadastramentos (por sua conta)
Case 1 'Gerencia movimento
frmtransa.Show
Case 2 'Relatrios
Case 3 'Ajuda
Case 4 'Sair da aplicao
end
End Select
End Sub
Vejamos agora a definio dos campos de cada tabela e a criao do banco de dados.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
1 - O formulrio frmtrans o formulrio principal de nossa aplicao, pois atravs dele iremos
gerenciar a movimentao das contas. Ele ter o aspecto da fig1.0 abaixo:
Fig-1.0
(*)Constituem um "control array" - Controles com o mesmo nome e do mesmo tipo, dotados de um
ndice identificador.
(**)Todos os controles Label possuem a propriedade AutoSize=True e Caption sendo igual ao nome
do respectivos controle descrito na fig 1.0.
2 - O formulrio frmincl o formulrio que ser usado para incluir lanamentos.
Caption
""
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 nome
do respectivos controle descrito na fig 2.0.
3 - O formulrio frmexcl o formulrio que ser usado para excluir lanamentos.
Tem o seguinte aspecto mostrado na fig 3.0 abaixo:
Fig-3.0
Explicit
area As Workspace
db As Database
tabela As Recordset
consulta As QueryDef
alterareg As Boolean
sql As String
cliente As Long
conta As Long
11 ) DBLIST
Tire suas dvidas de como utilizar o controle DBLIST. Veja como configurar as principais
propriedades. Acompanhe exemplo comentado passo a passo. Veja exemplo de Pesquisa Dinmica.
Aprenda praticando.
Introduo.
A Caixa de Listagem Vinculada aos dados - DBList tem funo idntica a Caixa de Listagem ListBox, a qual seja, apresentar ao usurio uma lista de opes. A principal diferena consiste no fato
de a Caixa de Listagem Vinculada aos dados buscar as informaes em um recordset, enquanto
que a Caixa de Listagem, obtm as informaes atravs de uma srie de instrues AddItem.
Vejamos como utilizar o controle DBList no roteiro a seguir:
1- Em um formulrio insira o controle Data Control e configure as propriedades:
- Name
- DataBasename
- RecordSource
- RecordSetType
Vamos mostrar um exemplo de utilizao tpica do Controle DBList atravs de um projeto que tem
por objetivo cadastrar os funcionrios de uma empresa.
Iremos cadastrar o cdigo, nome, endereo e setor do funcionrio, para isso definimos o banco de
dados CADFUN.MDB e a tabela tblcad com os campos indicados da seguinte forma:
Tabela TblCad - CADFUN.MDB
----------------------------Campo
Tipo
Comp.
----------------------------Codigo
Long
Nome
Text
40
Endereco
Text
40
Setor
Text
12
-----------------------------
Fig. 1.0
-Insira os controles no formulrio e configure suas propriedades como indicado a seguir na tabela 1.0:
Tabela 1.0 - Objetos e propriedades do form frmcad.
--------------------------------------------------------------------------Objeto
Propriedade
Configurao
--------------------------------------------------------------------------Form
Name
frmcad
Caption
"Cadastro de Funcionrios"
--------------------------------------------------------------------------Data
Name
Data1
Caption
Data1
Visible
False
--------------------------------------------------------------------------DBlist
Name
DBlist1
RowSource
Data1
MatchEntry
0 - Basic Matching
--------------------------------------------------------------------------CommandButton
Name
Command1
Caption
&Sair
--------------------------------------------------------------------------TextBox
Name
Text1
Text
"
--------------------------------------------------------------------------TextBox
Name
Text2
Text
"
--------------------------------------------------------------------------TextBox
Name
Text3
Text
"
--------------------------------------------------------------------------Label
Name
Label1
Caption
Cdigo
AutoSize
True
--------------------------------------------------------------------------Label
Name
Label2
Caption
Nome
AutoSize
True
--------------------------------------------------------------------------Label
Name
Label3
Caption
Endereo
AutoSize
True
--------------------------------------------------------------------------Frame
Caption
Funcionrios
Name
Frame1
---------------------------------------------------------------------------
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.
Para isso iremos fazer as seguinte alteraes:
Fig. 4.0
- Acesso Exclusivo/Compartilhado.
Exemplo de Projeto - Comportamento Acesso Exclusivo e Compartilhado
Este projeto bem simples mas serve para analisarmos como o Jet se comporta quando da abertura
de arquivos em modo exclusivo e compartilhado em ambiente multiusurio.
Iremos abrir o arquivo Biblio.mdb que esta no diretrio c:\teste em modo exclusivo e ver o como o
Jet responde a uma tentativa de abrir o mesmo arquivo por outro usurio primeiro em modo exclusivo
e depois em modo compartilhado. Depois inverteremos os modos para ver o resultado.
Voc no precisa instalar este aplicativo em uma rede para testar o compartamento da abertura dos
arquivos no modo exclusivo e no modo compartilhado.
Para a coisa funcionar basta voc abrir duas instncias do aplicativo e colocar as janelas lado a lado.
Vamos ao Projeto, simples por sinal:
1-Crie um novo projeto denominado redes1.vbp. No form1 crie os objetos e as propriedades como
listadas na tabela 1.0 e grave o formulrio com o nome redes1.frm.
Tabela 1.0 - Objetos e propriedades do form redes1.frm.
-------------------------------------------------------------------------Objeto
Propriedade
Configurao
-------------------------------------------------------------------------Form
Name
redes1.frm
Caption
Arquivo Fechado
-------------------------------------------------------------------------Frame
Name
frame1
Caption
Modo de Acesso
-------------------------------------------------------------------------OptionButton
Name
optexclusivo
Caption
Modo Exclusivo
Value
True
-------------------------------------------------------------------------OptionButton
Name
optcompartilhado
Caption
Modo Compartilhado
-------------------------------------------------------------------------CommandButton
Name
cmdAbrir
Caption
"&Abrir Arquivo"
-------------------------------------------------------------------------CommandButton
Name
cmdFechar
Caption
"&Fechar Arquivo"
Enabled
False
-------------------------------------------------------------------------CommandButton
Name
cmdSair
Caption
"&Sair"
Cancel
True
-------------------------------------------------------------------------2 - Eis cdigo do projeto :
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
fig 1.0
aberto
tarde. "
Case 3260
msg = "O registro esta atualmente bloqueado, tente mais
Case Else
msg = Err.Description
End Select
MsgBox msg, vbExclamation
fig 1.0
e ative a opo
- Tente abrir a tabela na janela do lado direito com as duas primeiras opes :
dbDenyRead e dbDenyWrite. Voc ser informado que no pode abrir a tabela nestes modos.
- Agora tente abrir a tabela do lado direito com a opo de somente Leitura dbReadOnly, desta vez
voc conseguira abrir a tabela.
- Tente incluir um registro clicando em incluir registro e uma mensagem o informar de que a tabela
esta aberta no modo somente leitura e voc no pode incluir registros.
Nota : Da mesma forma voc pode usar as opes descritas acima para criar um dynaset. Ex: Para
criar um dynaset com a opo dbDenyWrite
Set rs = db. OpenRecordset("SELECT * FROM Tabela", DbOpenDynaset, dbDenyWrite)
13 ) ERROS
Tratamento. - Como interceptar erros, a instruo On Error, o Objeto Err, Determinando o tipo de
erro, localizando os erros, como encerrar o tratamento de erros, os principais erros relacionados a
banco de dados e redes, informaes recheadas de exemplos para voc no ter dvidas.
Introduo.
Voc terminou de desenvolver aquele super projeto e esta ansioso para mostrar para o seu chefe.
Naturalmente voc depurou o seu cdigo e testou tudo antes de gerar os discos de instalao, afinal
o seu emprego est em jogo.
A instalao foi um sucesso, basta agora carregar a aplicao, ento voc clica no cone da aplicao
e surge na tela a fatdica mensagem:
Data error event hit in D:\PROJETO1\TESTES\CLIENTES.MDB isn't a valid Path...",
imediatamente voc percebe que esqueceu de mudar o caminho para a abertura do banco de dados,
e agora... todos os olhos se voltam para voc e... bem ai voc acorda suando frio, ainda bem que foi
tudo um sonho ... ou um pesadelo.
Veja bem, quando ocorre um erro durante a execuo de um programa Visual Basic, o controle vai
para uma lgica de tratamento de erros que consiste em exibir uma mensagem descrevendo a causa
do erro e encerrando o programa a seguir.
Este o procedimento padro adotado pelo Visual Basic durante a execuo de um programa
compilado; no o leve a mal, ele apenas esta sendo gentil solicitando a sua interveno.
Voc pode, e deve, intervir neste processo construindo uma lgica de interceptao e tratamento de
erros no seu cdigo, que ir interceptar os possveis erros e trat-los de uma forma mais elegante que
a adotada pelo procedimento padro do Visual Basic.
Tudo isto se torna mais enftico quando se trabalha com banco de dados no VB, pois neste caso,
teremos muitas condies de erro durante a execuo da aplicao.
Lembre-se, no existem nem aplicaes nem programadores nem usurios perfeitos.
Interceptando erros.
Para interceptar um erro no Visual Basic voc usa a instruo On Error.
Quando uma instruo On Error est em vigor e ocorrer um erro o VB vai executar as aes
determinadas pela instruo.
Para estar em vigor a instruo On Error deve ser executada antes da ocorrncia de um erro na
mesma funo ou sub-rotina onde ocorreu o erro ou em uma funo ou sub-rotina que tenha
chamado a funo ou sub-rotina onde o erro tiver ocorrido.
A instruo On Error tem a seguinte sintaxe:
On Error goto label
Traduzindo-a teremos:
Quando ocorrer um erro, transfira a execuo para a linha aps a etiqueta.
A etiqueta um identificador alfanumrico que termina com dois pontos (:).
(Ex.: Trataerro: )
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
Quando ocorre um erro o VB coloca o nmero do erro na propriedade Number do objeto Err,
conhecendo o nmero do erro voc pode determinar o tipo de erro e tomar a deciso quanto ao seu
tratamento. Vejamos um exemplo prtico:
Vamos definir uma tabela com o nome de erro que estar armazenada no banco de dados
Controle.mdb (j criado anteriormente ver Definio de bando de dados e Tabelas) e que possuir a
seguinte estrutura:
--------------------------------------------------------nome do campo
Tipo de Dados
Tamanho do Campo
--------------------------------------------------------codigo
Long
04
nome
Caracter
30
--------------------------------------------------------1 - Defina um ndice para o campo cdigo
ativando as opes: Unique, Primary index. e Requerid
Desta forma estamos criando uma chave primria para o campo codigo.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
Fig.1.0
2 - Suponhamos que o usurio tente incluir um cdigo que j foi utilizado, ao clicar no boto gravar
ocorrer uma mensagem de erro, pois o Jet no permite a duplicao de uma chave primria.
Prevendo tal ao iniciamos o tratamento de erros e interceptando-o retornamos ao usurio a
mensagem da figura 2.0 abaixo:
Fig.2.0
Fazemos isto utilizando a instruo Resume Next colocada aps a mensagem de aviso ao usurio.
Private Sub Command5_Click()
On Error GoTo erro_mdb 'inicia o tratamento de erros
verifica se esta incluindo ou editando caso contrrio no faz nada
If rs.EditMode = dbEditAdd Or rs.EditMode = dbEditInProgress Then
grava_regs
rs.Update
--> linha que ir gerar o erro.
limpa_regs
Form1.Caption = "Tratamento de Erros "
rs.Bookmark = rs.LastModified
load_regs
End If
Exit Sub
erro_mdb:
MsgBox "Erro nmero : " & Str$(Err.Number) & " --> Cdigo j utilizado !!!"
Resume Next
'retorna a ao para a linha de cdigo subsequente aquela que
'gerou o erro
End Sub
Retorna a execuo na linha que vem logo aps linha que gerou o erro
Executa mais uma vez a linha que gerou o erro.
Retorna a execuo da linha que vem aps a etiqueta citada.
Retorna a execuo na linha com o nmero indicado.
Sai da sub rotina atual.
Sai da funo atual.
Sai da propriedade atual.
Redefine a lgica de tratamento de erros.
Elimina o erro sem afetar a execuo do programa.
Encerra a execuo do programa.
Vejamos um exemplo onde simulamos vrias situaes de erro e utilizamos o tratamento de erros
para determinar o nmero do erro a linha onde ocorreu o erro e que gerou o erro.
Note que utilizamos nmeros de linha em nosso cdigo para ser possvel a identificao do nmero
da linha pelo tratamento de erros.
Private Sub Form_Load()
Dim
Dim
Dim
Dim
db As Database
dbName As String
rs As Recordset
s As String
20
' Aqui ocorre um erro, pois a tabela no existe neste banco de dados
Set rs = db.OpenRecordset("erros", dbOpenTable)
30
40
rs![cdigo] = "XYZ"
60
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
subsequente que gerou o erro permitindo assim que o aplicao seja executada at o seu final
nmero
Mensagem
-------------------------------------------------------------------------
Erros
3005
3006
3008
3009
3010
3015
3019
3020
3021
genricos.
Database name' isn't a valid database name.
Database 'name' is exclusively locked.
Table 'name' is exclusively locked.
Couldn't lock table 'name'; currently in use.
Table 'name' already exists.
'Index name' isn't an index in this table.
Operation invalid without a current index.
Update or CancelUpdate without AddNew or Edit.
No current record.
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
relacionados a Permisses
Record(s) can't be added; no Insert Data permission on 'name'.
Record(s) can't be edited; no Update Data permission on 'name'.
Record(s) can't be deleted; no Delete Data permission on 'name'.
Couldn't read definitions; no Read Definitions permission for
table or query 'name'.
3111 Couldn't create; no Create permission for table or query 'name'.
3112 Record(s) can't be read; no Read Data permission on 'name'.
-------------------------------------------------------------------------
14 ) OLE
Conceitos. - O que OLE ? Automao OLE ?, DDE - voc ainda usa ?, mesclando os dados de suas
tabelas com arquivos feitos no WORD, no reivente a roda use os recursos que j esto sua
disposio, VB com Excel, VB com PowerPoint, tudo com exemplos codificados para voc ver como
se faz.
Introduo.
OLE ! no, no o grito da torcida incentivando o seu time, nem a platia a gritar em uma tourada.
Mas o que OLE ento ? Esta pergunta no to simples de responder, e, se pudssemos escrever
um livro sobre o assunto no o esgotaramos, ento vamos por partes.
No princpio o OLE 1.0 surgiu para substituir o DDE (Dinamic Data Exchange), devido as suas
limitaes. Nessa poca OLE Object Linking and Embedding. Introduzia dois conceitos:
1 - Linking
2 - Embedding -
Neste contexto surgem as conceitos de objeto vinculado e do objeto incorporado, ento vejamos:
Objeto Vinculado - So informaes (objeto) criadas em um arquivo (arquivo origem) e inseridas em
outro arquivo (arquivo destino).
Embora o objeto vinculado no se torne parte do arquivo de destino, existe um vnculo, uma
conexo entre os dois arquivos de forma que o objeto vinculado no arquivo de destino
automaticamente atualizado quando o arquivo de origem atualizado.
Objeto Incorporado - So informaes (objeto) inseridas em um arquivo (arquivo de destino. Ao ser
incorporado o objeto se torna parte do arquivo de destino.
Ao clicar duas vezes no objeto incorporado, ele aberto no programa de origem em que foi criado.
Qualquer alterao feita no objeto incorporado se refletir no arquivo de destino.
Como exemplo podemos considerar um documento do Word aonde inserimos uma figura do
PaintBrush.
- Se vincularmos a figura ao documento , apenas seus vnculos so gravados junto com o
documento.
- Ao contrrio se incorporarmos a figura ao documento ela gravada juntamente com o texto.
- D para concluir que o tamanho dos arquivos com objetos incorporados muito maior que aqueles
com objetos vinculados.
Outro conceito importante no OLE o conceito de Cliente e Servidor.
- Cliente -
- Servidor -
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 !
Instruo do WordBasic
Instruao do VBA 97
Bold
insert "AUTOMAO OLE"
FilePrintPreview
Application.Selection.Font.Bold=True
Selection.TypeText Text:="AUTOMAO OLE"
ActiveDocument.PrintPreview
Fig.1.0
End 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
Fig.4.0
Observe que ao clicar no boto o procedimento relat ativado, ento devemos criar uma procedure
com o nome de relat. Para isto clique em Tools-> Add Procedure e informe o nome Relat clicando a
seguir em o OK e insira cdigo abaixo :
Cdigo associado ao boto que ativa automao OLE:
Public Sub relat()
Dim
Dim
Dim
Dim
Dim
Dim
db As Database
rs As Recordset
wordobj As Object
i As Integer
texto As String
ColumnWidths(3) As String
End Sub
Fig.4.0
Name
command3
Caption
"&Exportar"
-------------------------------------------------------------------------2-A seguir iremos associar ao evento Click do boto o seguinte cdigo:
Cdigo associado ao boto que ativa automao OLE:
Private Sub Command2_Click()
Call export
End Sub
15 ) GRFICOS NO VB
Aprenda como criar grficos no Visual Basic 5.0 usando o MSChart. Veja como criar grficos de
barras, torta, pizza, 3D, de linha, etc. Configurao e utilizao, tudo com exemplos para esclarecer
todas as suas dvidas.
Introduo.
Para construir grficos em sua aplicao voc pode usar o Crystal Reports, o Excel via automao
OLE ou o controle grfico do VB, o MSChart.
O MSChart permite apresentar seus dados em forma de grfico como uma planilha do Excel (linhas e
colunas); grficos tridimensionais, grficos de torta, barra, pizza, etc.
Antes de iniciar voc deve adicionar o controle Microsoft Chart Control ao seu projeto da seguinte
maneira:
Selecione a opo Components do menu Project, selecione o controle Microsoft Chart Control e
clique em OK e adicione o controle ao seu formulrio.
A figura 1.0 abaixo mostra a barra de ferramentas e a configurao inicial do MSChart:
Agora basta definir a fonte de dados que alimentar o grfico, geralmente uma tabela, e fazer a
configurao do Controle MSChart.
O MSChart no l aquela maravilha, mas consegue resolver, eu diria uns 70% dos problemas
relacionados a confeco de grficos no Visual Basic.
Utilizao e Configurao.
Vejamos agora as propriedades do MSChart e de
como configur-lo.
Fig. 4.0
Barra - Valores de 0 e 1
Linha - Valores de 2 e 3
reas - Valores 4, 5 , 6 e 7
Combinao - Valores 8 e 9
Torta - Valor 14
XY - Valor 16
Aba Chart
Chart Type - Permite escolhar o tipo de grfico usado
Chart Options
Show Legend
- Mostra a legenda no grfico
Show Markers
- Marcas sobre cada coluna do grfico
Stack Series
- Empilhar as colunas
Series em rows
- Inverte apresentao, colunas em linhas
Aba Axis e Axis Grid
Existem diversas propriedades que permitem configurar os eixos de um grfico como:
Espessura e cor de linhas
Definio da escala - Valor Mximo e Mnimo
Diviso da Escala - Valor Maior e Menor
Aba Series e Series Color
Permitem configurar diversas propriedades relacionadas s sries do grfico e a cor interior e da
borda de cada srie
Aba BackDrop
Configura os elementos de fundo e da borda do grfico. O elemento a ser configurado selecionado
na lista Property Name
Aba Text
Atravs da lista Property Name podemos selecionar o ttulo, o rodap, ttulos dos eixos X, Y ou de
um segmento eixo Y e definir um nome para cada item , inclusive definindo o alinhamento e a
orientao do texto atravs do grupo Alignment e Orientation.
Aba Fonts
Permite definir a fonte, estilo, tamanho e efeitos de cor.
Alm destas propriedades temos as seguintes:
Row
RowCount
RowLabel
Data
Column
ColumnCount
ColumnLabel
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
centralizado e orientao de texto na vertical
Como no passo anterior selecione na Aba Text em Property Name selecione X axis Title e em Text
informe - Meses com alinhamento centralizado e orientao vertical
Ainda como no passo anterior selecione a aba Text em Property Name selecione Y axis Ttile e em
Text informe - Reais - R$, com alinhamento centralizado e orientao na horizontal
Define a propriedade ShowLegend para True
Defina Colcount igual a 2 , pois teremos duas sries , Receitas e Despesas
Defina RowCount igual a 3 , pois teremos 3 seqncias de dados - Agosto, Setembro e Outubro
Agora faa Column igual a 1 e Row igual a 1 . Isto define que iremos tratar a primeira seqncia de
dados e a primeira srie que ser a receita:
Defina RowLabel como Agosto
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
Bem, deu para perceber que se quisermos algo mais requintado teremos que usar produtos de
terceiros pois o Mschart deixa a desejar mas eu diria que para coisas simples da para quebrar o
galho.
Ah! ia esquecendo, como imprimir o grfico ??? Insira o controle Picture no seu formulrio e deixao invisvel, e seguir insira um boto de comando com o nome de imprimir e acrescente o seguinte
cdigo a ele:
Private Sub Command2_Click()
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
"Salvador"
"Fortaleza"
"Recife"
"So Paulo"
"Rio de Janeiro"
"Natal"
"Vitria"
"Porto Alegre"
"Manaus"
"Porto Velho"
"Belm"
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
'Transparent
'Fixe Single
'Deixe em branco
Fig. 1.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.
Agora clique na opo Properties... do menu da figura 3.0 . Voc dever obter a tela da figura
4.0, onde na selecionando Columns voc atribui a cada coluna o campo do RecordSource
atribudo ao controle Data2.
Fig. 4.0
5 - Agora falta somente acrescentar o seguinte cdigo ao evento reposition do controle Data1:
Private Sub Data1_Reposition()
Dim SQL As String
SQL = "SELECT * FROM [detalhes do pedido] WHERE [nmero do pedido] = " & Text1.Text
Data2.RecordSource = SQL
Data2.Refresh
End Sub
Fig. 5.0
3 - A seguir insira o cdigo abaixo no evento timer do temporizador: (Aqui fica a seu critrio, use a sua
imaginao... )
Private Sub Timer1_Timer()
Dim CX, CY, Msg, XPos, YPos
ScaleMode = 3
Set ScaleMode to
pixels.
Set DrawWidth.
Set background to red.
Set point size.
Get horizontal center.
Get vertical center.
Clear form.
DrawWidth = 5
ForeColor = QBColor(4)
FontSize = 24
CX = ScaleWidth / 2
CY = ScaleHeight / 2
Cls
Msg = "Bom Dia!"
CurrentX = CX - TextWidth(Msg) / 2 ' Horizontal position.
CurrentY = CY - TextHeight(Msg)
' Vertical position.
Print Msg ' Print message.
Do
Counter = Counter + 1
XPos = Rnd * ScaleWidth
' Get horizontal position.
YPos = Rnd * ScaleHeight ' Get vertical position.
PSet (XPos, YPos), QBColor(Rnd * 15) ' Draw confetti.
' processando
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.
Private Sub Form_Load()
If App.PrevInstance Then
End
End If
End Sub
5 - Para encerrar o programa utilize os eventos MouseMove, MouseDown e KeyDown, pois quando o
usurio pressionar algo ou movimentar o mouse o Screen Saver deve ser encerrado. Insira os
cdigos como descrito abaixo:
Private Sub Form_MouseDown(Button As Integer,Shift As Integer,X As Single,Y
As Single)
End
End Sub
Private Sub Form_MouseUp(Button As Integer,Shift As Integer,X As Single,Y
As Single)
End
End Sub
Private Sub Form_KeyPress(KeyAscii As Integer)
End
End Sub
6 - Como o evento MouseMove ativado quando o form for lido pela primeira vez, insira o cdigo
abaixo no evento MouseMouse para no fechar o programa na sua ativao.
Private Sub Form_MouseMove(Button
Single, Y As Single)
Static conta As Integer
If conta > 3 Then
End
Else
conta = conta + 1
End If
End Sub
As
Integer,
Shift
As
Integer,
As
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.
I As Integer
prod As Integer
mult As Integer
digito As Integer
End Function
If IsEmpty(numero_registros) Then
numero_registros = Conta_Registros(Data1) 'conta os registros
End If
With Data1
If .Recordset.RecordCount Then 'se h registros mostra a posio
.Caption = " Registro : " & (.Recordset.AbsolutePosition + 1) & " /
" & numero_registros
Power Informtica Joo Manoel, 912 S do Livramento (055) 242-5427
Carga do formulrio
Private Sub Form_Load()
'formata o grid
Grid.Columns(0).Width = 2500 'nome
Grid.Columns(1).Width = 1550 'curso
Grid.Columns(2).Width = 1000 'valor
Grid.Columns(0).Alignment = 0 'alinha a esquerda
Grid.Columns(1).Alignment = 0
Grid.Columns(2).Alignment = 1 'alinha
'enche a lista com os itens
With Lista
.AddItem "Matemtica"
.AddItem "Agronomia"
.AddItem "Arquitetura"
.AddItem "Fsica"
.AddItem "Engenharia"
.AddItem "Ingls"
.AddItem "Qumica"
.AddItem "Biologia"
.AddItem "Proc. de Dados"
.AddItem "Psicologia"
.AddItem "Ed. Fsica"
End With
Data1.Refresh
'mostra o boto na coluna definida
Grid.Columns(colindex_lista).Button = True
'define clula selecionada(curso) como negra
Grid.MarqueeStyle = dbgHighlightCell
End Sub
Procedimento para Somar as colunas
Public Sub Soma_Colunas(dbg As DBGrid, dados As Data, nomecampo As String, _
pnl As SSPanel, num_formato As String)
Dim soma As Single
Dim rs As Recordset
ByVal
KeyAscii
As