Como associar formulários do Microsoft Access a conjuntos de registos ADO

Artigo: 281998 - Ver produtos para os quais este artigo se aplica.
Este artigo foi publicado anteriormente em PT281998
Avançado: Requer conhecimentos avançados sobre codificação, interoperabilidade e ambiente multi-utilizador.

Este artigo aplica-se a uma base de dados do Microsoft Access (.mdb) e a um projecto do Microsoft Access (.adp).

Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo descreve o que é necessário para criar um formulário actualizável associado a um objecto de conjunto de registos (Recordset) do ActiveX Data Objects (ADO).

Mais Informação

Para associar um formulário do Microsoft Access a um conjunto de registos, terá de definir a propriedade (Recordset) do formulário como um objecto de conjunto de registos (Recordset) válido do Data Access Objects (DAO) ou do ADO .

A propriedade Recordset foi introduzida no Microsoft Access 2000, e permite associar formulários a objectos de conjunto de registos Recordset do DAO ou do ADO. No entanto, os formulários do Access 2000 só podem ser do tipo actualizável se a ligação ADO for aberta usando MSDataShape e fornecedores de OLEDB para SQL Server. Para obter informações adicionais sobre esta limitação no Access 2000, clique no número de artigo seguinte para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
227053 ACC2000: Forms Based on ADO Recordsets Are Read-Only
No Microsoft Access 2002 ou posterior, poderá criar um formulário actualizável associado a um conjunto de registos ADO que utilize outros fornecedores de OLEDB. O formulário tem de obedecer a vários requisitos gerais para ser do tipo actualizável quando é associado a um conjunto de registos ADO. Estes requisitos gerais são:
  1. O conjunto de registos ADO subjacente tem que ser actualizável.
  2. O conjunto de registos tem que conter um ou mais campos que sejam indexados exclusivamente, tal como a chave primária de uma tabela.
Os outros requisitos necessários à capacidade de actualização variam consoante o fornecedor. Este artigo descreve os outros requisitos quando utilizar os fornecedores Microsoft SQL Server, Jet, ODBC e Oracle OLEDB.

Requisitos para Microsoft SQL Server

Existem dois requisitos principais para suportar a capacidade de actualização quando associa um formulário a um conjunto de registos ADO que esteja a utilizar dados do Microsoft SQL Server:
  • A ligação do conjunto de registos ADO deve utilizar o fornecedor de OLEDB Microsoft Access 10.0 como fornecedor de serviços.
  • A ligação do conjunto de registos ADO deve utilizar o fornecedor de OLEDB Microsoft SQL Server como fornecedor de dados.
NOTA: o fornecedor de OLEDB Microsoft Access 10.0 é um fornecedor de serviços OLEDB que foi criado especificamente para ser usado no Microsoft Access. Não foi concebido para ser utilizado noutras aplicações que não o Microsoft Access e não é suportado por outras aplicações.

Quando cria conjuntos de registos ADO no Microsoft Access, pode escolher qual a ligação ADO que será usada pelo conjunto de registos. O código ADO pode partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access para a base de dados do SQL Server que esteja aberta num ficheiro de projecto (ADP) do Access, ou poderá criar uma nova ligação ADO a uma outra base de dados SQL Server através de programação.

Partilhar a ligação ADO utilizada pelo Microsoft Access

Se estiver a utilizar um ficheiro de projecto (.adp) do Access ligado a uma base de dados do Microsoft SQL Server, o código ADO poderá partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access. Esta ligação é exposta pela propriedade CurrentProject.AccessConnection.

O exemplo seguinte demonstra como associar um formulário a um conjunto de registos ADO baseado em dados do SQL Server que partilha uma ligação ADO com o Microsoft Access.
  1. Abra o projecto de exemplo NorthwindCS.adp.
  2. Abra o formulário Clientes na vista Estrutura.
  3. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  4. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Use the ADO connection that Access uses
       Set cn = CurrentProject.AccessConnection
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
    
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. Guarde e feche o formulário.
  6. Abra o formulário Clientes na vista de Formulário.
  7. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados do SQL Server.

Abrir uma ligação ADO Separada

Em determinada altura, poderá precisar de abrir e gerir a sua própria ligação ADO ao SQL Server. Por exemplo, teria que utilizar esta abordagem se estivesse a escrever código numa base de dados (.mdb) ou num ficheiro de projecto (.adp) do Access que estivesse ligada a uma outra base de dados do SQL Server que não aquela a que está ligada a sua aplicação. Repare que quando usa esta abordagem, a Microsoft recomenda que feche a ligação ADO que abriu quando esta já não for necessária. Por exemplo, poderá querer fechar a ligação ADO no evento Unload do formulário.

