ACC2002: Cómo asociar formularios de Microsoft Access a conjuntos de registros ADO

Seleccione idioma Seleccione idioma
Id. de artículo: 281998 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E281998
Avanzado: requiere conocimientos avanzados de codificación, interoperabilidad y multiusuario.

Este artículo se refiere a una base de datos de Microsoft Access (.mdb) y a un proyecto de Microsoft Access (.adp).

Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe lo necesario para crear un formulario actualizable asociado a un objeto Recordset de ActiveX Data Objects (ADO)

Más información

Para asociar un formulario de Microsoft Access a un objeto Recordset, establezca la propiedad Recordset del formulario en un objeto de Data Access Object (DAO) o Recordset de ADO válido.

La propiedad Recordset se incluyó en Microsoft Access 2000 y le permite asociar formularios a objetos Recordset de DAO o ADO. Sin embargo, los formularios de Access 2000 sólo pueden actualizarse si la conexión ADO se estableció con los proveedores MSDataShape y OLEDB de SQL Server. Para obtener información adicional acerca de esta limitación en Access 2000, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
227053 ACC2000: Forms Based on ADO Recordsets Are Read-Only
En Microsoft Access 2002, puede crear un formulario actualizable asociado a un objeto Recordset de ADO que utilice otros proveedores OLEDB. Un formulario debe cumplir varios requisitos generales para que sea actualizable cuando está asociado a un objeto Recordset de ADO. Estos requisitos generales son los siguientes:
  1. El objeto Recordset subyacente de ADO debe ser actualizable.
  2. El objeto Recordset debe contener uno o más campos indizados de manera única, como la clave principal de una tabla.
Los otros requisitos para la actualización varían en función del proveedor. En este artículo se describen los otros requisitos necesarios para los proveedores Microsoft SQL Server, Jet, ODBC y OLEDB de Oracle.

Requisitos para Microsoft SQL Server

Existen dos requisitos principales para admitir la actualización a la hora de asociar un formulario a un objeto Recordset de ADO que utiliza datos de Microsoft SQL Server:
  • La conexión del objeto Recordset de ADO debe utilizar el proveedor OLEDB de Microsoft Access 10.0 como su proveedor de servicios.
  • La conexión del objeto Recordset de ADO debe utilizar el proveedor OLEDB de Microsoft SQL Server como su proveedor de datos.
NOTA: el proveedor OLEDB de Microsoft Access 10.0 es un proveedor de servicios OLEDB escrito específicamente para utilizarse en Microsoft Access. No está diseñado para que se utilice en otras aplicaciones diferentes a Microsoft Access y no es compatible con otras aplicaciones.

Cuando crea objetos Recordset de ADO en Microsoft Access, puede seleccionar la conexión ADO que utilizará este objeto. El código de ADO puede compartir la conexión ADO utilizada por Microsoft Access para la base de datos de SQL Server abierta actualmente en un archivo de proyecto de Access (ADP); o bien, puede crear mediante programación una nueva conexión ADO a otra base de datos de SQL Server.

Compartir la conexión ADO utilizada por Microsoft Access

Si utiliza un archivo de proyecto de Access (.adp) conectado a una base de datos de Microsoft SQL Server, puede conseguir que el código de ADO comparta la conexión ADO utilizada por Microsoft Access. Esta conexión se muestra en la propiedad CurrentProject.AccessConnection.

El siguiente ejemplo muestra cómo asociar un formulario a un objeto Recordset de ADO basado en datos de SQL Server que comparte una conexión a ADO con Microsoft Access.
  1. Abra el proyecto de ejemplo NorthwindCS.adp.
  2. Abra el formulario Customers en la vista Diseño.
  3. Desactive la propiedad RecordSource del formulario para separarlo.
  4. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento de evento:
     
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Usar la conexión ADO utilizada por Access
       Set cn = CurrentProject.AccessConnection
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Customers"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
    
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  5. Guarde y cierre el formulario.
  6. Abra el formulario Clientes en la vista Formulario.
  7. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable basado en datos de SQL Server.

Establecer una conexión ADO independiente

En algún momento es posible que tenga que abrir y administrar su propia conexión ADO con SQL Server. Por ejemplo, tendría que utilizar este enfoque si estuviera escribiendo el código en una base de datos de Access (.mdb) o en un archivo de proyecto de Access (.adp) conectados a una base de datos de SQL Server distinta a su aplicación. Cuando utiliza este enfoque, Microsoft recomienda cerrar la conexión ADO abierta cuando ésta ya no sea necesaria. Por ejemplo, es posible que desee cerrar la conexión ADO en el evento UnLoad del formulario.

