Recordsets : Tables, Dynasets e Snapshots.


Conteúdo

Como abrir um banco de dados via DAO.

A primeira coisa a fazer para armazenar e/ou acessar dados é criar um banco de dados.Se já tiver um banco de dados, você tem de abrí-lo antes do seu programa poder usá-lo.
Os objetos de acesso a dados (DAO) são organizados em uma hierarquia (fig. 1- Hierarquia simplificada).

fig.1

 

-No topo da hierarquia temos o objeto DBEngine que controla
todos os outros objetos.Só pode existir um único objeto DBEngine.
-O objeto DBEngine possui uma coleção de de objetos Workspace
que define uma sessão para um usuário.
-Cada objeto Workspace possue uma coleção de objetos Database
que contém os bancos de dados abertos disponíveis.
-Cada objeto DataBase possue uma coleção de objetos Recordset
que representam os conjuntos de registros abertos.(Cada objeto Recordset
possui uma coleção Fields).

A abertura de um banco de dados e feita com o uso do método Opendatabase do objeto Workspace, mostrado no código abaixo :


    Dim meubd as Database  
    Set meubd  = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")

O objeto Workspace não faz parte do banco de dados , e pode ser visto como uma definição de uma sessão para o usuário que está logado. Assim como o objeto DBEngine , o objeto Workspace é criado automaticamente e por isso não precisamos de variáveis objetos para referenciá-los. O primeiro objeto Workspace padrão criado será o primeiro da coleção Workspaces (Workspace(0) ) e a propriedade UserName do objeto será definida como 'Admin'.

Você precisará usar variáveis objeto para referenciar o objeto Database, e essas variáveis comportam-se como as demais varíaveis podendo ser públicas, privadas ou locais. A diferença é que as variáveis objetos precisam ser destruídas quando não forem mais necessárias , pois as mesmas não são automaticamente destruídas quando fora do escopo como as variáveis regulares. Para destruir uma variável objeto atribua a ela a palavara chave Nothing. Ex: Set db = Nothing.

Então para abrir um banco de dados você deve usar o método OpenDatabase do objeto Workspace, e portando não precisa preceder o método de seu objeto. Assim , apenas para ilustrar , as cinco linhas de código abaixo são equivalentes e todas elas abrem a base de dados Teste.mdb.

Dim db as Database

Dim db = DBEngine.Workspaces("Admin").OpenDatabase(App.Path & "\ teste.mdb")

Dim db = DBEngine.Workspaces(0).OpenDatabase(App.Path & "\ teste.mdb")

Dim db = Workspaces("Admin").OpenDatabase(App.Path & "\ teste.mdb")

Dim db = Workspaces(0).OpenDatabase(App.Path & "\ teste.mdb")

Dim db = OpenDatabase(App.Path & "\ teste.mdb")

Adivinha qual dessas linhas você vai preferir usar para abrir sua base de dados ?????

Para trabalhar com os objetos de acesso a dados você usa as variáveis do objeto para cada tipo de objeto (Database,Recordset,...). Para designar um objeto a uma variável do objeto utilize a instrução SET.
No código acima , primeiro definimos uma variável objeto de banco de dados(meubd), e a seguir usamos o método Opendatabase para designar nosso banco de dados, nome e localização à variável objeto declarada.
Após abrir o banco de dados você deve definir um Recordset para ter acesso aos dados contidos no banco de dados.

Conteúdo

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 versões anteriores.
Agora ao invés de abrir uma tabela ou criar um dynaset você abre um Recordset .
Há três tipos de Recordsets disponíveis:

Principais Propriedades dos Recordsets

 Propriedade    Descrição
