Anda di halaman 1dari 12

MEDIDA 2.

2 - Cursos
os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

OBJECTIVOS

Reconhecer alguns dos objectos VBA


Automatizar bases de dados recorrendo programao VBA e scripts SQL

O objecto DOCMD
Este objecto permite o acesso a todas as operaes sobre todos os objectos de BD (filtragem,
pesquisa e tratamento de dados,
dos, execuo de consultas de todos os tipos, navegao entre registos,
automatizao de formulrios, impresso, etc.).
Docmd contm apenas mtodos na sua definio, cujo lote de comandos se refere s aces
disponibilizadas pelas macros no programadas do
d Access.
Mtodo Quit - Este mtodo termina a aplicao.
Exemplo: Docmd.quit
Mtodo RunSql - Executa uma consulta de aco ou de definio de dados por especificao de uma
instruo SQL.
Exemplo:
DoCmd.RunSQL "delete from clientes where nome='" & txtNome & "' and bi=" & txtBi executa a query
delete.
Mtodo OpenForm - Abre o formulrio com determinado nome.
Exemplo: docm.openform verClientes abre o formulrio verClientes.
Mtodo Close - Fecha um determinado objecto de BD com um nome especfico.
Exemplos: docmd.close fecha a janela actual

O objecto ADODB
Com o VBA, o programador pode gerir quando e como uma aplicao interage com uma BD, mais
especificamente com os seus objectos. O modelo de programao ADO constitudo por uma biblioteca de
objectos
ectos que proporciona toda a gesto e acesso a um SGBD.
A tabela seguinte apresenta a listagem dos objectos e coleces mais importantes, definidos na
biblioteca de objectos ADO:
OBJECTO
Recordset
Field
Fields
Connection

DESCRIO
Conjunto de registos retornados por uma origem de dados ou query.
Corresponde a uma coluna (campo) num objecto recordset
Coleco contendo todas as colunas de um objecto recordset.
Representa uma ligao a uma BD

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

A aplicao a ser construda consiste numa base de dados onde


onde vo ser registadas as encomendas
efectuadas, os clientes e os fornecedores.
Para este exemplo vamos precisar de criar a tabela clientes com os seguintes campos:

Esta tabela deve ser preenchida com os seguintes registos:

Da tabela fornecedores com os seguintes campos e registos:

E a tabela encomendas com os seguintes campos e registos:

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

Na vista de estrutura crie ainda um formulrio semelhante ao seguinte. Deve guard-lo


guard com o nome
formClientes.
1
2

Fig. Formulrio FormClientes

1. Caixa de texto
o com o nome txt_pesquisa.
2. Boto com o nome cmd_pesquisa.
Nota: As caixas de listagem so constitudas por rtulo e a caixa onde vai surgir a lista de dados.
Altere o texto dos rtulos como mostrado na imagem e em cada lista deve apenas alterar, nas
propriedades, o nome. Deve ainda alterar nas propriedades das caixas de listagem no separador
dados a propriedade tipo de origem da linha para lista de valores, uma vez que a caixa vai ser
preenchida por linhas resultantes de uma consulta tabela.
3. Caixa de listagem
stagem com o nome lst_clientes
4. Caixa de listagem com o nome lst_pesquisa_clientes

O objectivo agora que a primeira lista (lst_clientes)