El siguiente ejemplo muestra cómo abrir su propia conexión ADO a una base de datos de Microsoft SQL Server y asociar un formulario a la misma.
  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Abra el formulario Clientes en la vista Diseño.
  3. Desactive la propiedad RecordSource del formulario para separarlo.
  4. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento de evento:
     
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Crear un nuevo objeto Conexión ADO
       Set cn = New ADODB.Connection
    
       'Utilizar los proveedores OLEDB de Access 10 y SQL Server para
       'abrir la conexión
       'Deberá reemplazar MySQLServer con el nombre
       'de un SQL Server válido
       With cn
          .Provider = "Microsoft.Access.OLEDB.10.0"
          .Properties("Data Provider").Value = "SQLOLEDB"
          .Properties("Data Source").Value = "MiSQLServer"
          .Properties("User ID").Value = "sa"
          .Properties("Password").Value = ""
          .Properties("Initial Catalog").Value = "NorthwindCS"
          .Open 
       End With
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Clientes"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  5. Agregue el siguiente código al evento UnLoad del formulario:
     
    Private Sub Form_Unload(Cancel As Integer)
       'Cerrar la conexión ADO abierta
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
  6. Guarde el formulario y ciérrelo.
  7. Abra el formulario Clientes en la vista Formulario.
  8. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable basado en datos de SQL Server.

Requisitos para Microsoft Jet

Aunque es posible asociar un formulario a un objeto Recordset de ADO que utiliza datos de una base de datos Jet, Microsoft recomienda utilizar DAO en su lugar. DAO es óptimo para Jet y su rendimiento es generalmente más rápido que ADO cuando se utiliza con una base de datos Jet.

Cuando asocie un formulario a un objeto Recordset de ADO con datos Microsoft Jet, existen dos alternativas:
  • La propiedad ActiveConnection del objeto Recordset debe utilizar el proveedor de servicios OLEDB de Microsoft Access 10.0, así como el Proveedor de datos OLEDB de Microsoft Jet 4.0. y el objeto Recordset debe ser un cursor de servidor.

    - O bien -
  • La propiedad ActiveConnection del objeto Recordset debe utilizar únicamente el Proveedor de datos OLEDB de Microsoft Jet 4.0. y el objeto Recordset debe ser un cursor de cliente.
Al igual que ocurría en la sección "Microsoft SQL Server" anteriormente en este artículo, puede seleccionar la conexión ADO que el objeto Recordset utilizará con una base de datos Jet. El código ADO puede compartir la conexión ADO que Microsoft Access utiliza para el archivo de base de datos Jet (.mdb) actualmente abierto, o bien puede crear mediante programación una nueva conexión ADO a un archivo independiente de base de datos Jet.

Compartir la conexión ADO utilizada por Microsoft Access

Si está escribiendo el código en la misma base de datos de Microsoft Access (.mdb) que contiene los datos necesarios para su objeto Recordset, puede conseguir que el código de ADO comparta la conexión ADO utilizada por Microsoft Access. Esta conexión se muestra en la propiedad CurrentProject.AccessConnection. El siguiente ejemplo muestra cómo asociar un formulario a un objeto Recordset de ADO en una base de datos Jet mediante el uso compartido de la conexión ADO utilizada actualmente por Microsoft Access:
  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Abra el formulario Clientes en la vista Diseño.
  3. Desactive la propiedad RecordSource del formulario para separarlo.
  4. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento de evento:
     
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
                    
       Set cn = CurrentProject.AccessConnection
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Clientes"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseServer
          .Open 
       End With
       
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  5. Guarde el formulario y ciérrelo.
  6. Abra el formulario Clientes en la vista Formulario.
  7. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable que utiliza datos Jet.

Establecer una conexión ADO independiente

En algún momento es posible que tenga que abrir y administrar su propia conexión ADO a una base de datos Jet. Por ejemplo, tendrá que utilizar este enfoque si está escribiendo el código en una base de datos independiente de la base que contiene los datos a los que necesita tener acceso. Cuando utiliza este enfoque, Microsoft recomienda cerrar la conexión ADO abierta cuando ésta ya no sea necesaria. Por ejemplo, es posible que desee cerrar la conexión ADO en el evento UnLoad del formulario.

El siguiente ejemplo muestra cómo abrir su propia conexión ADO a una base de datos Microsoft Jet y asociar un formulario a la misma:
  1. Cree una nueva base de datos en blanco.
  2. Importe el formulario Clientes desde la base de datos de ejemplo Neptuno.mdb.
  3. Abra el formulario Clientes en la vista Diseño.
  4. Desactive la propiedad RecordSource del formulario para separarlo.
  5. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento de evento:
     
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Crear un nuevo objeto Conexión ADO
       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:\Archivos de programa\Microsoft Office\Office10" & _
              "\samples\Neptuno.mdb"
          .Open 
       End With
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Clientes"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .Open 
       End With
       
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  6. Agregue el siguiente código al evento UnLoad del formulario:
     
    Private Sub Form_Unload(Cancel As Integer)
       'Cerrar la conexión ADO abierta
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
  7. Guarde el formulario y ciérrelo.
  8. Abra el formulario Clientes en la vista Formulario.
  9. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable que utiliza datos Jet.

Requisitos para ODBC

