Você está na página 1de 18

VBA e Access

Modo de interaco
As funcionalidades do VBA esto completamente integradas com o Access
Um bom exemplo dessa integrao o facto dos formulrios e dos mdulos
fazerem por defeito parte integrante de uma base de dados em Access

Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 52

Hierarquia de objectos
Objectos de nvel um
[Application.]Forms: collection dos formulrios que se encontram
abertos na base de dados
[Application.]Reports: collection dos relatrios que se encontram
abertos na base de dados
[Application.]DataAccessPages: collection das pginas que se
encontram abertas na base de dados
[Application.]Modules: collection dos mdulos que se encontram
abertos na base de dados
[Application.]DoCmd: permite utilizar directamente no cdigo o conjunto
de aces disponveis como macros (abrir formulrios, imprimir relatrios, ...)
[Application.]Screen: permite referenciar o controle, pgina, folha de
dados, formulrio ou relatrio que tem o foco num dado momento
Screen.ActiveControl
Screen.ActiveDataAccessPage
Screen.ActiveDatasheet
Screen.ActiveForm
Screen.ActiveReport

Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 53

Objecto DoCmd I
Abrir formulrios/relatrios
DoCmd.OpenForm FormName,,, WhereCond, DataMode,, Args: abre o
formulrio FormName em modo DataMode, filtra a informao mediante a
condio WhereCond e instancia a propriedade OpenArgs do formulrio com o
valor indicado em Args. DataMode pode ser uma das seguintes constantes:
acFormEdit: permite inserir novos registos e alterar os existentes
acFormAdd: apenas permite inserir novos registos (os registos existentes so
ocultos)
acFormReadOnly: no permite inserir novos registos nem editar os existentes
acFormPropertySettings: usa as permisses definidas nas propriedades do
formulrio

DoCmd.OpenReport ReportName,,, WhereCond,, Args: abre o relatrio


ReportName, filtra a informao mediante a condio WhereCond e instancia a
propriedade OpenArgs do relatrio com o valor indicado em Args

Exemplos
DoCmd.OpenForm Clientes,,, Apelido = Silva, acFormEdit
DoCmd.OpenReport Clientes,,, Nome Like A*,, 10
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 54

Objecto DoCmd II
Fechar formulrios/relatrios
DoCmd.Close ObjectType, ObjectName, Save: fecha o objecto do tipo
ObjectType com nome ObjectName e guarda-o segundo a opo Save
ObjectType pode ser uma das seguintes constantes (entre outras):
acDefault: para fechar a janela activa
acForm: para fechar formulrios
acReport: para fechar relatrios

Save pode ser uma das seguintes constantes:


acSavePrompt: questiona o utilizador para guardar possveis alteraes
acSaveYes: guarda possveis alteraes
acSaveNo: no guarda possveis alteraes

Exemplos
DoCmd.Close acForm, Clientes, acSaveYes
DoCmd.Close acReport, Clientes, acSaveNo
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 55

Objectos Form I
Referenciao
Forms(Clientes): referncia directa ao nome do formulrio
Forms!Clientes: referncia directa ao nome do formulrio
Forms![Clientes e Facturas]: para nomes com espaos
Forms(0): referncia ao primeiro formulrio a ser aberto
Screen.ActiveForm: referncia ao formulrio que tem o foco

Propriedades
form.Name: nome do formulrio
form.Caption: ttulo do formulrio
form.Visible: visibilidade do formulrio
form.Modal: se True requer que o
formulrio seja fechado para que o foco
possa ser movido para outro objecto
form.RecordSource: origem dos
registos do formulrio (tabela/consulta da
base de dados ou expresso SQL)
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 56

Objectos Form II
Propriedades
form.NavigationButtons: esconde/apresenta os botes de navegao
form.AllowEdits: se True permite editar os registos previamente guardados
form.AllowDeletions: se True permite remover registos
form.AllowAdditions: se True permite adicionar novos registos
form.DataEntry: se True apenas permite adicionar novos registos
form.Filter: filtra os registos a apresentar no formulrio
form.FilterOn: activa/desactiva o filtro
form.OrderBy: modo de ordenao dos registos do formulrio
form.OrderByOn: activa/desactiva o modo de ordenao

Exemplo
Private Sub Form_Load()
Me.Filter = Pas = Portugal : Me.FilterOn = True
Me.OrderBy = Pas, Cidade DESC
End Sub
Private Sub BotoOrdenao_Click()
Me.OrderByOn = Not Me.OrderByOn
End Sub
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 57

