Compartir a través de


Vinculación de aplicaciones de Access a SQL Server y Azure SQL (AccessToSQL)

Si desea usar las aplicaciones de Access existentes con SQL Server, puede vincular las tablas de Access originales a las tablas de SQL Server o Azure SQL migradas. La vinculación modifica la base de datos de Access para que las consultas, formularios, informes y páginas de acceso a datos usen los datos de SQL Server o Azure SQL Database en lugar de los datos de la base de datos de Access.

Nota:

Las tablas de Access permanecen en Access, pero no se actualizan junto con las actualizaciones de SQL Server o Azure SQL. Después de vincular las tablas y comprobar la funcionalidad, es posible que desee eliminar las tablas de Access.

Al vincular una tabla de Access a una tabla de SQL Server o Azure SQL, el motor de base de datos Jet almacena información de conexión y metadatos de tabla, pero los datos se almacenan en SQL Server o Azure SQL. Esta vinculación permite que las aplicaciones de Access funcionen con las tablas de Access aunque las tablas y datos reales estén en SQL Server o Azure SQL.

Nota:

Si usa la autenticación de SQL Server, la contraseña se almacena en texto no cifrado en las tablas de Access vinculadas. Use la autenticación de Windows en su lugar.

  1. En el Explorador de metadatos de Access, seleccione las tablas que desea vincular.

  2. Haga clic con el botón derecho en Tablas y, a continuación, seleccione Vincular.

SQL Server Migration Assistant (SSMA) para Access realiza una copia de seguridad de la tabla de Access original y crea una tabla vinculada.

Después de vincular las tablas, las tablas de SSMA aparecen con un icono de vínculo pequeño. En Access, las tablas aparecen con un icono "vinculado", que es un globo con una flecha que apunta a él.

Al abrir una tabla en Access, los datos se recuperan mediante un cursor de conjunto de claves. Como resultado, para tablas grandes, los datos no se recuperan a la vez. Sin embargo, a medida que examina la tabla, Access recupera más datos según sea necesario.

Importante

Para vincular tablas de Access con una base de datos de Azure, necesita SQL Server Native Client (SNAC) versión 10.5 o posterior. Obtenga la versión más reciente de SNAC de Microsoft SQL Server 2008 R2 Feature Pack. SNAC se eliminó en SQL Server 2022 (16.x).

Al desvincular una tabla de Access desde una tabla de SQL Server o Azure SQL, SSMA restaura la tabla de Access original y sus datos.

  1. En el Explorador de metadatos de Access, seleccione las tablas que desea desvincular.

  2. Haga clic con el botón derecho en Tablas y seleccione Desvincular.

Si vincula las tablas de Access a una instancia de SQL Server y más adelante quiere cambiar los vínculos a otra instancia, debe volver a vincular las tablas.

  1. En el Explorador de metadatos de Access, seleccione las tablas que desea desvincular.

  2. Haga clic con el botón derecho en Tablas y seleccione Desvincular.

  3. Seleccione el botón Volver a conectar a SQL Server .

  4. Conéctese a la instancia de SQL Server o Azure SQL a la que desea vincular las tablas de Access.

  5. En el Explorador de metadatos de Access, seleccione las tablas que desea vincular.

  6. Haga clic con el botón derecho en Tablas y, a continuación, seleccione Vincular.

Actualización de tablas vinculadas

Si modifica las definiciones de tabla de SQL Server o Azure SQL, puede desvincular y volver a vincular las tablas de SSMA mediante los procedimientos que se muestran anteriormente en este artículo. También puede actualizar las tablas mediante Access.

  1. Abra la base de datos de Access.

  2. En la lista Objetos , seleccione Tablas.

  3. Haga clic con el botón derecho en una tabla vinculada y seleccione Administrador de tablas vinculadas.

  4. Active la casilla situada junto a cada tabla vinculada que quiera actualizar y, a continuación, seleccione Aceptar.

Posibles problemas posteriores a la migración

En las secciones siguientes se enumeran los problemas que pueden producirse en las aplicaciones de Access existentes después de migrar bases de datos de Access a SQL Server o Azure SQL y, a continuación, vincular las tablas. En las secciones también se describen las causas y resoluciones de estos problemas.

Rendimiento lento con tablas vinculadas

Causa: algunas consultas pueden ser lentas después del ajuste de tamaño por los siguientes motivos:

  • La aplicación depende de las funciones que no existen en SQL Server o Azure SQL. Jet descarga las tablas localmente para ejecutar una consulta SELECT.

  • Jet envía consultas que actualizan o eliminan muchas filas como una consulta con parámetros para cada fila.

Resolución: convierta las consultas de ejecución lenta en consultas de paso a través, procedimientos almacenados o vistas. La conversión a consultas de paso a través tiene los siguientes problemas:

  • No se pueden modificar las consultas de paso a través. Debe modificar el resultado de la consulta o agregar registros nuevos de forma alternativa. Por ejemplo, puede tener botones Explícitos Modificar o Agregar en el formulario enlazados a la consulta.

  • Las consultas de paso a través no admiten la entrada del usuario, pero algunas consultas requieren entrada de usuario. Puede usar Visual Basic para Aplicaciones (VBA) para solicitar parámetros o obtener la entrada del usuario mediante un formulario. En ambos casos, el código VBA envía la consulta con la entrada del usuario al servidor.

Las columnas de autoincremento no se actualizan hasta que se actualiza el registro.

Causa: Después de llamar a RecordSet.AddNew en Jet, la columna de autoincremento está disponible antes de que se actualice el registro. Esta condición no es verdadera en SQL Server o Azure SQL. El nuevo valor de la columna de identidad solo está disponible después de guardar el nuevo registro.

Solución: ejecute el siguiente código de Visual Basic para Aplicaciones (VBA) antes de acceder al campo de identidad:

Recordset.Update
Recordset.Move 0,
Recordset.LastModified

Los nuevos registros no están disponibles

Causa: Al agregar un registro a una tabla de SQL Server o Azure SQL mediante VBA, si el campo de índice único de la tabla tiene un valor predeterminado y no asigna un valor a ese campo, el nuevo registro no aparece hasta que vuelva a abrir la tabla en SQL Server o Azure SQL. Si intenta obtener un valor del nuevo registro, recibirá el siguiente mensaje de error:

Run-time error '3167' Record is deleted.

Solución: al abrir la tabla de SQL Server o Azure SQL mediante código VBA, incluya la dbSeeChanges opción , como en el ejemplo siguiente:

Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)

Después de la migración, algunas consultas no permiten al usuario agregar un nuevo registro.

Causa: Si una consulta no incluye todas las columnas que se incluyen en un índice único, no puede agregar nuevos valores mediante la consulta.

Resolución: asegúrese de que todas las columnas incluidas en al menos un índice único forman parte de la consulta.

No se puede modificar un esquema de tabla vinculada mediante Access

Causa: Después de migrar datos y vincular tablas, no se puede modificar el esquema de una tabla en Access.

Solución: modifique el esquema de tabla mediante SQL Server Management Studio y, a continuación, actualice el vínculo en Access.

Causa: Después de migrar los datos, los hipervínculos de las columnas pierden su funcionalidad y se convierten en columnas nvarchar(max) simples.

Resolución: Ninguna.

Access no admite algunos tipos de datos de SQL Server

Causa: Si actualiza las tablas de SQL Server o Azure SQL para incluir tipos de datos que Access no admite, no puede abrir la tabla en Access.

Resolución: defina una consulta de Access que devuelva solo filas con tipos de datos admitidos.