Cuando asocia un formulario a un objeto Recordset de ADO que utiliza datos de una base de datos ODBC, existen dos requisitos principales:
  • La conexión ADO utilizada por el objeto Recordset debe utilizar el proveedor Microsoft OLEDB para ODBC.
  • El objeto Recordset de ADO debe ser un cursor de cliente.
El siguiente ejemplo muestra cómo abrir una conexión ADO a una base de datos ODBC y asociar un formulario a la misma.

NOTA: en este procedimiento se supone que la base de datos ODBC contiene una tabla denominada CLIENTES cuya estructura es idéntica a la tabla clientes de la base de datos de ejemplo Neptuno.mdb. Además, se supone que ha creado un DSN de ODBC denominado MiDSN que utiliza el controlador ODBC necesario para conectarse a la base de datos de servidor.
  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Abra el formulario Clientes en la vista Diseño.
  3. Desactive la propiedad RecordSource del formulario para separarlo.
  4. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento 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=MiDSN;UID=sa;PWD=;DATABASE=Neptuno"
       'Crear un nuevo objeto Conexión ADO
       Set cn = New ADODB.Connection
    
       With cn
          .Provider = "MSDASQL"
          .Properties("Data Source").Value = strConnection
          .Open 
       End With
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Clientes"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
          .Open 
       End With
       
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  5. Agregue el siguiente código al evento UnLoad del formulario:
     
    Private Sub Form_Unload(Cancel As Integer)
       'Cerrar la conexión ADO abierta
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
  6. Guarde el formulario y ciérrelo.
  7. Abra el formulario Clientes en la vista Formulario.
  8. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable basado en datos ODBC.

Requisitos para Oracle

Cuando asocia un formulario a un objeto Recordset de ADO que utiliza datos de una base de datos de Oracle, existen dos requisitos principales:

  • La conexión ADO utilizada por el objeto Recordset debe utilizar el proveedor Microsoft OLEDB para Oracle.
  • El objeto Recordset de ADO debe ser un cursor de cliente.
El siguiente ejemplo muestra cómo abrir una conexión ADO a una base de datos de Oracle y asociar un formulario a la misma.

NOTA: en este procedimiento se supone que la base de datos de Oracle contiene una tabla denominada CLIENTES cuya estructura es idéntica a la tabla Clientes de la base de datos de ejemplo Neptuno.mdb.
  1. Abra la base de datos de ejemplo Neptuno.mdb.
  2. Abra el formulario Clientes en la vista Diseño.
  3. Desactive la propiedad RecordSource del formulario para separarlo.
  4. Establezca la propiedad OnOpen del formulario como el siguiente procedimiento de evento:
     
    Private Sub Form_Open(Cancel As Integer)
       Dim cn As ADODB.Connection
       Dim rs As ADODB.Recordset
             
       'Crear un nuevo objeto Conexión ADO
       Set cn = New ADODB.Connection
    
       With cn
          .Provider = "MSDAORA"
          .Properties("Data Source").Value = "MiServidorOracle"
          .Properties("User ID").Value = "nombredeusuario"
          .Properties("Password").Value = "contraseña"          
          .Open
    
       End With
    
       'Crear una instancia de la clase Recordset de ADO y
       'establecer sus propiedades
       Set rs = New ADODB.Recordset
       With rs
          Set .ActiveConnection = cn
          .Source = "SELECT * FROM Clientes"
          .LockType = adLockOptimistic
          .CursorType = adOpenKeyset
          .CursorLocation = adUseClient
    
          .Open 
       End With
      
       'Establecer la propiedad Recordset del formulario como el objeto Recordset de ADO
       Set Me.Recordset = rs
       Set rs = Nothing
       Set cn = Nothing
    End Sub
  5. Agregue el siguiente código al evento UnLoad del formulario:
     
    Private Sub Form_Unload(Cancel As Integer)
       'Cerrar la conexión ADO abierta
       Dim cn As ADODB.Connection
       Set cn = Me.Recordset.ActiveConnection
       cn.Close
       Set cn = Nothing
    End Sub
  6. Guarde el formulario y ciérrelo.
  7. Abra el formulario Clientes en la vista Formulario.
  8. Agregue, modifique o elimine un registro en el formulario.
Observe que el formulario está asociado a un objeto Recordset actualizable basado en datos de Oracle.

Referencias

Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
281784 ACC2002: Difference Between Connection and AccessConnection Properties
Los productos de terceros descritos en este artículo están fabricados por proveedores independientes de Microsoft. No se ofrece ninguna garantía, implícita ni de cualquier otro tipo, sobre el rendimiento o la confiabilidad de estos productos.

Propiedades

Id. de artículo: 281998 - Última revisión: lunes, 10 de noviembre de 2003 - Versión: 1.0
La información de este artículo se refiere a:
  • Microsoft Access 2002 Standard Edition
Palabras clave: 
kbhowto kbdta KB281998

Enviar comentarios

 

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