Objectos Form III


Mtodos
form.Requery: executa novamente a consulta na qual o formulrio baseado
form.Refresh: actualiza o conjunto actual de registos do formulrio. Os
registos que entretanto tenham sido adicionados/removidos (por outro utilizador
num ambiente multi-utilizador) no sero includos/excludos do conjunto actual.
To pouco sero excludos os registos que j no satisfaam a consulta
associada ao formulrio
form.Undo: desfaz todas as alteraes feitas ao registo actual desde que foi
guardado pela ltima vez

Exemplo
Private Sub Form_BeforeUpdate(Cancel As Integer)
If ... then
...
Me.Undo
End If
End Sub
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 58

Objectos Report I
Referenciao
Reports(Clientes): referncia directa ao nome do relatrio
Reports!Clientes: referncia directa ao nome do relatrio
Reports![Clientes e Facturas]: para nomes com espaos
Reports(0): referncia ao primeiro relatrio aberto
Screen.ActiveReport: referncia ao relatrio que tem o foco

Propriedades
report.Name: nome do relatrio
report.Caption: ttulo do relatrio
report.Visible: visibilidade do relatrio
report.RecordSource: origem dos registos do relatrio (tabela/consulta da
base de dados ou expresso SQL)
report.Filter: filtra os registos a apresentar no relatrio
report.FilterOn: activa/desactiva o filtro
report.OrderBy: modo de ordenao dos registos do relatrio
report.OrderByOn: activa/desactiva o modo de ordenao
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 59

Objectos Report II
Seces
report.Section(Index): seces do relatrio. Index pode ser uma das
seguintes constantes:
acDetail: seco detalhe
acHeader: seco cabealho
acFooter: seco rodap
acPageHeader: seco cabealho de pgina
acPageFooter: seco rodap de pgina
acGroupLevel1Header: cabealho do nvel de agrupamento 1 (s relatrios)
acGroupLevel1Footer: rodap do nvel de agrupamento 1 (s relatrios)

acGroupLevel10Header: cabealho do nvel de agrupamento 10 (s relatrios)


acGroupLevel10Footer: rodap do nvel de agrupamento 10 (s relatrios)

Exemplo
Reports(Alunos).Section(acGroupLevel1Header).Visible = True
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 60

Objectos Report III


Grupos
report.GroupLevel(Index): nveis de
agrupamento/ordenao do relatrio
grouplevel.SortOrder: modo de
ordenao do grupo (False corresponde
a ordenao ascendente)
grouplevel.GroupHeader: se True
activa o cabealho do grupo
grouplevel.GroupFooter: se True
activa o rodap do grupo
grouplevel.GroupOn: especifica como
os dados so agrupados
grouplevel.KeepTogether: impe
restries ao modo de apresentar o
cabealho, rodap e seco de detalhe do
grupo nas pginas do relatrio
grouplevel.GroupInterval:
especifica o intervalo para agrupar os
dados
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 61

Objectos Report IV
Exemplo
as propriedades SortOrder, GroupHeader, GroupFooter,
GroupOn, GroupInterval e KeepTogether s podem ser alteradas
quando ocorre o evento Open do relatrio em causa
Private Sub Report_Open(Cancel
With Me.GroupLevel(0)
.SortOrder = False
.GroupOn = 4
.GroupInterval = 6
.KeepTogether = 0
End With
End Sub

Ricardo Rocha DCC-FCUP

As Integer)
ordenao ascendente
agrupar os registos por ...
... semestre (6 meses)
sem restries de agrupamento

Visual Basic for Applications: # 62

Objectos Control I
Referenciao
[form|report].Controls(Nome): referncia directa ao nome do controlo
[form|report].Controls!Nome: referncia directa ao nome do controlo
[form|report]!Nome: referncia directa ao nome do controlo
[form|report].Controls(0): referncia ao primeiro controlo no contexto
da ordem que se encontram no formulrio/relatrio respectivo
Screen.ActiveControl: referncia ao controlo que tem o foco

Exemplos
formas de referenciar o controlo [xpto] do formulrio [Novo]
Forms(Novo).Controls(xpto)
Forms(Novo).Controls!xpto
Forms(Novo)!xpto
Forms!Novo!xpto
Forms.Novo.xpto
'ao utilizar o smbolo ! no pode seguir-se uma collection
Application.Forms!Novo!xpto
ok
Application!Forms!Novo!xpto
erro
Forms!Novo!Controls!xpto
erro
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 63

