Como Vincular Formulários do Microsoft Access em Recordsets ADO

Traduções deste artigo Traduções deste artigo
ID do artigo: 281998 - Exibir os produtos aos quais esse artigo se aplica.
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).

Expandir tudo | Recolher tudo

Neste artigo

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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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 = Nothing
    End 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.

Propriedades

ID do artigo: 281998 - Última revisão: quarta-feira, 7 de abril de 2004 - Revisão: 4.1
A informação contida neste artigo aplica-se a:
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
Palavras-chave: 
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