------------------------------------------------------------------------
  BOF           True se você estiver no início do recordset.
                (antes do primeiro registro)

  EOF           True se você está no fim do recordset.
                (depois do último registro)            

  BookMark      Fornece o identificador(ID) do registro corrente.

  LastModified  O Bookmark do último registro que sofreu alteração.

  LastUpdate    O Bookmark do último registro que foi atualizado.
                (Um registro pode ser atualizado sem alterações.)

  Seek          Permite usar um índice e rapidamente encontrar um registro;

  NoMatch       True se durante uma busca o registro não foi
                localizado.(Chegamos ao fim do arquivo.)

  DateCreated   Retorna a data e hora em que a tabela foi criada

  LastUpdated   Retorna a data e hora em que a tabela foi modificada

  Filter/Sort   Permitem restringir os registros e estabelecer a ordem de
                classificação em um objeto Recordset do tipo Dynaset
                SnapShot ou Forward-only.

  Name          Retorna o nome do banco de dados  que possui o objeto Recordset
                Retorna o caminho completo e o nome do arquivo.

  RecordCount   Retorna o número de registros que foram acessados. Para retornar
                o número real de registros use um MoveLast seguido de um
                Movefirst.

  Absolute_     Referencia a posição relativa do ponteiro do registro no Recordset.
  Position      Devemos usar um Movelast e Movefirst para usar esta
                propriedade sem erros.

  Restartable/  Restartable Indica se um recordset pode ser criado com o método Requery.
  Requery            

Conteúdo

Tabelas: uso, vantagens/desvantagens, abertura.

Como todos os dados de um banco de dados estão armazenados em tabelas, acessar tabelas significa acessar diretamente os dados de um arquivo.

Vantagens do uso de Tabelas

Desvantagens do uso de Tabelas

Abertura de uma tabela para utilização

Para abrir uma tabela , defina um objeto Recordset e use o método OpenRecordset para acessar a tabela.
Informe a constante DbOpenTable para identificar o tipo de recordset criado. Veja o código abaixo:

    Dim meubd as Database  
    Dim minhatbl as Recordset
    Set meubd = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")
    Set minhatbl = meubd.OpenRecordset("Clientes",DbOpenTable)  

A novidade em relação ao código acima é a definição
    da variável objeto tipo Recordset minhatbl e a
    atribuição a esta variável da tabela Clientes do
    banco de dados Dados.mdb.
Note que o arquivo de banco de dados é padrão Access.

Conteúdo

Dynasets: uso, vantagens/desvantagens, abertura.

Um dynaset é um conjunto de ponteiros de registros provenientes de uma ou mais tabelas ,e indicam os dados especificados existentes quando da criação do dynaset.
Os dynasets são recordsets atualizáveis e refletem as alterações feitas pelo usuário nas tabelas e no próprio dynaset.

Vantagens do uso de Dynasets

Desvantagens do uso de Dynasets

Configuração de um Dynaset

Para utilizar um dynaset você deve definir um objeto recordset (Dim) e depois gerar o dynaset com o método OpenRecordset. Para selecionar os registros você pode usar uma instrução SQL. Veja exemplo abaixo:


    Dim meubd as Database  
    Dim meudyn as Recordset
    Set meubd  = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")
    Set meudyn = meubd.OpenRecordset("SELECT * FROM Clientes" , DbOpenDynaset)

Definimos a variável objeto meudyn , abrimos o banco de dados e a seguir criamos um dynaset que é composto por todos os registros da tabela Clientes , através da instrução SQL que seleciona (SELECT) todos (*) os registros da tabela Clientes.
Obs:Também é possível criar um dynaset a partir de outro dynaset.

Conteúdo

Snapshots: uso, vantagens/desvantagens, configuração.

Um snapshot é uma cópia dos dados de um recordset em um dado instante. Ele é muito semelhante a um dynaset pois pode ser criado a partir das tabelas básicas com as mesmas instruções.(SQL, QueryDef,...). A diferença principal é que um snapshot não é pode ser atualizado.

Vantagens do uso de Snapshots

Desvantagens do uso de Snapshots

Configuração de um Snapshot

