Como Vincular Formulários do Microsoft Access em Recordsets 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. Saiba o que isto significa para você e como permanecer protegido.

Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Avançado: Requer conhecimentos avançados de codificação, interoperabilidade e multiusuário.

Este artigo se aplica a um banco de dados do Microsoft Access (.mdb) e a um projeto do Microsoft Access (.adp).

Sumário
Este artigo descreve o que é necessário para criar um formulário atualizável vinculado a Recordset ADO (ActiveX Data Objects).
Mais Informações
Para vincular um formulário do Microsoft Access a um recordset, é necessário definir a propriedade Recordset do formulário para um DAO (Data Access Objects) válido ou Recordset ADO.

A propriedade do Recordset foi apresentada no Microsoft Access 2000 e permite que formulários sejam vinculados tanto aos objetos Recordset DAO como aos ADO. Contudo, os formulários no Access 2000 suportam a atualizabilidade sometne se a conexão ADO for aberta utilziando os provedores MSDataShape e SQL Server OLEDB. Para obter mais informações sobre esta limitação no Access 2000, clique no número abaixo para visualizar o artigo na Base de Dados de Conhecimento da Microsoft:
227053 ACC2000: Os fomulários com base em conjuntos de registros ADO são somente leitura
No Microsoft Access 2002 ou superior, você pode criar um formulário atualizável vinculado a um recordset ADO que usa provedores OLEDB. Um formulário deve atender a vários requisitos gerais para que seja atualizável quando estiver vinculado a um recorset ADO. Estes requisitos gerais são:
  1. O recordset ADO subjacente deve ser atualizável.
  2. O recordset deve conter um ou mais campos que são indexados unicamente, tais como uma chave primária de tabela.
Os outros requisitos para atualizabilidade variam entre os diferentes provedores. Este artigo descreve quais são os outros requisitos ao usar os provedores Microsoft SQL Server, Jet, ODBC e Oracle OLEDB.

Requisitos para o Servidor Microsoft SQL

Existem dois requisitos principais para suporte da atualizabilidade ao vincular um formulário a um recordset ADO utilizando um Servidor de dados Microsoft SQL:
  • A conexão do recordset ADO deve usar o provedor Microsoft Access 10.0 OLEDB como provedor de serviços.
  • A conexão do recordset ADO deve usar o provedor Microsoft SQL Server como provedor de dados.
NOTA: O provedor Microsoft Access 10.0 OLEDB é um provedor de serviços OLEDB que foi criado especificamente para ser usado com o Microsoft Access. Não foi criado para ser usado em outro aplicativo senão o Microsoft Access e não é suportado em outros aplicativos.

Ao criar recordsets ADO no Microsoft Access, você pode escolher qual conexão ADO será usada pelo recordset. Seu código ADO pode compartilhar a conexão ADO utilizada pelo Microsoft Access para o banco de dados do Servidor SQL aberto atualmente no projeto do Access , arquivo (ADP) ou você pode criar programaticamente uma nova conexão ADO para um banco de dados de Servidor SQL diferente.

Compartilhamento da Conexão ADO Usada pelo Microsoft Access

Se estiver usando um arquivo de projeto do Access (.adp) conectado a um banco de dedos de Servidor Microsoft SQL, é possível que o código ADO compartilhe a conexão ADO utilizada pelo Microsoft Access. Esta conexão é exposta pela propriedade CurrentProject.AccessConnection.

O exemplo seguinte dem onstra como vincular um formulário a um recordset ADO com base nos dados do Servidor SQL que compartilha uma conexão ADO com o Microsoft Access.
  1. Abra o projeto de exemplo NorthwindCS.adp.
  2. Abra o formulário Clientes no modo Estrutura.
  3. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  4. Defina a propriedade OnOpen do formulário para 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. Salve e feche o formulário.
  6. Abra o formulário de Clientes na visualização Formulário.
  7. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável com base nos dados do Servidor SQL.

Abertura de uma conexão ADO separada

EM algum ponto, você terá que abrur e gerenciar sua própria conexão ADO ao servidor SQL. Por exemplo, você terá que usar esta abordagem se estiver gravando seu código em um banco de dados do Access (.mdb) ou um arquivo de projeto do Access (.adp) conectado a um banco de dados do Servidor SQL diferente do seu aplicativo. Observe que ao usar esta abordagem, a Microsoft recomenda que você feche a conexão ADO aberta quando esta não for mais necessária. Por exemplo, você pode querer fechar a conexão ADO no evento UnLoad do formulário.

O exemplo a seguir demonstra como abrir sua própria conexão ADO em um banco de dados do Servidor Microsoft SQL e vincular a ela um formulário:
  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário Clientes no modo Estrutura.
  3. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  4. Defina a propriedade OnOpen do formulário para 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 seguinte código 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. Salve e feche o formulário.
  7. Abra o formulário de Clientes na visualização Formulário.
  8. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável com base nos dados do Servidor SQL.

Requisitos para o Microsoft Jet

Mesmo sendo possível vincular um formulário a um recordset ADO usando dados de um banco de dados Jet, a Microsoft recomenda que você utilize o DAO. O DAO é altamente otimizado para Jet e sua execução é tipicamente mais rápida que o ADO quando utilizado com um banco de dados Jet.

