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

Traduções de Artigos Traduções de Artigos
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: 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

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com