Objectos Control II
Propriedades comuns
ControlSource: origem dos dados do controlo (campo ou expresso
utilizando campos da tabela/consulta em que o formulrio baseado)

Combo / list boxes


RowSource: origem dos dados do controlo
RowSourceType: tipo da origem dos dados do controlo
Table/Query: os dados so os registos de uma tabela/consulta ou expresso SQL
Value List: os dados so uma lista de itens

Exemplos
Forms.Clientes.Combo.RowSourceType = Table/Query
Forms.Clientes.Combo.RowSource = Clientes
Forms.Clientes.Combo.ColumnCount = 2
campos Id e Nome
Forms.Clientes.Combo.ColumnWidths = 0;1
Forms.Clientes.Combo.BoundColumn = 1
Forms.Clientes.Lista.RowSourceType = Value List
Forms.Clientes.Lista.RowSource = 1;2;3
Forms.Clientes.Lista.AddItem 4
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 64

ActiveX Data Objects I


Aspectos gerais
A biblioteca ADO oferece uma
interface genrica para acesso
a dados
Permite comunicar com um
amplo conjunto de diferentes
formatos de dados
Define uma nica sintaxe para
manipular o mesmo tipo de
objectos ( independente do
formato dos dados)
Constitui por si s uma
hierarquia de objectos
independente da hierarquia de
objectos da aplicao principal

Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 65

ActiveX Data Objects II


Hierarquia de objectos
ADODB: objecto de topo da hierarquia ADO
Connection: para definir e estabelecer ligaes com diferentes bases de dados
Command: para executar instrues sobre uma dada ligao
Recordset: para manipular conjuntos de registos
Errors: conjunto de erros ocorridos durante a ltima operao duma ligao
Parameters: conjunto de parmetros de um dado comando com parmetros
Fields: conjunto de atributos (campos) de um dado registo
Properties: conjunto de propriedades especficas de um dado objecto
ADODB
Connection

Command

Recordset

Errors

Parameters

Fields

Properties

Properties

Properties

Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 66

Objectos Connection I
Mtodos
connection.Open ConnectionString: estabelece uma nova ligao
connection.Execute(CommandText,,Options): para executar comandos
adCmdTable: indica que CommandText refere o nome de uma tabela ou consulta
adCmdText: indica que CommandText refere uma expresso SQL

connection.Close: fecha a ligao

Exemplos
estabelecer ligao explcita a uma base de dados
Dim con As New Connection
a declarao New cria
uma nova instncia do
con.Open Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=teste.mdb
con.Close
ligao corrente ao Access
Dim con As Connection
se vou usar Set posso
Set con = CurrentProject.Connection
con.Close
Ricardo Rocha DCC-FCUP

do Access
desde logo
objecto

omitir New

Visual Basic for Applications: # 67

Objectos Connection II
Exemplos
criar recordset a partir duma ligao explcita (3 exemplos)
Dim con As Connection : Dim rst As Recordset
Set con = ...
Set rst = con.Execute(Clientes, , adCmdTable)
Set rst = con.Execute([Query sem Parmetros], , adCmdTable)
Set rst = con.Execute(SELECT * FROM Clientes, , adCmdText)
rst.Close
con.Close
criar recordset a partir da ligao corrente ao Access
Dim rst As New Recordset
rst.Open Clientes, CurrentProject.Connection
rst.Close
criar recordset a partir duma ligao implcita
Dim rst As New Recordset
rst.Open Clientes, Provider=Microsoft.Jet.OLEDB.4.0;
Data Source=teste.mdb
rst.Close
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 68

Objectos Command
Propriedades e mtodos
command.ActiveConnection: ligao associada ao comando
command.CommandText: texto do comando
command.CommandType: tipo de comando (adCmdTable / adCmdText)
command.Parameters: parmetros do comando
command.Execute: para executar o comando

Exemplos
Dim com As New Command
comando sem parmetros
com.ActiveConnection = CurrentProject.Connection
com.CommandText = SELECT * FROM Clientes
com.CommandType = adCmdText : Set rst = com.Execute
comando com parmetros
com.ActiveConnection = CurrentProject.Connection
com.CommandText = [Query com Parmetros]
com.CommandType = adCmdTable
com.Parameters.Refresh
l os parmetros
com.Parameters([Limite?]) = 100 : Set rst = com.Execute
Ricardo Rocha DCC-FCUP

Visual Basic for Applications: # 69

Você também pode gostar