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

O suporte para o Office 2003 terminou

A Microsoft terminou o suporte para o Office 2003 em 8 de Abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Aprenda o que isto significa para si e como pode ficar protegido.

Este artigo foi publicado anteriormente em PT281998
Este artigo foi arquivado. Este artigo é oferecido "tal como está" e deixará de ser actualizado.
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).

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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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.
OfficeKBHowTo inf ACC2002 reviewdocid
Propriedades

ID do Artigo: 281998 - Última Revisão: 12/05/2015 23:13:55 - Revisão: 4.2

  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • kbnosurvey kbarchive kbado kbdatabinding kbdatabase kbdesign kbprogramming kbhowto KB281998
Esta informação foi útil?