(
seja preenchida automaticamente com os nomes
dos clientes que se encontram na tabela clientes. Como esta aco vai ocorrer
ocorrer quando o formulrio
carregado, vai acontecer no evento Form_Load.
Para aceder ao editor de cdigo vba clique com o boto direito no formClientes (em vista de estrutura) e
aceda opo construir evento > construtor de cdigo.
cdigo
Possivelmente vai-lhe surgir o mtodo Detalhe_Click e no o Form_Load.
Form_Load

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

se o nome do objecto e em 2 o evento a ele associado.


Em 1 altera-se
Altere em 1 Detalhe para Form que automaticamente surge o evento Form_Load.
Como vamos necessitar do objecto ADO deve adicionar a biblioteca
biblioteca Microsoft ActiveX Data Objects 2.7
Library sua base de dados. Para adicionar a biblioteca clique no menu Tools >References
>References

Localize a biblioteca, seleccione e por fim clique em OK.

No evento form_Load vai ser estabelecida a ligao tabela, vai


vai ser criado um registo que vai
guardar o resultado do select efectuado tabela clientes e por fim cada registo vai ser adicionado lista.

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

O cdigo para este evento vai ser o seguinte:

Fig Programao do evento Form_Load


Neste caso vamos precisar de usar um ciclo While para percorrer as linhas da tabela e em seguida
preencher a caixa de listagem.
A sintaxe da estrutura de repetio While a seguinte:
While condio
Bloco de instrues
Wend
Programao do evento Form_Load() - Explicao do cdigo linha a linha
Nota: Os comentrios em VBA so feitos utilizando o apstrofe .
Dim ligacao As ADODB.Connection a varivel ligao vai conter a ligao tabela da BD
Dim registo As ADODB.Recordset a varivel registo vai guardar cada linha e coluna resultante
resul
do
select efectuado tabela clientes.
Dim sql As String a varivel sql vai conter o cdigo sql de consulta tabela clientes.
Set ligacao = CurrentProject.Connection inicializar a varivel ligacao com a ligao ao projecto
corrente
Set registo= New
w ADODB.Recordset inicializar a varivel registo como um novo conjunto de registos
sql = "select nome from clientes order by nome" seleccionar apenas o campo nome, da tabela
clientes e ordenar
registo.Open sql, ligacao preenchimento do registo
o com o total de linhas da tabela clientes.
While Not registo.EOF a tabela vai ser percorrida linha a linha e enquanto no chegarmos ao fim
da linha(registo.EOF) as duas linhas de cdigo seguintes vo ser executadas
lst_clientes.AddItem registo!nome
reg
adicionar
dicionar o campo nome da varivel registo (registo!nome)
lista lst_clientes.
5

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

registo.MoveNext mudana
mudana para a prxima linha da tabela
Wend fim do ciclo while
End Sub
O prximo passo vai ser
er programar o boto OK (cmd_pesquisa). O que se pretende que ao clicar ele
seleccione da tabela clientes todos os nomes comeados pela letra que coloca na caixa de texto. A lista de
nomes encontrada vai preencher a caixa de listagem lst_pesquisa_clientes.
O cdigo do evento cmd_pesquisa_click vai ser o seguinte:

Fig Programao do evento cmd_pesquisa_Click


Vamos utilizar a estrutura de deciso if para que, no caso da consulta base de dados no devolver
valores, a caixa de listagem seja preenchida com o texto No existem resultados
A estrutura
strutura if avalia a condio especificada e, se a mesma for verdadeira, executa determinada
instruo ou conjunto de instrues; se for falsa, executa uma instruo ou bloco de instrues diferente do
anterior.
Sintaxe:
If condio then utilizamos no caso
caso de ser preciso executar apenas um bloco de instrues.
If condio then end if quando necessrio executar
ecutar um bloco de instrues.
If condio then .else. end if a condio testada,
stada, se for verdadeira executa o bloco de
instrues aps o then, seno executa o bloco de instrues depois de else.
Programao do evento cmd_pesquisa_Clickcmd_pesquisa_Click Explicao do cdigo linha a linha
Private Sub cmd_pesquisa_Click()
criao e inicializao das variveis registo,ligao e sql cuja funo j foi explicada anteriormente.
ant
Dim registo As ADODB.Recordset
Dim ligacao As ADODB.Connection

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

Dim sql As String


Set ligacao = CurrentProject.Connection
Set registo = New ADODB.Recordset
seleccionar todos os campos e registos da tabela clientes onde o nome comea pela letra colocada
na caixa txt_pesquisa.
sql = "select * from clientes where nome like '" & txt_pesquisa & "%'"
preenchimento
eenchimento do registo com o total de linhas da tabela clientes.
registo.Open sql, ligacao
limpamos
limpamos a caixa de listagem para no ficar com os valores da pesquisa anterior
lst_pesquisa_clientes.RowSource = ""
enquanto
enquanto no chegar ao fim da tabela
While Not registo.EOF
mostra = registo!nome guardar campo nome na varivel mostra
lst_pesquisa_clientes.AddItem registo!nomeadicionar
registo!nome dicionar linha com o campo nome caixa de
listagem
registo.MoveNext passar para o registo seguinte
Wendfim
fim do ciclo while
txt_pesquisa = "" limpar
limpar a caixa de texto txt_pesquisa
If mostra = "" Then se a varivel mostra estiver
e
vazia a caixa de listagem preenchida com o texto
No existem resultados...
lst_pesquisa_clientes.AddItem "No existem resultados..."
End If fim do if
End Sub

Coloque ainda no formulrio o seguinte grupo de opes, caixas de texto e boto:

1
2
3
4

Fig. Formulrio listaClientes


1. Caixa de texto txtNome

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

2. Caixa de texto txtBi


3. Caixa de texto txtNif
4. Boto cmd_editarCliente
editarCliente
Altere as propriedades de caixas de texto para que fiquem desactivas, para isso coloque
c
a
propriedade activado igual a no (separador
(separa
dados).
Vamos agora programar a caixa de listagem lst_pesquisa_clientes quando ocorre o evento click.
Ao clicar numa das opes da lista os dados das caixas de texto(txtNome, txtBi e txtNif) vo ser
automaticamente preenchidos. Essta aco s efectuada caso a opo seleccion
nada seja diferente de No
existem resultados
O cdigo para o evento lstt_pesquisa_clientes_click o seguinte:

Elabore o seguinte formulrio


rmulrio que deve guardar com o nome verClientes.

1
2
3

6
5
Formulrio verClientes

Altere os nomes de cada caixa de texto e boto para os seguintes:


1. Caixa de texto txtNome
2. Caixa de texto txtBi
3. Caixa de texto txtNif
4. Boto cmd_editarC
5. Boto cmd_eliminar
6. Boto
o cmd_fechar

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

O boto fechar apenas fecha o formulrio e o cdigo o seguinte:

O boto editar permite registar as alteraes, na tabela clientes, efectuadas nos campos do
formulrio onde o bi corresponda ao bi apresentado.
apresentado
O cdigo vai ser o seguinte:
seguinte

O boto eliminar vai eliminar o registo corrente da tabela. Caso seleccione sim na caixa de
mensagens, o registo eliminado e surge a mensagem o cliente nome_d_cliente foi eliminado!, caso
contrrio o registo mantm-se.

Programao do evento cmd_eliminar_Clickcmd_


Explicao do cdigo linha a linha
Private Sub cmd_eliminar_Click()
msg = MsgBox("Tem a certeza que pretende eliminar?", vbQuestion + vbYesNoCancel) o
resultado da opo escolhida (boto sim/no/cancelar) na caixa de mensagem vai ser guardado
guar
na
varivel msg.
DoCmd.SetWarnings False retirar os avisos mostrados pelo access
If msg = vbYes Then se clicar no boto sim (vbYes)
elimina da tabela clients o registo que est a ser mostrado
DoCmd.RunSQL "delete from clientes where nome='"
nome='" & txtNome & "' and bi=" & txtBi
mostra a caixa de mensagem com o texto O cliente nome_do_cliente foi
eliminado!
MsgBox "O cliente " & txtNome & " foi eliminado!"
End If
End Sub

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

EXERCCIO PROGRAMAO DO FORMULRIO ENCOMENDAS


Para este exemplo
plo vai ser necessrio importar os seguintes objectos da base de dados Sql e
VBA exemplo: formulrios encomendas, verClientes e verFornecedores e tabela encomendas.
Verifique se os seguintes registos se encontram na tabela clientes.

Verifique ainda se os seguintes registos se encontram na tabela fornecedores.


fornecedores

A tabela encomendas enco


ontra-se organizada do seguinte modo:

10

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

No formulrio encomendas coloque os nomes nos controlos como se apresenta em seguida (ateno
que o texto apresentado s ir surgir depois de programar cada objecto):
objecto)

3
1

4
5

1. Caixa de listagem lst_encomenda;


lst_encomenda
2. Caixa de texto txt_encomenda;
txt_encomenda
3. Caixa de texto txt_fornecedor;
txt_fornecedor
4. Caixa de texto txt_cliente;;
5. Caixa de texto txt_valor;
6. Caixa de texto txt_data.
7. Boto cmd_verF;
8. Boto cmd_verC;
Vamos ento passar programao dos objectos do formulrio.
a. A caixa de listagem lst_encomendas deve ser preenchida, logo quando o formulrio for
carregado, com o cdigo de cada encomenda.
b. Quando uma encomenda seleccionada (ao clicar na lista lst_encomendas) as caixas de texto
dos dados da encomenda so automaticamente preenchidas.
p
c. O boto verFornecedores vai abrir o formulrio verFornecedor com os dados do fornecedor que
corresponde aquela encomenda.

11

MEDIDA 2.2 - Cursos


os de Educao e Formao de Adultos
Curso: Tcnico/a de Informtica Sistemas
Unidade de competncia: Administrao de Bases de Dados
Projecto N 038925/2010/22
N SIIFSE: 8

Formadora: Patrcia Mateus


Cdigo Sigo: 4757201

d. O boto ver Cliente vai abrir o formulrio verClientes com os dados do cliente que corresponde
aquela encomenda.

e. No formulrio dos fornecedores deve programar o boto fechar para fechar o formulrio e o
boto remover para remover o registo.
Quando clica em remover apenas deve surgir uma msgBox com o texto Tem a certeza que
pretende eliminar o cliente?. Se clicar em sim
sim remove e mostra a mensagem o cliente Maria foi
eliminado com sucesso!, caso contrrio mantm o registo.

12