O exemplo seguinte demonstra como abrir a sua própria ligação ADO a uma base de dados do Microsoft SQL Server e como associar um formulário à mesma:
  1. Abra a base de dados de exemplo Adamastor.mdb.
  2. Abra o formulário Clientes na vista Estrutura.
  3. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  4. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
    
       'Use the Access 10 and SQL Server OLEDB providers to
       'open the Connection
       'You will need to replace MySQLServer with the name
       'of a valid SQL Server
       With cn
          .Provider = "Microsoft.Access.OLEDB.10.0"
          .Properties("Data Provider").Value = "SQLOLEDB"
          .Properties("Data Source").Value = "MySQLServer"
          .Properties("User ID").Value = "sa"
          .Properties("Password").Value = ""
          .Properties("Initial Catalog").Value = "NorthwindCS"
          .Open
       End With
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. Adicione o código abaixo ao evento Unload do formulário:
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. Guarde o formulário e feche-o.
  7. Abra o formulário Clientes na vista de Formulário.
  8. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados do SQL Server.

Requisitos para o Microsoft Jet

Apesar de ser possível associar um formulário a um conjunto de registos ADO que utilize dados de uma base de dados Jet, a Microsoft recomenda que utilize DAO. O DAO está optimizado para Jet e, normalmente, tem um desempenho mais rápido que o ADO quando utilizado com uma base de dados Jet.

Quando associa um formulário a um conjunto de registos ADO utilizando dados do Microsoft Jet, existem duas alternativas:
  • A propriedade LigaçãoActiva (ActiveConnection) do conjunto de registos deve utilizar o fornecedor de serviços de OLEDB Microsoft Access 10.0, assim como o fornecedor de dados OLEDB Microsoft Jet 4.0 e o conjunto de registos deve estar situado no servidor.

    - ou -
  • A propriedade LigaçãoActiva (ActiveConnection) do conjunto de registos deve utilizar apenas o servidor de dados de OLEDB Microsoft Jet 4.0 e o conjunto de registos deve estar situado no cliente.
Tal como referido anteriormente na secção "Microsoft SQL Server" deste artigo, poderá escolher qual a ligação ADO que será utilizada pelo conjunto de registos quando utilizar uma base de dados Jet. O código ADO pode partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access para o ficheiro de base de dados (.mdb) Jet aberto, ou pode criar uma nova ligação ADO para um ficheiro de base de dados Jet separado através de programação.

Partilhar a ligação ADO utilizada pelo Microsoft Access

Se estiver a escrever código na mesma base de dados (.mdb) do Microsoft Access que contém os dados de que o conjunto de registos necessita, é possível ao código ADO partilhar a ligação ADO que está a ser utilizada pelo Microsoft Access. Esta ligação é exposta pela propriedade CurrentProject.AccessConnection. O exemplo seguinte demonstra como associar um formulário a um conjunto de registos ADO numa base de dados Jet, partilhando a ligação ADO que está a ser utilizada pelo Microsoft Access:
  1. Abra a base de dados de exemplo Adamastor.mdb.
  2. Abra o formulário Clientes na vista Estrutura.
  3. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  4. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
                    
       Set cn = CurrentProject.AccessConnection
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseServer
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. Guarde o formulário e feche-o.
  6. Abra o formulário Clientes na vista de Formulário.
  7. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis que utilizam dados Jet.

Abrir uma ligação ADO Separada

Em determinada altura, poderá precisar de abrir e gerir a sua própria ligação ADO a uma base de dados Jet. Por exemplo, teria que utilizar esta abordagem se estivesse a escrever código numa base de dados separada da base de dados que contém os dados de que necessita. Repare que quando usa esta abordagem, a Microsoft recomenda que feche a ligação ADO que abriu quando esta já não for necessária. Por exemplo, poderá querer fechar a ligação ADO no evento Unload do formulário.

O exemplo seguinte demonstra como abrir a sua própria ligação ADO a uma base de dados Microsoft Jet e como associar um formulário à mesma:
  1. Crie uma nova base de dados vazia.
  2. Importe o formulário Clientes da base de dados de exemplo Adamastor.mdb.
  3. Abra o formulário Clientes na vista Estrutura.
  4. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  5. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
    
       With cn
          .Provider = "Microsoft.Access.OLEDB.10.0"
          .Properties("Data Provider").Value = "Microsoft.Jet.OLEDB.4.0"
          .Properties("Data Source").Value = _
              "C:\Program Files\Microsoft Office\Office10" & _
              "\Samples\Northwind.mdb"
          .Open
       End With
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  6. Adicione o código abaixo ao evento Unload do formulário:
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  7. Guarde o formulário e feche-o.
  8. Abra o formulário Clientes na vista de Formulário.
  9. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis que utilizam dados Jet.

