Você está na página 1de 31

Escola Secundria de Jaime Moniz

Notas sobre programao VBA em Access 2000

Luis Abreu

Ano Lectivo 2001/2002

ndice
Introduo ......................................................................................................................... 3 Captulo 1...................................................................................................................... 4 VBA no Access 2000................................................................................................ 4 Controlo de fluxo .................................................................................................... 11 Captulo 2.................................................................................................................... 17 Os objectos intrnsecos do Access .......................................................................... 17 Captulo 3.................................................................................................................... 22 Utilizando os objectos de dados do Access (ActiveX Data Objects) ..................... 22 Captulo 4.................................................................................................................... 26 Tratamento de erros ................................................................................................ 26 Captulo 5.................................................................................................................... 28 A aplicao Sub-MovieCentral............................................................................... 28

Introduo
O que contm este documento Este documento tem por principal objectivo ilustrar algumas das capacidades que Microsoft Access fornece, incidindo sobre aspectos pouco focados ao longo das aulas prticas (recorde-se que ao longo das aulas foi dado grande nfase ao desenvolvimento de base de dados utilizando os vrios assistentes fornecidos pela aplicao). O principal objectivo deste documento introduzir o VBA como meio auxiliar de desenvolvimento de aplicaes.

O que no deve esperar deste manual Este documento no de forma alguma uma referncia completa de todas as funes do Access 2000. Pretende apenas fornecer algumas ideias base que podero ser seguidas aquando da construo de uma base de dados. Ao longo do manual so apresentados vrios exemplos prticos que se encontram no site da disciplina (http://www.luisabreu.go.cc/disciplinas/aplicacoes.htm). Para obter uma referncia completa sobre todas as funes do VBA deve ser consultada a ajuda on- line que acompanha o Microsoft Access. Existem tambm vrios artigos tcnicos relacionados com programao VB/VBA no site MSDN da microsoft (http://www.msdn.microsoft.com). Para alm deste site, o http://groups.google.com fornece um dos mais completos newsgroups existentes. Apesar de terem sido feitos todos os esforos possveis no sentido de garantir a absoluta correco deste documento, alerta-se todos os interessados para a consulta regular da pgina da disciplina a fim de puderem proceder a eventuais actualizaes do contedo (http://luisabreu.go.cc/disciplinas/aplicacoes.htm). O cdigo que acompanha este manual pode ser retirado do site anterior. O endereo de mail que serve de suporte a este manual o seguinte: progC@netmadeira.com. Tambm podem utilizar este mail para colocar eventuais dvidas relacionadas com o cdigo apresentado.

Captulo 1

VBA no Access 2000

O Access suporta o VBA desde a verso Access 95. O VBA, tambm conhecido por Visual Basic for Applications 1 , uma linguagem de programao, baseada em objectos 2 , que pode ser utilizada pelos vrios componentes (programas) do Microsoft Office. O objectivo desta seco apresentar, de uma forma bastante rpida, algumas das caractersticas do VBA. Utilizao de mdulos A programao VBA em Access sempre feita em mdulos. Existem trs tipos de mdulos 3 : tipo formulrio; tipo relatrio; tipo stadalone (que passaremos a designar por mdulos e possuem um separador prprio no Access que designado de...Mdulos). Todo o cdigo VBA tem obrigatoriamente de estar contido num destes mdulos. As funes relacionadas com os formulrios devem ser escritas nos mdulos tipo formulrio (cada formulrio criado no Access dispe sempre de um mdulo tipo formulrio associado); por sua vez, todo o cdigo relativo aos relatrios deve ser armazenado num mdulo do tipo relatrio (cada formulrio possui sempre, semelhana dos formulrios, de um mdulo tipo relatrio associado); por outro lado, o cdigo genrico (no relacionado directamente com um formulrio ou relatrio) deve ser sempre escrito em mdulos tipo standalone. Mdulos tipo formulrio Para exemplificar os vrios tipos de mdulos, vamos apresentar alguns exemplos simples. Antes de comear a escrever cdigo num formulrio, necessrio ter em ateno as diferenas existentes no modo de visionamento de um formulrio: modo de desenho; modo datagrid;
1

A verso actual do VBA (6) coincide com a verso 6 do Visual Basic. A Microsoft props-se a manter ambas as linguagens sincronizadas. 2 A opinio do autor deste documento diverge da grande maioria dos restantes autores. Muitas vezes o Access apresentado como sendo uma linguagem orientada a objectos. Isto no corresponde realidade! O paradigma da orientao a objectos permite a criao de classes (grupo de objectos com as mesmas caractersticas), a utilizao de tcnicas como o polimorfismo, encapsulamento, etc. Tal no possvel em VBA ( praticamente impossvel criar classes em VB!). Exemplos de linguagens orientadas a objectos: C++ (ora a est uma linguagem do agrado do autor), Java, C#, etc. 3 Estes termos so da autoria do autor, no sendo por isso designaes exactas.

modo formulrio.

Um formulrio visto em modo datagrid ou modo formulrio contm cdigo a ser executado (ou que pode vir a ser executado aquando do acontecimento de determinados eventos). Por sua vez, no modo de desenho, o cdigo associado a um formulrio nunca executado. Vamos agora proceder criao de um formulrio, com um nico boto, que ao ser clicado apresenta a mensagem Ol Mundo!4 : 1. criar um novo formulrio na vista de desenho; 2. adicionar um novo boto ao formulrio; 3. clicar com o boto direito sobre o boto adicionado e mudar o nome (tab other, opo name) do controlo para button e o seu label (tab Format, opo caption) para Click on me!; 4. os botes tem vrios eventos. Neste caso queremos responder ao evento de onclick. Para tal, basta seleccionar o boto, e nas propriedades seleccionar o tab Event. No evento onclick seleccionar [Event Procedure] e clicar no boto ... sua direita. Deparamo-nos ento com o editor de cdigo VBA. 5. acrescentar a instruo msgbox Hello World!; 6. para testar, basta pr o formulrio em modo de formulrio e clicar sobre o boto

Bem, vamos analisar um pouco melhor o que foi feito. Assim, o primeira aspecto a ter em ateno reside no facto dos botes terem uma caption (texto que apresentado ao utilizador que se encontra escrito no boto) e um nome (id que serve para identificar o boto no formulrio). Alis refira-se que todos os elementos que constituem um formulrio (designados de objectos ou controlos) tm sempre um nome, servindo esse nome para identificar o controlo no formulrio ( atravs desse nome que podemos mudar as propriedades de um determinado controlo do formulrio utilizando VBA). Convm tambm analisarmos um pouco melhor a janela do editor do VBA (o chamado IDE):

Este exemplo encontra-se nos ficheiros de cdigo com o nome de cap1_1.mdb nos ficheiros que acompanham este manual.

Conforme possvel ver na figura, o IDE est dividido em v rias zonas. Por cima do cdigo temos uma zona importante que contm duas caixas de combinao: a primeira contm o nome do controlo actual; a segunda contm o nome do evento seleccionado. Ambos estes parmetros so controlados pela posio do cursor na pgina. Tambm servem para navegarmos rapidamente para a funo pretendida, ou at mesmo acrescentar uma nova funo. At agora temos falado de funes e eventos, dando at a ideia de que s podemos ter funes que servem para processar eventos. Contudo podemos ter funes independentes, que so evocadas por determinados eventos (mais informao nas prximas pginas). Outro conceito que tem sido referido constantemente, e que importa aprofundar um pouco mais, o de evento. O evento assume um papel muito importante na programao em VBA. Pode-se mesmo dizer que a programao em VBA eventdriven, ou seja, todas as aces desempenhadas propagam-se sob a forma de eventos, podendo ento o programador processar o evento (processar no mais do que associar um conjunto de instrues a um determinado evento). Os eventos existentes so muitos, e podem ser despoletados por um controlo existente num formulrio, ou at mesmo pelo prprio formulrio (por exemplo, quando um formulrio aberto, disparado o evento onload). Como vimos (atravs do exemplo anterior) uma das formas que temos de processar eventos atravs das opes propriedades ( a que podemos aceder, seleccionando um controlo e clicando com o boto direito sobre este). A programao em mdulo tipo relatrio praticamente idntica do tipo formulrio, pelo que no vamos efectuar qualquer tipo de referncia especfica a esse tipo de mdulo.

Chama-se ainda a ateno do utilizador para um exame cuidado do ficheiro cap1_2.mdb, onde apresentado cdigo um pouco mais complexo (mdulo tipo formulrio). Mdulos tipo standalone Todo o cdigo independente deve ser escrito na seco dos mdulos tipo standalone. recomendvel o agrupamento de funes relacionadas num mesmo mdulo. Podemos definir vrios mdulos, que esto sempre disponveis para serem utilizados em qualquer lugar da aplicao.

Declarao de variveis medida que a complexidade aumenta, torna-se necessrio armazenar informao de forma temporria; nestes casos podemos recorrer s variveis. A criao de variveis pressupe trs questes importantes: tempo de vida da varivel; nome da varivel; tipo da varivel. O tempo de vida da varivel designado de scope. Para alm do scope, uma varivel sempre caracterizada pela visibilidade. As variveis podem ser locais (no interior de funes ou do mdulo) ou globais (disponveis em qualquer local da aplicao). As variveis globais so sempre declaradas nos mdulos5 , tendo apenas a particularidade de serem declaradas com uma visibilidade pblica (utilizando portanto o qualificador Public). A declarao de variveis segue a seguinte sintaxe: visibilidade nome_variavel As tipo_variavel Exemplos de variveis: Private var1 As String Public var2 As Integer A visibilidade pode ser de dois tipos: pblica (Public); privada(Private ou Dim). A declarao de variveis pblicas apenas tem efeito a nvel de variveis declaradas a nvel global nos vrios mdulos 6 . Se uma varivel for declarada como pblica num mdulo, ento possvel aceder ao seu valor (leitura ou escrita) a partir de qualquer funo (o ficheiro cap1_3.mdb apresenta exemplo da utilizao de uma varivel local ao mdulo do formulrio - esta varivel passava a ser global se tivesse sido declarada como Public).

A partir de agora o termo mdulo passa a designar os mdulos do tipo standalone. Se uma varivel for declarada globalmente no mdulo de um formulrio, ento necessrio referenci -la antes de a puder utilizar (informaes adicionais na parte de programao de objectos). 6 Uma vez que uma varivel declarada no interior de uma funo s existe quando a funo for executada, ento no h qualquer vantagem em declarar uma varivel como pblica no interior de uma funo.

Falta apenas referir uma ltima opo que possvel aplicar declarao de variveis: Static. O qualificador Static pode ser aplicado a variveis no interior de funes, fazendo com que as variveis se portem como variveis declaradas a nvel do mdulo. Contudo s podem ser acedidas no interior da funo 7 . Exemplo: Static usr as String

Declarao de funes Uma funo no mais do que um conjunto de instrues que esto agrupadas sob um nome, bastando apenas evocar o nome da funo para executar todas essas instrues. Existem dois tipos principais de funes: procedimentos: assim designados por no retornarem qualquer valor; funes: retornam sempre um resultado. Os procedimentos so sempre declarados utilizado a seguinte sintaxe: Public Sub Nome_Procedimento( parmetros ) mais codigo End Sub Por sua vez as funes seguem a seguinte sintaxe Public Function Nome_Funo ( parmetros ) As Tipo_Valor_Retorno mais cdigo End Function J agora chama-se a ateno para o facto de os comentrios serem feitos em VB utilizando o smbolo . Repare-se que a visibilidade de um funo (se s est disponvel no mdulo, ou ento, se se encontra disponvel em toda a aplicao) tambm ela qualificada pelos dois termos Public e Private (portanto, de forma semelhante s variveis). A qualificao dos procedimentos e das funes no obrigatria, sendo que quando no utilizado nenhum qualificador, o qualificador Public automaticamente atribudo ao procedimento. Tambm possvel atribuir o qualificador Static a um procedimento ou funo. A qualificao de uma funo (ou um procedimento) de static converte automaticamente todas as variveis em variveis estticas.

Utilizao de parmetros

Para melhor percebe-se o funcionamento das variveis estticas (static) h que perceber o que acontece normalmente a uma varivel. Quando uma varivel declarada no inicio de uma funo, essa varivel existe at ao fim da funo (at chegar ao End Sub ou End Function). Ao chegar ao fim da funo, a memria libertada, e o eventual valor que a varivel continha perdido. Por sua vez, as variveis estticas no so destrudas quando se chega ao fim da funo. Da prxima vez que a funo for executada, a varivel esttica contm o valor que tinha no fim da ltima execuo da funo.

Por vezes necessrio passar valores externos para o interior dos procedimentos/funes. Se no existissem parmetros, teramos de recorrer sempre a variveis globais como forma de passar valores para o interior dos procedimentos/funes. A utilizao de parmetros bastante simples: basta introduzir o nome seguido do tipo do parmetro. Podemos at considerar os parmetros como sendo variveis que so automaticamente inicializadas aquando da execuo da funo. Sub Teste( par as Integer ) os parmetros podem ser utilizados como variveis no interior das funes par = par + 1 End Sub Se por acaso houvesse mais parmetros, teramos de introduzi- los da mesma forma que o parmetro par, utilizando a , para separ- los. Se por acaso for necessrio passar para a linha de baixo, temos de indicar esse facto utilizando para tal o caracter _. Exemplo: Sub Teste( par as Integer, _ par2 as Integer)

End Sub

Parmetros Opcionais Tambm possvel termos parmetro opcionais. Os parmetros opcionais so sempre declarados no fim da lista de parmetro de uma funo. Para tornar um parmetro de opcional, basta apenas declar- lo como sendo do tipo Variant. Para ver se o parmetro foi introduzido basta utilizar a funo IsMissing() 8 .
Function Salutation(strFirst as String, strLast as String, _ Optional varSalutation as Variant) as String If IsMissing(varSalutation) Then Salutation = strFirst & " " & strLast Else Salutation = varSalutation & " " & strFirst & " " & StrLast End If End Function

O simbolo & responsvel por efectuar a concatenao das duas strings. Tambm possvel passar n parmetros opcionais. Para tal temos de qualificar a varivel de ParamArray.
Public Function Concat(ParamArray avarArray() as Variant) as String

End Function
8

Repare -se na diferena de processos para evocar uma subrotina: no caso dos procedimentos, basta escrever o nome da subrotina (ex: soma a, b procedimento soma com dois parmetros); no caso das funes, temos de introduzir parntesis (ex: c = soma( a, b ) ).

Parmetros por referncia e parmetros por valor O que acontece quando modificamos o valor de um parmetro no interior de uma funo (ou de um procedimento)? A resposta um pouco mais complicada do que parece primeira vista. Suponhamos o seguinte exemplo:
Sub WhatsMyValue() Dim intX as integer intX = 10 SquareIt(intX) MsgBox intX End Sub Sub SquareIt(intSquare as Integer) intSquare = intSquare * intSquare End Sub

Como podemos ver, o parmetro inicializado com a varivel. Qual o valor da varivel aps a execuo da funo SquareInt (recorde-se que o valor do parmetro mudou dentro da funo)? Neste caso o valor da varivel X no alterado de 10 para 100 (ficheiro cap1_4.mdb). De facto, os parmetros so passados (por defeito) por valor (estamos a falar dos tipos primitivos do access, como por exemplo o integer; no caso dos objectos, a passagem feita por referncia). Existe uma outra opo (por referncia) caso em que os parmetros trabalham directamente sobre o valor. Podemos especificar o tipo de parmetro atravs de dois termos reservados: ByRef: parmetro por referncia; ByVal: parmetro por valor. Exemplo da utilizao destes qualificadores: Sub Test( ByRef par1 as String, ByVal par2 as String ) End Sub Como j foi dito, os parmetros por referncia trabalham directamente sobre o valor de uma varivel. Da que tenhamos que ter o cuidado de ao evocar a funo, ter em ateno que um parmetro por referncia tem de estar sempre relacionado com uma varivel (lvalue) e nunca com um valor constante (r-value). O exemplo seguinte tenta evocar o procedimento apresentado no pargrafo anterior: Dim var as String cdigo.... exemplo da correcta utilizao Test var, String 2 forma incorrecta Test String1, String2

Em relao aos parmetros por valor no h qualquer tipo de preocupao, pois podemos passar uma varivel ou um valor constante 9 . Contudo o mesmo j no acontece em relao aos parmetros por referncia.

Controlo de fluxo
Tal como em todas as linguagens de alto nvel, existem dois tipos de estruturas de controlo de fluxo: estruturas de deciso: permitem tomar decises; estruturas de repetio: permitem repetir um conjunto de instrues. Os principais dois tipos de estrutura de deciso so o if e o select. Tm a seguinte sintaxe (uma vez que os alunos inscritos esto matriculados em TLP, apenas apresentamos a sintaxe sem indicar quaisquer exemplos da utilizao deste tipo de estruturas, pois apenas esta (sintaxe) a diferena existente entre as estruturas de controlo de fluxo do VBA e as do C ou do Pascal) : If condio then Bloco de intrues Else Bloco de instrues End If
Select Case condio Case valor1 ' Process valor1 Case valor2 ' Process valor2 Case Else ' All other days. End Select

Por sua vez, existem trs tipos de estruturas de repetio: do...loop, for....next e for each...next. A sintaxe de cada um das estruturas a seguinte:
Do While | Until condition statements Exit Do statements Loop Do statements Exit Do statements Loop While | Until condition

For intLoop = 1 To 10 [Step 1]


9

Neste caso estamos a falar dos chamados r-values, que so valores constantes e no de constantes definidas pelo utilizador. Exemplos de r-values: 10 (exemplo de um inteiro), test (exemplo de uma string), etc.

' Run Code Next intLoop

Existe uma diferena entre o Do While e o Do Until. O Do While executa um conjunto de instrues enquanto a condio for verdadeira; por sua vez o Do Until executa um conjunto de instrues at que a condio seja verdadeira. O ciclo for contm uma parte opcional: step. Se for omitida, ento equivalente instruo step 1. O step serve para controlar o incremento da varivel que controla a execuo das instrues que se encontram no interior do ciclo.

Objectos existentes Como j foi referido, a programao VBA baseada em objectos. Praticamente tudo um objecto. Os objectos tm propriedades e mtodos que so expostos (pblicos). O Object Browser permite ver as propriedades/mtodos expostos por um objecto. Para aceder ao object browser, basta carregar na tecla F2 no IDE do VBA. Se for necessrio, podemos recorrer a objectos exteriores. Por exemplo, pode ser necessrio integrar o word numa base de dados, utilizando para construir relatrios escritos. Para tal basta indicarmos ao Access que desejamos utilizar esse(s) objecto(s) atravs da opo Referncias no menu Ferramentas do IDE de VBA.

Programao com objectos Apesar de j termos utilizado objectos nalguns dos exemplos apresentados at agora, ainda no tnhamos dedicado especial ateno sua utilizao. Est na hora de colmatarmos essa lacuna.

Os termos Public e Private (revisitados) Como vimos, as variveis podem ser pblicas ou privadas. Tambm foi visto que as variveis pblicas que se encontram definidas num mdulo so variveis globais. Se declararmos uma varivel global num mdulo standalone, ento para acedermos a essa varivel temos apenas de escrever o nome da varivel. Contudo, se a varivel estiver contida num formulrio ou relatrio, ento tem de ser qualificada do nome do formulrio. O ficheiro cap1_5.mdb apresenta um exemplo bastante simples sobre este tpico. Convm ainda chamar a ateno para o nome que utilizado no mdulo para identificar o formulrio. Apesar do formulrio ter sido identificado de testes, o seu id form_testes (isto est relacionado com o facto de estarmos a trabalhar com a classe do formulrio ; mais informaes sobre isto frente). Por isso que foi utilizado form_testes no cdigo existente no mdulo.

As propriedades de um objecto Para se aceder s propriedades de um objecto basta fazer o seguinte: Nome_objecto.propriedade Por exemplo, se tivermos uma edit box com o nome de edit, ento podemos aceder a propriedade value da seguinte maneira: edit.Value. Existem algumas propriedades que so s de leitura, outras de escrita e ainda outras que suportam ambas as operaes. Muitos objectos fornecem uma propriedade por defeito. Nesse caso no necessrio indicar a propriedade. Por exemplo, as edit boxes apresentam o Value como propriedade por defeito. Por isso podemos utilizar (aproveitando o exemplo anterior) edit como sinnimo de edit.Value. Todos os objectos tm uma propriedade por defeito (ou melhor, quase todos, uma vez que isso depende da maneira como o objecto foi implementado). Existe uma forma de aceder a vrias propriedades de um objecto em simultneo. Para tal utilizamos o With. Exemplo (supondo que temos uma edit box com o nome de text1):
With text1 .Backcolor = 0 .Width = 200 .Height = 400 End With

Os mtodos de um objecto Da mesma forma que podemos aceder s propriedades de um objecto, tambm possvel aceder aos mtodos de um objecto. Um mtodo uma subrotina pblica, e por isso semelhante a uma funo ou procedimento. A nica diferena reside no facto de termos de qualificar o nome do mtodo pelo nome do objecto. Exemplo: Objecto.metodo Mais uma vez necessrio ter em ateno que as funes tm obrigatoriamente de ser evocadas utilizando parntesis, enquanto que os procedimentos no devem ser evocados com parntesis. Os exemplos seguintes ilustram a diferena: Object.metodo procedimento

Object.metodo() funo Tambm possvel evocar mtodos de objectos com parmetros (alis como era de esperar!). O exemplo seguinte mostra como (para funes e para procedimentos): Object.metodo( 10, 20 ) funo Object.metodo 10, 20 procedimento

Passando valores a parmetros pelo nome Geralmente os valores so passados aos parmetros pelo posio em que so colocados na evocao da funo/procedimento. Contudo, podemos utilizar outra tcnica que consiste em passar os parmetros pelo nome. A sintaxe a seguinte:
Object.Metod Parameter1:=expression, _ Parameter2:=expression,...Parametern:=expression

Podemos utilizar os parmetros com nome numa situao em que temos parmetros opcionais e no queremos ter o trabalho de andar a escrever virgulas. Por exemplo, suponhamos que temos uma funo com cinco parmetros, e que s queremos passar valores para o primeiro e para o ltimo parmetro. Neste caso a utilizao de parmetros por nome facilita e ajuda a melhor documentar o cdigo.

Atribuio de objectos a variveis Normalmente, quando atribumos uma varivel a outra estamos a copi- la (portanto, o comportamento semelhante ao que acontece na passagem de parmetros por valor).
Dim intX as integer Dim intY as integer intX = 10 intY = intX intX = 20 MsgBox intY

No exemplo anterior, aps efectuarmos a atribuio do intX ao intY, um modificao no intX no afecta a varivel intY. Isto porque intY apenas foi inicializada com uma cpia do valor de intX. Contudo, e se for necessrio, tambm podemos ter referncias, ou seja, variveis que se tm um comportamento semelhante passagem de parmetros por referncia. Por exemplo:
Dim txtName as TextBox controlo de um form Me!UserName = "Bill" Set txtName = Me!UserName controlo passa a ser ref para o objecto username que existe no form Me!UserName = "Joe"

MsgBox txtName No exemplo anterior a utilizao da instruo Set torna txtName numa referncia. Assim, ambas as variveis apontam para o mesmo endereo de memria. Da que a mensagem apresentada ao utilizador seja Joe. O ficheiro cap1_6.mdb apresenta alguns exemplos de programao de objectos. S mais uma observao: a utilizao do set fazse sempre que seja necessrio utilizar objectos! (como no exemplo anterior)

Coleces O VBA rico em coleces. Podemos considerar que as coleces consistem num conjunto de objectos relacionados. Por exemplo, uma base de dados contm um conjunto (coleco) de tabelas, que por sua vez contm um conjunto de ndices. Por outro lado, existe tambm um conjunto de consultas, um conjunto de formulrios, etc. Se atentarmos nos formulrios, podemos tambm afirmar que eles so constitudos por um conjunto de controlos (editboxes, buttons, checkboxes, etc). O ficheiro cap1_7.mdb mostra como se pode aceder a algumas das coleces existentes no Access. Suponhamos que apenas queremos imprimir o valor das edit boxes. Como j vimos, temos de utilizar a propriedade Value. Contudo, o seguinte cdigo no suficiente: Dim c as control For each c in me!controls Msgbox c.value Next Bem, o problema reside no facto de nem todos os controlos terem uma propriedade chamada value (recorde-se que as labels que acompanham as edit boxes so tambm controlos). A soluo mais correcta ser ento a seguinte:
For Each ctlCurrentIn Me.Controls ' Process the control ctlCurrent If ctlCurrent.ControlType = acTextBox Then ctlCurrent.Left = Me!txtLocation End If Next

A propriedade controltype permite aferir qual o tipo de controlo actual. Para uma descriminao mais pormenorizada sobre os objectos e respectivas propriedades aconselhvel a consulta do manual de VBA que acompanha o Access. J agora refira-se que o termo reservado Me refere-se ao objecto actual: neste caso ao formulrio.

Criao de propriedades num formulrio A maneira mais simples de criar uma propriedade num formulrio consiste em declarar um varivel com o qualificador Public. Contudo, existe uma outra maneira que permite um maior controlo por parte do programador: a definio de propriedades utilizando o get e set. O ficheiro cap1_8.mdb apresenta um exemplo da definio de uma propriedade utilizando o get e o set. A grande vantagem deste mtodo reside no facto de ser possvel proceder a verificaes antes de armazenar a informao numa varivel. Existem vrios tipos de propriedades: escrita: permitem apenas a leitura, ou seja, s define o mtodo get; leitura: permite apenas a escrita, ou seja, s define o mtodo set; leitura/escrita: permite quer a leitura quer a escrita (portanto definem mtodos set e get).

Qual o prximo passo? Bem, este captulo serviu para termos algumas ideias sobre as potencialidades do Access. Serviu tambm para apresentar as principais caractersticas da sua linguagem de programao VBA. Ficmos a conhecer vrios aspectos importantes que recordamos aqui: variveis; qualificadores; mtodos; tipos de mdulos; estruturas de controlo de fluxo; mtodos; parmetros; controlos; propriedades. O prximo captulo (Objectos do Access) parte dos aspectos bsicos deste captulo e apresenta, de uma forma mais ou menos detalhada, os objectos existentes no Access.

Captulo 2

Os objectos intrnsecos do Access

O captulo anterior introduziu as bases necessrias compreenso das coleces. Na atura, apresentamos uma coleco como sendo um conjunto de objectos do mesmo tipo. Tambm afirmmos que o Access muito rico em coleces. Como exemplo, chegmos a falar dos vrios tipos de coleces que Access possui: tabelas, consultas, formulrios, etc. Vamos comear por falar na criao de coleces.

Coleces definidas pelo programador possvel criarmos a nossa prpria coleco utilizando o VBA. Antes de explicarmos como, convm apontar alguns aspectos que nos levem a criar a nossa prpria coleco. No captulo 1 no chegmos a mencionar a existncia de um tipo fundamental de dados: o Array! O array permite guardar um conjunto de valores do mesmo tipo, sob o nome de uma varivel. O exemplo seguinte ilustra um array de 10 inteiros: Dim arr (10) as integer Dim i as integer preencher o array atravs dum ciclo for i = 1 to 10 arr(i) = i next Para definir um array sempre necessrio introduzirmos o nmero de elementos que o array comporta. Esta a grande desvantagem que reside na utilizao dos arrays! Por sua vez, uma coleco no necessita de, partida, saber quantos elementos vai armazenar. Da que, nos casos em que no sabemos quantos elementos queremos armazenar, seja vantajoso utilizar coleces.

Como criar coleces e manipul-las Para criar uma coleco temos apenas de escrever o seguinte: Dim col1 as collection Ou Dim col2 as new collection A segunda instruo a prefervel pois cria um novo objecto do tipo collection (sim, at as coleces so objectos em VBA!). A primeira apenas define uma varivel, no chegando a criar o objecto em si. Antes de utilizarmos a col1 temos de criar o objecto. Para tal temos duas hipteses:

utilizamos o new; utilizamos uma referncia para uma coleco que j exista (utilizando o termo reservado set, tal como foi feito no captulo anterior).

Exemplo: criar nova coleco If col1 Is Nothing Then Set col1 = New Collection utilizar referncia para uma coleco j existente - por exemplo col2 set col1 = col2 O ficheiro cap2_1.mdb apresenta um conjunto de exemplos que ilustram o manuseamento de arrays e de coleces (com particular nfase nas coleces).

O modelo de objectos do Access O modelo de objectos do Access um modelo hierrquico, cujo objecto de topo se chama Application. A figura seguinte ilustra o modelo de objectos existente no Access.

O objecto Application O objecto Application suporta vrios mtodos, propriedades e coleces que permitem efectuar. Por exemplo, se quisermos sair da aplicao podemos utilizar o mtodo quit. Este mtodo aceita um parmetro opcional que permite especificar como proceder em relao a eventuais operaes que no tenham sido gravadas. As hipteses so as seguintes: acPrompt; acSave; acExit. Exemplo da utilizao do mtodo: Application.Quit acPrompt

O Access 2000 apresenta dois novos objectos que permitem um fcil acesso s coleces intrnsecas do Access: Tabelas, Consultas, Relatrios, etc. O objecto CurrentData permite aceder s seguinte coleces: AllTables; AllQueries; AllViews; Etc. Por sua vez, o objecto CurrentProject apresenta as seguintes coleces: AllForms; AllReports; AllMacros; AllModules; Estes objectos apresentam ainda mais alguma coleces que no iremos referir. Para mais informaes deve ser consultado o manual do Access. Estas coleces contm objectos do tipo AccessObject, que apresenta as seguintes caractersticas: Name: nome do objecto como aparece na janela da base de dados; FullName: caminho completo para a pagina de acesso de dados; IsLoaded: indica se objecto est ou no aberto; Type: indica o tipo do objecto (retorna uma constante do tipo acObjectType); Properties: coleco de propriedades definidas para objecto em questo (apenas aplicvel a objectos obtidos a partir das coleces do CurrentProject).

O ficheiro cap2_2.mdb ilustra quais os objectos que existem na base de dados seleccionada. O objecto CurrentProject apresenta tambm algumas propriedades teis. Exemplo: FullName : caminho completo para o ficheiro de base de dados; Name : nome da base de dados (sem o caminho at ao ficheiro); Path : caminho da base de dados (sem o nome do ficheiro). Coleco dos formulrios e dos relatrios No capt ulo anterior j foram dados alguns exemplos da utilizao de formulrios (a utilizao de relatrios muito semelhante). Quando escrevemos cdigo num mdulo do tipo formulrio (ou do tipo relatrio) podemos utilizar o termo reservado Me para nos referirmo s ao prprio formulrio ( contudo, se quisermos, podemos omitir pois este assumido por defeito). Quando estamos a escrever cdigo num formulrio, e nos queremos referir a outro formulrio, temos de qualificar o nome do outro formulrio de forma conveniente. Por exemplo: Forms!Form1.Caption = MyCaption Neste caso temos de ter a certeza de que o formulrio est aberto antes de utilizarmos a instruo anterior. A funo seguintes mostra como podamos utilizar a referncia de uma forma segura:
Private Sub cmdMyButton_Click() On Error GoTo Err_cmdMyButton_Click

Forms!frmExample.Caption = "MyForm" Exit_cmdMyButton_Click: Exit Sub Err_cmdMyButton_Click: If Err = 2450 Then ' Form not open DoCmd.OpenForm "frmExample" Resume Else MsgBox "Error: " & Err.Description Resume Exit_cmdMyButton_Click End If End Sub A rotina anterior introduz o chamado error handling, ou seja o lugar, proceder abertura do formulrio atravs da instruo DoCmd.OpenForm frmExample". A instruo resume serve para tratamento do erro. A primeira instruo informa o procedimento que em caso de erro deve prosseguir para a linha com a label Err_cmdMyButton_Click. Essa linha verifica em primeiro lugar o cdigo do erro (utilizando para tal o objecto Err do VBA). Neste caso, se o erro for o 2450, ento temos de, em primeiro indicar ao Access que aps o processamento da rotina de erro deve ser retomado o cdigo responsvel pelo erro (ou seja, deve ser retomada a execuo do programa na linha que originou o erro). Por sua vez a mensagem Resume Exit_cmdMyButton_Click serve para indica que o Access deve retomar o cdigo na linha Exit_cmdMyButton_Click.

Poderamos tambm verificar se o formulrio j est carregado antes de utilizarmos a referncia:


Function ap_FormIsOpen(strFormName As String) As Boolean ap_FormIsOpen = _ Application.CurrentProject.AllForms(strFormName).IsLoaded End Function

Em vez de utilizarmos a coleco dos formulrios para acedermos a um formulrio, podemos referirmo-nos classe do formulrio (alis, foi esta a estratgia que utilizmos no captulo anterior). Se tivermos um formulrio chamado de Form1, temos de nos referir a esse formulrio como Form_Form1.Caption = My Caption (refira-se que neste caso as alteraes so aplicadas a todos os formulrios que venham a ser abertos).

Captulo 3
Utilizando os objectos de dados do Access (ActiveX Data Objects)
O principal objectivo deste captulo introduzir o ADO (ActiveX Data Objects). Estes objectos vieram substituir o DAO (Data Access Objects) como meio preferencial de aceder base de dados por forma a inserir, eliminar e modificar informao. Actualmente o Access suporta ambas as tecnologias. Contudo, a partir da verso 2000 a Microsoft encoraja a utilizao do ADO como meio de acesso aos dados armazenados na base de dados 10 . O ADO o mtodo standard para aceder a base de dados. Comeou por ser utilizado pelos programadores de VB para acederem base de dados, uma vez que no conseguiam utilizar o OLE DB para esse efeito. Modelos de objectos do ADO A tecnologia ADO suporta vrios modelos 11 de objectos, que se subdividem em: ActiveX Data Objects (ADODB) que permite a criao de recordsets e o processamento de erros; ADO Extensions (ADOX), que permite modificar a estrutura da base de dados ( a nvel da criao/modificao de tabelas Jet and Replication Objects (JRO), que permite trabalhar com o motor da base de dados (JET) e com a replicao da base de dados. Este modelos de objectos encontram-se, apesar de separados, relacionados. Iremos apenas estudar o modelo ADODB, utilizado na manipulao da informao que se encontra armazenada na base de dados.

10

O DAO possui o seu prprio modelo para aceder informao. Aconselha-se os interessados em aprenderem a utilizar o DAO para recorrerem ao manual do VBA. 11 De facto, ao contrrio do DAO, que apenas apresenta um modelo, o ADO apresenta vrios modelos de objectos independentes.

O modelo ADODB A figura seguinte tenta mostrar os principais objectos que compem o modelo de objectos ADODB:

O objecto Connection permite efectuar ligaes base de dados. O objecto Errors permite ao utilizador efectuar o tratamento de erros. O objecto Command permite efectuar aces sobre a base de dados (geralmente utilizado para obter resultados de consultas, inserir dados, etc). Costuma ser acompanhado de um conjunto de parmetros (coleco Parameter, composta, como seria de esperar, por objectos Parameter). O objecto Recordset, que contm um conjunto de registos devolvidos aps a execuo de uma consulta. Antes de comearmos a utilizar os objectos ADO, h que informar o Access que os queremos utilizar. Para tal, temos que incluir uma referncia aos objectos ADO2.1 (consulte o captulo anterior para ver como que se procede introduo de uma referncia de objectos).

Estabelecendo a ligao base de dados A partir de agora todos os exemplos apresentados so mais completos e, sempre que possvel, apresentam exemplos de manipulao de dados utilizando a programao. Bem, sempre que utilizarmos o ADO para manipular a informao que se encontra na base de dados temos, em primeiro lugar, de estabelecer uma ligao a essa base de dados. Aps estabelecermos a ligao, podemos enviar comandos que iro ser processados pelo motor da base de dados. Para estabelecer a ligao (a chamada connection) temos de utilizar o objecto Connection do ADO. O estabelecimento de uma ligao a uma base de dados envolve sempre a configurao da chamada connection string (uma string que serve para configurar os parmetros necessrios ligao: caminho para o ficheiro da base de dados, utilizador, password, etc.). A situao mais utilizada consiste em nos ligarmos base de dados actual (ou seja, estamos a desenvolver um projecto e, geralmente, ligamo-

nos a essa base de dados para manipularmos a informao). Neste caso a seguinte instruo suficiente para assegurar a correcta configurao da ligao (ou seja, para assegurar a correcta obteno do objecto connection): utilizar o namespace ADODB para nos referirmos o conceito de namespace um conceito mais avanado que serva para identificar um conjunto de nomes (evitar conflitos) Dim conLocal as ADODB.Connection utilizar o objecto CurrentProject e a sua propriedade Connection para estabelecer a ligao set conLocal = CurrentProject.Connection A ligao a outra base de dados um pouco mais complexa e apresentada apenas para satisfazer a curiosidade (uma vez que no ir ser utilizada ao longo do manual):
Sub DisplayAnotherConnection() Dim cnnNet As New ADODB.Connection cnnNet.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Books\PwrPrg2000\AppCD\Examples\VideoDat.mdb" cnnNet.Close

End Sub

Repare-se que neste segundo caso foi necessrio criar um objecto do tipo pretendido utilizando para tal a instruo NEW (recorde-se que os objectos tm que ser sempre inicializados atravs do NEW ou do SET). Outro aspecto importante reside no facto de, no segundo excerto de cdigo, ser necessrio abrir a ligao base de dados. Aps estabelecida a ligao, costume procedermos a uma de duas operaes: obter dados que se encontram nas tabelas; inserir/modificar/eliminar dados que se encontrem nas tabelas. O objecto Recordset Para obtermos dados provenientes das tabelas temos de utilizar o objecto Recordset. Este objecto responsvel por guardar a informao proveniente da execuo de uma instruo SQL12 . Aqui apenas analisamos o objecto recordset como forma de obter informao; contudo, ele tambm pode ser utilizado para modificar/acrescentar informao. O cdigo seguinte ilustra como poderamos obter todas os registos de uma tabela chamada tblMoviesTitles:

12

O SQL a linguagem utilizada para acedermos a base de dados. A instruo SELECT responsvel por seleccionar um conjunto de registos de uma ou mais tabelas que verifiquem uma determinada condio.

Como estamos a ver, o cdigo bastante simples! S temos que seguir a seguinte sintaxe: Recordset.Open string_sql, connection_object, cursor_type, locking_method A string de sql uma string que contm as instrues que se pretendem executar sobre a base de dados. O objecto Connection necessrio para assegurar uma ligao base de dados (s aps estabelecida a ligao que podemos executar as instrues pretendidas). O CursorType define a maneira como o nosso recordset deve-se portar: adOpenKeyset: possvel actualizar os dados do recordset, no sendo contudo visiveis as alteraes que outros utilizadores podem estar a efectuar; adOpenStatic: recordset s de leitura (deve ser utilizado em situaes de consulta); pode-se navegar em ambos os registos; adOpenForwardOnly: igual ao anterior, com a particularidade de a navegao ser s num sentido. O LockingMethod est relacionada com as medidas de segurana que devem tomadas aquando da execuo de determinadas operaes sobre o recordset. As opes possveis so as seguintes: adLockOptimistic: tranca os recordsets apenas quando so modificados e gravados; adLockPessimistic: tranca o receordset aquando da edio (alterao) dos valores; apLockReadOnly: trancar o recordset. Existem alguns conselhos teis que devem ser seguidos: para a construo das strings SQL devemos utilizar as vistas de consultas. As consultas no so mais do que instrues SQL. Da que a maneira mais fcil de construirmos as consultas passa pela utilizao deste editor; em seguida, mudamos para a vista de sql e simplesmente copiamos a instruo de SQL; a melhor opo para o Locking method a adLockOptimistic (uma vez que apenas vamos utilizar os recordsets para obter informao). Como vimos, os recordsets obtm dados de uma (ou mais) tabela(s). Assim, muito provvel que algumas instrues retornem recordsets vazios, ou seja, sem nenhum registo. Antes de explicarmos como podemos proceder a essa validao temos de introduzir dois novos conceitos: EOF e BOF. A propriedade EOF (s de leitura) retorna true (verdadeiro) se estivermos antes do primeiro registo do recordset; por sua vez, a propriedade BOF retorna true se estivermos depois do ltimo registo da base de dados. Logo, podemos utilizar a seguinte expresso para verificarmos se temos um recordset vazio: If rec.EOF and rec.BOF then temos um recordset vazio end if Por outro lado, se o recordset no estiver vazio, bvio que podemos querer percorrer os vrios valores do recordset. Para percorremos os valores do recordset podemos utilizar a seguinte estratgia:
Set cnnLocal = CurrentProject.Connection string sql pede todos os valores da a utilizao do * em que o campo ReleaseDate seja igual a 02/01/99 o Access obriga a utilizao do # para especificar a data

rstCurr.Open "Select * from tblMovieTitles where ReleaseDate = #02/01/99#", cnnLocal, _ adOpenKeyset, adLockPessimistic Do Until rstCurr.EOF '-- Print each of the fields For Each fldCurr In rstCurr.Fields Debug.Print fldCurr.Value Next rstCurrent.MoveNext Loop rstCurr.Close

Como podemos ver, possvel aceder coleco dos campos retornados por um recordset atravs da coleco Fields, que contm objectos do tipo Field. Como a propriedade Fields a propriedade por defeito do objecto recordset, ento para acedermos ao campo Nome de um recordset (suponhamos que j obtivemos o recordset, e que um dos campos se chama Nome) podemos utilizar qualquer uma das seguinte linhas: supor que temos um recordset rec e que o recordset j foi inicializado rec.Fields.Item(Nome) ou rec.Item(Nome) ainda podemos simplificar mais se tivermos em ateno que a propriedade Item a propriedade por defeito do objecto Fields por isso podemos ter ainda o seguinte: rec(Nome) O ficheiro cap2_3 apresenta uma base de dados com trs formulrios. Um formulrio permite introduzir os dados; outro permite ver os dados existentes; e o terceiro permite eliminar os dados. Foi utilizada programao VBA nos trs casos para mostrar como possvel construir uma base de dados recorrendo somente a VBA. Repare-se ainda na utilizao das regras de validao e respectivo texto de validao como meio auxiliar de proceder verificao de certas restries (se quisssemos podamos ter utilizado cdigo para efectuar esta validao).

Captulo 4
Tratamento de erros
Como do conhecimento geral, no h nenhum programa que possa considerar-se imune a erros. Seno vejamos o exemplo do Windows 13 : quem que nunca se deparou com um dos famosos ecrs azuis (BSOD- blue screen of death)? Quando ocorre um erro, o Access mostra-nos uma mensagem de erro. Esta mensagem geralmente permite- nos efectuar a depurao. Isto bom quando estamos em
13

Sim, o Windows um sistema operativo. Contudo, um sistema operativo no mais do que um programa especial, que tem como principal objectivo gerir um computador.

desenvolvimento. Contudo, aps terminada a fase de desenvolvimento, no muito agradvel utilizar um programa que, perante um erro, mostra uma mensagem destas: Assim apareceu o error handling 14 ! O error handling permite-nos efectuar o tratamento de um erro, fazendo com que a nossa aplicao termine de uma forma controlada. Bem, em muitos casos, at podemos impedir que esta termine, pois possvel apanhar o erro e continuar a correr o programa. O Access efectua o tratamento de erro atravs dos seguintes termos reservados: On Error, Exit e Resume. A instruo On Error indica a instruo que o Access deve retomar em caso de erro (deve ser sempre colocada no incio de uma funo ou procedimento). A instruo On Error costuma ser utilizada com labels. A funo seguinte ilustra essa utilizao: Sub Test() tratamento de erro deve ser a primeira instruo On Error Goto Erro ....codigo ....codigo sair da funo exit sub tratamento de erro Erro: Msgbox err.description Exit sub End Sub Existem alguns aspectos importantes no cdigo anterior: introduo da label Erro: as labels so sempre utilizadas em conjunto com a instruo Goto. Se houver algum erro durante a execuo do cdigo, ento o Access automaticamente salta para a primeira instruo depois da label indicada (neste caso, Erro); repare-se como antes da label erro existe um exit sub. Esta instruo obriga a que se saia imediatamente da funo (semelhante instruo return do C). Deve ser colocada uma instruo antes da label pois caso contrrio o cdigo relativo ao erro iria ser processado (o que no era necessrio neste caso, uma vez que no ocorreu nenhum erro); Existem outras alternativas no processamento de erros. Por exemplo o ficheiro cap4_1.mdb retorna ao inicio da subrotina sempre que verifica um determinado erro. Neste exemplo pedido um nmero, e em seguida tenta-se dividir 100 pelo nmero introduzido pelo utilizado. S uma coisa pode correr mal: introduzir o nmero 0. A soluo encontrada neste caso passa por voltar ao inicio da rotina e pedir um novo nmero ao utilizador. Existem outras variaes do on error que tambm costumam ser utilizadas. Temos o on error resume next, por exemplo. Esta instruo obriga o Access a retomar a instruo seguinte em caso de erro. Pode ser til quando tenhamos de apagar um registo de uma tabela utilizando o ADO.

14

Tambm designado em portugus de tratamento de erros.

Para alm desta, existe ainda a on error goto 0, que obriga o access a mostrar o dilogo que vimos no inicio do captulo. Portanto j vimos como detectar e tratar o erro. Falta apenas vermos como identificar o erro!

O objecto Err Quando acontece um erro, o Access procede ao armazenamento desse erro numa varivel designada de Err. Pode-se mesmo afirmar que o Err contm o erro mais recente detectado pelo Access. O objecto Err apresenta vrias propriedades, das quais se destacam as seguintes: Description: descrio do erro ocorrido; Number: nmero do erro ocorrido; Este objecto tambm apresenta alguns mtodos: Clear: permite limpar o ltimo erro Raise: permite criar um erro (pode ser til no caso de querermos construir os nosso prprios erros). Para mais informaes sobre estes tpicos deve ser consultada a ajuda on- line do Access.

Captulo 5
A aplicao Sub-MovieCentral
A aplicao Sub-MovieCentral um projecto do autor deste livro que foi adaptado para Microsoft Access. O objectivo desta aplicao permitir armazenar os dados relativos aos filmes que eventualmente um utilizador possa possuir (ficheiro code.mdb). No caso desta aplicao, foram apresentados os seguintes requisitos: manter uma lista actualizada de filmes; deve ser possvel proceder a operaes de manuteno da base de dados: adicionar, modificar e eliminar registos; deve ser possvel ma nter vrios dados relacionados com os filmes, dos quais se destacam os seguintes: o nome actores; o nome realizadores; o nome do filme; o link para a pgina oficial do filme. Assim, e aps efectuado o necessrio processo de obteno de requisitos, chegou-se ao seguinte modelo relacional:

Esta aplicao apresenta vrios exemplos relacionados com aspectos que podem ser utilizados no access: barras de menus; barras de ferramentas; macros; painis; splash screens; cdigo VBA; etc. O cdigo referente a este programa encontra-se no ficheiro code.mdb. A figura seguinte ilustra o aspecto da aplicao:

A aplicao Sub-Movie Central foi construda utilizando um formulrio principal, no qual se colocou tab control. Este tab control possui trs tabs ou pginas, contendo cada um deles um formulrio. Apenas o formulrio Filmes impede a insero/modificao dos filmes apresentados (os outros formulrios permitem que estas operaes sejam realizadas directamente. Todos os botes apresentados possuem cdigo VBA associado a eles. J agora, refira que para construir estes botes com esta apresentao (texto + imagem) foi necessrio utilizar um artificio, pois o access no permite a directa construo de um boto com texto e imagem; neste caso, colocou-se no formulrio uma caixa de texto + uma image m + um boto (com estilo transparente) por cima dos elementos anteriores. A aplicao apresenta um splash screen, que mostrado ao abrir o formulrio principal e que se auto-destri quando algum clica sobre ele (ou carrega numa tecla) ou quando passam 3 segundos desde o seu inicio. No caso da primeira opo, bastou colocar cdigo no evento onclick (onkeydown). Para que o formulrio se autodestrua ao fim de 3 segundos, tivemos de instruir o formulrio para chamar uma funo ao fim desse tempo. Para tal utilizou-se um timer, mais propriamente a propriedade TimerInterval do formulrio (ver evento onload do mesmo formulrio).

Voltando ao formulrio principal, temos de referir que o evento de click num formulrio foi tratado em todos os formulrios que se encontram nas tabs do formulrio principal. Cada um destes formulrios contm uma varivel que, em cada instante, possui a posio seleccionada dentro do formulrio (uma vez que todos os formulrios apresentam um conjunto de registos recordset e um recordselector que guarda a posio actual nessa lista de registos ento basta saber qual a posio do recordselector, e depois obter o ID do elemento que se encontra nessa posio; o nico pormenor digno de destaque o recordset associado ao formulrio (pode ser obtido atravs da propriedade recordset): um recordset do tipo DAO e no do tipo ADO por isso que foi necessrio acrescentar uma referncia ao DAO). Chama-se tambm a ateno para o facto de todos os formulrios terem sido alterados (modificaram-se vrias propriedades de forma a obter o resultado pretendido). Construram-se vrias barras de ferramentas, uma para cada sub- formulrio (contido em cada uma das pginas do tab control). Cada uma destas barras foi associada a um formulrio e recorreu-se a VBA para processar o evento onchange do tab control, pois em cada instante s deveria estar presente a barra de ferramentas associada ao formulrio que est seleccionado (e tal s possvel utilizando cdigo VBA ou ento macros; neste caso optou-se por utilizar cdigo VBA. Quer as barras de ferramentas, quer a barra de menus recorrem a macros para executar as aces. Algumas macros servem apenas para juntar as opes do menu ao cdigo VBA correspondente (ex.: tab1, tab2, etc, etc ). As restantes executam as aces contidas nas macros (total_movies_preview, etc). Para terminar os aspectos relacionados com as macros, refira-se ainda que quando queremos executar cdigo VBA (que est contido num mdulo) atravs de uma macro temos de colocar esse cdigo numa funo ( e nunca num procedimento). Esta aplicao pretende apenas demonstrar como que se pode construir (de uma forma simples) uma base de dados utilizando o Access. Claro que ficaram vrios aspectos por implementar, como por exemplo a construo de um relatrio associado ao formulrio Add_Movies que trata da adio/alterao dos dados de um filme. Apesar destas faltas, pensa-se que a aplicao ilustra de forma significativa algumas das capacidades do access.

Você também pode gostar