Estás trabajando sin conexión, espera a que vuelva la conexión a Internet

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

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).

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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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.yel 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.yel 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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 = NothingEnd 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.
inf
Propiedades

Id. de artículo: 281998 - Última revisión: 11/10/2003 13:39:00 - Revisión: 1.0

  • Microsoft Access 2002 Standard Edition
  • kbhowto kbdta KB281998
Comentarios