Ao vincular um formulário a um recordset ADO usando os dados do Microsoft Jet, existem duas alternativas:
  • A propriedade do recordset ActiveConnection deve usar o provedor de serviço do Microsoft Access 10.0 OLEDB, bem como o provedor de dados do Microsoft Jet 4.0 OLEDB e o recordset deve ser um cursor ao lado do servidor.

    -ou-
  • A propriedade do recordset ActiveConnection deve usar apenas o provedor de dados Microsoft Jet 4.0 OLEDB e o recordset deve ser um cursor ao lado do servidor.
Similar a sessão "Microsoft SQL Server" previamente neste arquivo, você pode escolher qual conexão ADO será utilizada pelo recordset ao usar um banco de dados Jet. Seu código ADO pode compartilhar a conexão ADO usada pelo Microsoft Access para o arquivo do banco de dados Jet (.mdb) atualmente aberto ou você pode criar programaticamente uma nova conexão ADO a um arquivo separado do banco de dados Jet.

Compartilhamento da Conexão ADO Usada pelo Microsoft Access

Se estiver gravando o código no mesmo banco de dados do Microsoft Access (.mdb) que contém os dados necessários para o seu recordset, é possível que seu código ADO compartilhe a conexão ADO usada pelo Microsoft Access. Esta conexão é exposta pela propriedade CurrentProject.AccessConnection. O exemplo seguinte demonstra como vincular um formulário a um recordset ADO em um banco de dados Jet compartilhando a conexão ADO usada atualmente pelo Microsoft Access:
  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário Clientes no modo Estrutura.
  3. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  4. Defina a propriedade OnOpen do formulário para 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. Salve e feche o formulário.
  6. Abra o formulário de Clientes na visualização Formulário.
  7. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável que usa os dados Jet.

Abertura de uma conexão ADO separada

Em algum ponto, você terá que abrir e gerenciar sua própria conexão ADO ao banco de dados Jet. Por exemplo, você deve usar esta abordagem se estiver gravando seu código em um banco de dados separado do banco de dados que contém os dados que você precisa acessar. Observe que ao usar esta abordagem, a Microsoft recomenda que você feche a conexão ADO aberta quando esta não for mais necessária. Por exemplo, você pode querer fechar a conexão ADO no evento UnLoad do formulário.

O exemplo a seguir demonstra como abrir sua própria conexão ADO em um banco de dados Microsoft Jet e vincular a ela um formulário:
  1. Crie um novo banco de dados em branco.
  2. Importe o formulário de clientes a partir do modelo de banco de dados Northwind.mdb.
  3. Abra o formulário Clientes no modo Estrutura.
  4. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  5. Defina a propriedade OnOpen do formulário para 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 seguinte código 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. Salve e feche o formulário.
  8. Abra o formulário de Clientes na visualização Formulário.
  9. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável que usa os dados Jet.

Requisitos para o ODBC

Ao vincular um formulário a um recordset ADO que usa dados de um banco de dados ODBC, existem dois requisitos principais:
  • A conexão ADO usada pelo recordset deve usar o provedor Microsoft OLEDB para o ODBC.
  • O recordset ADO deve ter o cursor ao lado do servidor.
O exemplo a seguir demonstra como abrir sua própria conexão ADO em um banco de dados ODBC e vincular a ela um formulário:

OBSERVAÇÃO: Estas etapas assumem que o banco de dados ODBC contém uma tabela chamada CLIENTES que é idêntica em estrutura a tabela Clientes no modelo de banco de dados Northwind.mdb. Também assumem que você criou um ODBC DSN chamado MyDSN que usa o driver ODBC necessário para conectar ao banco de dados back-end.
  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário Clientes no modo Estrutura.
  3. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  4. Defina a propriedade OnOpen do formulário para 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 seguinte código 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. Salve e feche o formulário.
  7. Abra o formulário de Clientes na visualização Formulário.
  8. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável com base nos dados ODBC.

Requisitos para o Oracle

Ao vincular um formulário a um recordset ADO que usa dados de um banco de dados Oracle, existem dois requisitos principais:

  • A conexão ADO usada pelo recordset deve usar o provedor Microsoft OLEDB para o Oracle.
  • O recordset ADO deve ter o cursor ao lado do servidor.
O exemplo a seguir demonstra como abrir sua própria conexão ADO em um banco de dados Oracle e vincular a ela um formulário:

OBSERVAÇÃO: Estas etapas assumem que o banco de dados Oracle contém uma tabela chamada CLIENTES que é idêntica em estrutura a tabela Clientes no modelo do banco de dados Northwind.mdb.
  1. Abra o banco de dados de exemplo Northwind.mdb.
  2. Abra o formulário Clientes no modo Estrutura.
  3. Limpe a propriedade RecordSource do formulário para desvincular o formulário.
  4. Defina a propriedade OnOpen do formulário para 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 seguinte código 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. Salve e feche o formulário.
  7. Abra o formulário de Clientes na visualização Formulário.
  8. Insira, edite ou exclua um registro no formulário.
Observe que o formulário está vinculado a um recordset atualizável com base nos dados do Oracle.
Referências
Para obter informações adicionais, clique no número abaixo para consultar o artigo na Base de Dados de Conhecimento da Microsoft:
281784 Difference Between Connection and AccessConnection Properties
Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece garantia, implícita ou não, em relação ao desempenho ou à confiabilidade desses produtos.
OfficeKBHowTo inf ACC2002 reviewdocid
Propriedades

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

Microsoft Office Access 2003, Microsoft Access 2002 Standard Edition

  • kbnosurvey kbarchive kbhowto KB281998
Comentários