DAO Linguagem : Visual Basic Base de dados : Access
Indice 1 – Introdução 2 – Mecanismos de Acesso a uma Base de dados 3- Abertura de uma Base Dados, Opendatabase 4 – Abertura de um RecordSet 4.1 – Métodos de Navegação no Recordset 4.2 – Propriedades BOF e EOF 4.3 – Propriedades do RecordCount , AbsolutePosition e Percentposition 4.4 – Acesso aos Campos do Registo Actual 4.5 – Métodos Edit,Addnew,Update e CancelUpdate 4.6 – Método Delete 4.7 – Método Find e NoMatch 5 – DAO e SQL
1 – Introdução DAO, foi criado antes do RDO e do ADO, é um conjunto de “tarefas” que permite que o programador possa aceder a informação de uma base de dados,contudo o DAO não permite apenas aceder informação também deixa controlar e administrar base de dados locais ou remotas em vários formatos. Usando DAO poderá criar e modificar a estrutura da base de dados, criar tabelas, querys, relações,indexar ,receber, adicionar, actualizar e remover informação. Neste Artigo irei abordar como poderemos fazer a abertura da Databases e de RecordSets (acedendo as suas propriedades e métodos) através de código. E também a explicação de como poderá-se fazer uma query em SQL à base de dados Access utilizando DAO.
2 – Mecanismos de Acesso a uma Base de Dados Data Control – Controlo padrão; Data Access Objects (DAO) – Permite utilizar código; Open Database Conectivity (ODBC) – Permite a utilização directa das API; Remote Data Objects (RDO) – Desenvolvido para ultrapassar a complexidade do ODBC,é uma combinação deste último com o DAO; ActiveX Data Objects (ADO) – Desenvolvido para combinar as melhores características das três tecnologias (DAO,ODBC e RDO); Visual Basic SQL Libraries (VBSQL) – Permitem l Ligação directa a um servidor Microsoft SQL;
3 – Abertura de uma Base Dados (Opendatabase) Uma base de dados pode ser aberta invocando o método OpenDatabase do workspace corrente. O método OpenDatabase abre a base de dados e retorna uma referência do tipo da base de dados e a sua localização . Exemplo: Dim MinhaBD As Database Set MinhaBD = OpenDatabase(“c:\...\MinhaBD.mdb”)
4 – Abertura de um Recordset O método OpenRecordset de um objecto do tipo Database permite abrir os recordsets da base de dados. Sintaxe: MeuRecordSet = MinhaBD.OpenRecordset(source, type) source – nome da tabela ou query de que resulta o recordset type – DBOpenTable, DBOpenDynaset ou DBOpenSnapShot Exemplo: ‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable)
4.1 – Metodos de Navegação no recordset O registo actual de um recordset pode ser alterado através de um dos seguintes métodos: MoveFirst, o registo actual passa a ser o primeiro registo do recordset MoveLast, o registo actual passa a ser o último registo do recordset MovePrevious, o registo actual passa a ser o registo anterior ao actual MoveNext, o registo actual passa a ser o registo seguinte ao actual Move, permite especificar o número de registos que se avança ou recua no recordset. Exemplos: MeuRecordset.Move 5 ou MeuRecordset.Move -10 Caso não existam registos no recordset ocorrerá um erro sempre que qualquer destes métodos seja invocado. O mesmo acontecerá sempre que a invocação de um destes métodos implicar a deslocação para um registo anterior ao primeiro ou posterior ao último registo do recordset.
Exemplos Problema Proposto : “ Ligar a uma base de dados Access e por o ponteiro/cursor no primeiro registo do recordset” (tabela) ‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordSet.Movefirst O cursor/ponteiro irá para o primeiro registo da nossa Tabela chamada Clientes.
MeuRecordSet.MoveNext O cursor/ponteiro passará para ao próximo registo.
MeuRecordSet.MovePrevious O cursor/ponteiro passará para o registo anterior.
MeuRecordSet.MoveLast O cursor/ponteiro passará para o ultimo registo.
4.2 - Propriedades BOF e EOF As propriedades BOF (Beginning Of File) e EOF (End Of File), se forem verdadeiras, indicam se o registo actual se encontra antes do primeiro registo ou depois do último registo, respectivamente. Se ambas as propriedades forem verdadeiras significa que não existem registos no recordset. As propriedades BOF e EOF só são acessíveis em run-time e apenas para leitura. Estas propriedades são muito úteis no tratamento de erros resultantes dos métodos de navegação no recordset. Exemplo .: Problema Proposto : “ Indicar se o cursor/ponteiro chegou ao fim do RecordSet(tabela)” ‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordset.MoveLast IF tabela.EOF = True Then MsgBox "O cursor/ponteiro chegou ao fim do RecordSet(tabela)" End If
4.3 – Propriedades do RecordCount , AbsolutePosition e Percentposition A propriedade RecordCount permite saber quantos registos existem num recordset. A propriedade AbsolutePosition permite saber a posição do registo actual no recordset ou alterar o registo actual: varia entre 0 e RecordCount-1. A propriedade PercentPosition permite saber a posição do registo actual no recordset ou alterar o registo actual em termos de percentagem do total de registos: varia entre 0.00 e 100.00. Estas propriedades só indicam valores correctos depois de terem sido percorridos todos os registos do recordset. Por isso, é comum fazer preceder a sua utilização da invocação do método MoveLast. Exemplo .: Problema Proposto : “Mostrar quantos registos tem o Recordset(tabela)” ‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”)
Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordset.MoveLast Msgbox MeuRecordSet.RecordCount
4.4 – Acesso aos Campos do Registo Actual
Para aceder por código aos campos do registo actual utiliza-se a seguinte notação: MinhaTextBox.Text = MeuRecordset!Nsocio Ou então MinhaTextBox.text = MeuRecordset.Fields(0) Para actualizar o valor de um campo do registo actual utiliza-se a seguinte notação: MeuRecordset!Nsocio = MinhaTextBox.Text Ou então MeuRecordset.Fields(0) = MinhaTextBox.Text (irei usar este método nos exemplos)
No entanto, como veremos, a actualização de campos do registo actual só é possível após a invocação do método Edit ou do método AddNew.
4.5 – Métodos Edit,Addnew,Update e CancelUpdate O método Edit copia os campos do registo actual para uma zona de memória temporária de forma a que o mesmo possa ser actualizado. O método AddNew cria um novo registo e copia os seus campos para uma zona de memória temporária de forma a que estes possam ser editados. Ao chamar os métodos Edit e AddNew os registos não são guardados automaticamente na base de dados. Para que tal aconteça é necessário invocar o método Update após a alteração dos campos que foram copiados para a zona de memória temporária. O método CancelUpdate permite cancelar qualquer actualização pendente, isto é, cancelar uma operação iniciada com os métodos Edit ou AddNew sem gravar as alterações na base de dados.
Exemplo .: Problema Proposto : “Actualizar o ultimo registo do campo Nsocio para o valor 11 e criar um novo registo.”
‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordset.MoveLast MeuRecordset.edit MeuRecordset.Fields(0) = MinhaTextBox.Text MeuRecordset.Addnew MeuRecordset.update
4.6 – Método Delete O método Delete permite apagar da base de dados o registo actual. O seguinte exemplo apaga da base de dados o último registo do recordset:
Exemplo: Problema Proposto : “Apagar o ultimo registo do RecordSet.” ‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordset.MoveLast MeuRecordset.Delete
4.7 – Método Find e NoMatch O método FindFirst procura o primeiro registo do recordset que satisfaz um determinado critério. O método FindLast procura o último registo do recordset que satisfaz um determinado critério. O método FindNext procura o próximo registo que satisfaz um determinado critério partindo do registo actual. O método FindPrevious procura o primeiro registo anterior que satisfaz um determinado critério partindo do registo actual. A sintaxe geral dos métodos FindFirst, FindLast, FindNext e FindPrevious é a seguinte: FindNext critério critério é uma string que especifica o critério de procura Exemplo: Problema Proposto : “Procurar na tabela Clientes o primeiro registo que satisfaz a seguinte condição Nsocio = 1 e procurar na tabela o ultimo registo na tabela que satisfaz a seguinte condição Nome =’ teste3’.”
‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet As Recordset Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) Set MeuRecordSet = MinhaBD.OpenRecordset(“AMinhaTabela”, DBOpenTable) MeuRecordset.FindFirst “Nsocio = 1 ” MeuRecordset.FindLast “Nome = ‘teste3’ ”
Sempre que na sequência da invocação de um dos métodos FindFirst, FindLast, FindNext e FindPrevious for encontrado um registo, esse registo passa a ser o registo actual e a propriedade NoMatch do recordset assume o valor False. Sempre que não seja encontrado nenhum registo a propriedade NoMatch assume o valor True.
5 – DAO e SQL O mecanismo de Acesso DAO permite a utilização de querys à base de dados ou seja de instruções SQL , passarei a demonstrar num simples exemplo como se poderá fazer isso. Exemplo: Problema Proposto : “Selecionar todos os clientes com 19 anos de idade , utilizando SQL.”
‘ Declaração das variáveis necessárias Dim MinhaBD As Database Dim MeuRecordSet_SQL As Recordset
Set MinhaBD = OpenDatabase(“c:\My Documents\MinhaBD.mdb”) ‘ Definer a Query sqlquery = "Select * From Clientes Where Idade = 19" Set MeuRecordSet_SQL = MinhaBD.OpenRecordset(sqlquery) ‘ Mostrar o resultado da query à base de dados Msgbox MeuRecordSet_SQL!Nsocio Msgbox MeuRecordSet_SQL!Nome Msgbox MeuRecordSet_SQL!Idade Msgbox MeuRecordSet_SQL!Morada
FIM TMCS – RoLaN2 http://rprogrammer.blogspot.com
21 Abr. 06