Requisitos para ODBC

Quando associa um formulário a um conjunto de registos ADO que utiliza dados de uma base de dados ODBC, existem dois requisitos principais:
  • A ligação ADO utilizada pelo conjunto de registos deve utilizar o fornecedor de OLEDB Microsoft para ODBC.
  • O conjunto de registos ADO deve estar situado no cliente.
O exemplo seguinte demonstra como abrir uma ligação ADO a uma base de dados ODBC e como associar um formulário à mesma.

NOTA: Estes passos partem do princípio que a base de dados ODBC contém uma tabela CLIENTES de estrutura idêntica à tabela Clientes da base de dados de exemplo Adamastor.mdb. Também partem do princípio que foi criado um DSN ODBC chamado MyDSN que utiliza o controlador ODBC que deve ser ligado à base de dados subjacente.
  1. Abra a base de dados de exemplo Adamastor.mdb.
  2. Abra o formulário Clientes na vista Estrutura.
  3. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  4. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
       Dim strConnection As String
    
       strConnection = "ODBC;DSN=MyDSN;UID=sa;PWD=;DATABASE=Northwind"
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
    
       With cn
          .Provider = "MSDASQL"
          .Properties("Data Source").Value = strConnection
          .Open
       End With
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
          .Open 
       End With
       
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. Adicione o código abaixo ao evento Unload do formulário:
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. Guarde o formulário e feche-o.
  7. Abra o formulário Clientes na vista de Formulário.
  8. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados ODBC.

Requisitos para Oracle

Quando associa um formulário a um conjunto de registos ADO que utiliza dados de uma base de dados Oracle, existem dois requisitos principais:
  • A ligação ADO que é utilizada pelo conjunto de registos deve utilizar um fornecedor de OLEDB Microsoft para Oracle.
  • O conjunto de registos ADO tem que estar situado no cliente.
O exemplo seguinte demonstra como abrir uma ligação ADO a uma base de dados Oracle e como associar um formulário à mesma.

NOTA: Estes passos partem do princípio que a base de dados Oracle contém uma tabela CLIENTES de estrutura idêntica à tabela Clientes da base de dados de exemplo Adamastor.mdb.
  1. Abra a base de dados de exemplo Adamastor.mdb.
  2. Abra o formulário Clientes na vista Estrutura.
  3. Desmarque a propriedade OrigemDosRegistos do formulário para desassociar o formulário.
  4. Defina a propriedade OnOpen do formulário como o seguinte procedimento de evento:
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Create a new ADO Connection object
       Set cn = New ADODB.Connection
    
       With cn
          .Provider = "MSDAORA"
          .Properties("Data Source").Value = "MyOracleServer"
          .Properties("User ID").Value = "username"
          .Properties("Password").Value = "password"          
          .Open
       End With
    
       'Create an instance of the ADO Recordset class, and
       'set its properties
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
    
          .Open 
       End With
      
       'Set the form's Recordset property to the ADO recordset
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
    					
  5. Adicione o código abaixo ao evento Unload do formulário:
    Private Sub Form_Unload(Cancel As Integer)
       'Close the ADO connection we opened
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
    					
  6. Guarde o formulário e feche-o.
  7. Abra o formulário Clientes na vista de Formulário.
  8. Adicione, edite ou elimine um registo no formulário.
Repare que o formulário está associado a um conjunto de registos actualizáveis baseado em dados Oracle.

Referências

Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na base de dados de conhecimento da Microsoft (KB, Microsoft Knowledge Base):
281784 Difference Between Connection and AccessConnection Properties
Os produtos de outros fabricantes referidos neste artigo são fabricados por empresas independentes da Microsoft. A Microsoft não concede nenhuma garantia, implícita ou de outra natureza, relativamente ao desempenho ou à fiabilidade destes produtos.

Propriedades

Artigo: 281998 - Última revisão: quinta-feira, 26 de Janeiro de 2006 - Revisão: 4.2
A informação contida neste artigo aplica-se a:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Palavras-chave: 
kbado kbdatabinding kbdatabase kbdesign kbprogramming kbhowto KB281998

Submeter comentários