Para utilizar um snapshot você deve definir um objeto recordset (Dim) e depois gerar o snapshot com o método OpenRecordset. Para selecionar os registros você pode usar uma instrução SQL. Veja exemplo abaixo:


    Dim meubd as Database  
    Dim meusnap as Recordset
    Set meubd  = DBEngine.Workspaces(0).OpenDatabase("C:\meudir\dados.mdb")
    Set meusnap = meubd.OpenRecordset("SELECT * FROM Clientes" , DbOpenSnapshot)

O código é praticamente idêntico ao utilizado para a criação de um dynaset.

Conteúdo

Métodos de Movimentação: MoveFirst, MoveNext,...

Os métodos de movimentação permitem a passagem de um registro para outro no interior dos recordsets, e alteram a posição do ponteiro do registro ao passar de um registro ativo para outro registro. Você pode usar os métodos de movimentação sobre quaisquer recordsets.
Vejamos a seguir os métodos de movimentação:

MoveFirst:
Movimenta o ponteiro do registro ativo para o primeiro registro do recordset aberto.
MoveNext:
Movimenta o ponteiro do registro ativo para o registro seguinte. Se não houver registro seguinte , você está no último registro, o flag de final de arquivo EOF será ativado.
MovePrevious:
Desloca o ponteiro do registro ativo para o registro anterior no recordset aberto. Se não houver registro anterior, você está no primeiro registro, o flag de início de arquivo BOF será ativado.
MoveLast:
Movimenta o ponteiro do registro ativo para o último registro do recordset aberto.
Move n
Desloca o ponteiro de registro n registros para frente (n positivo) ou para trás (n negativo) a partir do registro ativo no recordset aberto. Se o deslocamento levar o ponteiro de registro além dos limites do recordset ocorrerá um erro.

Conteúdo

Métodos de Localização: FindFirst, FindNext,...

Utilizamos os métodos de localização para localizar registros que satisfaçam a critérios determinados.
Os métodos de localização somente podem ser utilizados em Dynasets e Snapshots. Não é possível utilizá-los em objetos Tabela.
Vejamos a seguir os métodos de Localização:

FindFirst:
A partir do ínicio do recordset , localiza o primeiro registro que atende aos critérios definidos.
FindNext:
A partir da posição atual no recordset , localiza o registro seguinte (próximo) que satifaz aos critérios definidos.
FindPrevious:
A partir da posição atual no recordset , localiza o registro seguinte(anterior) que satifaz aos critérios definidos.
FindLast:
A partir do ínicio do recordset , localiza o último registro que satisfaz aos critérios definidos.

Após a executar o método de localização você deve verificar o status da propriedade NOMATCH. Se Nomatch é verdadeira o método não 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 diretório Controle, que contém uma tabela Clientes, e que desejamos encontrar o cliente de nome Ana Maria Rosa nesta tabela.Veja o fragmento de código abaixo:

    Dim bd as Database 
    Dim rs as Recordset
    Dim criterio as string
   
    Set bd = DBEngine.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 não localizado. "
    else
       msgbox rs.Fields("nome") & " localizado no arquivo. "
    endif

 

Conteúdo

Uso do método Seek.

O método Seek somente pode ser utilizado com o recordset do tipo Table(Tabela), e, embora ele seja o mais rápido dos métodos de localização e posicionamento de registros apresenta as seguintes limitações:

Para invocar o método Seek é necessário fazer a chamada ao método usando os operadores de comparação (<, <="," =",">=, > , <>) , lembrando que os valores de chaves que estão 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 não localizado. "
    else
       msgbox rs.Fields("nome") & " localizado no arquivo. "
    endif

No código acima definimos um recordset rs do tipo Tabela e a seguir definimos o indíce ativo rs.index =
    "Nome" e invocamos o método Seek usando
    o operador = com nome a ser procurado.
Obs:Note que: O índice ja deve ter sido criado , o operador deve estar entre aspas e que deve ser separado por vírgula do valor a ser localizado.

Conteúdo

Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


Retorna