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

Si desea usar las aplicaciones de Access existentes con SQL Server, puede vincular las tablas de Access originales a las tablas migradas de SQL Server o SQL Azure. 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 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 SQL Azure. Después de vincular las tablas y comprobar la funcionalidad, es posible que desee eliminar las tablas de Access.

Vinculación de tablas de Access y SQL Server

Al vincular una tabla de Access a una tabla de SQL Server o SQL Azure, 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 SQL Azure. Esta vinculación permite que las aplicaciones de Access funcionen con las tablas de Access aunque las tablas y los datos reales estén en SQL Server o SQL Azure.

Nota:

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

Para vincular tablas

  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 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, no se recuperan todos los datos al mismo tiempo. Sin embargo, a medida que examina la tabla, Access recupera datos adicionales 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.
Puedes obtener la versión más reciente de SNAC de Microsoft SQL Server 2008 R2 Feature Pack.

Desvinculación de tablas de Access

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

Para desvincular 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.

Vinculación de tablas a un servidor diferente

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

Para vincular tablas a un servidor diferente

  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. Haga clic en el botón Reconectar a SQL Server.

  4. Conéctese a la instancia de SQL Server o SQL Azure 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 seleccione Vincular.

Actualización de tablas vinculadas

Si se modifican las definiciones de tablas de SQL Server o SQL Azure, puede desvincular y volver a vincular las tablas de SSMA mediante los procedimientos mostrados anteriormente en este tema. También puede actualizar las tablas mediante Access.

Para actualizar las tablas vinculadas mediante Access

  1. Abra la base de datos de Access.

  2. En la lista Objetos, haga clic en 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, haga clic en 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 SQL Azure y, a continuación, vincular las tablas, junto con las causas y las resoluciones.

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 SQL Azure, lo que hace que Jet extraiga 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. La modificación del resultado de la consulta o la adición de registros nuevos se deben realizar de forma alternativa, como contar con los botones Modificar o Agregar explícitos en el formulario enlazado a la consulta.

  • Algunas consultas requieren la entrada del usuario, pero las consultas de paso a través no admiten la entrada de usuario. El código de Visual Basic para Aplicaciones (VBA) puede proporcionar la entrada de usuario que solicita parámetros o bien esta se puede obtener mediante un formulario que se usa como control de entrada. En ambos casos, el código VBA envía la consulta con la entrada de usuario al servidor.

Las columnas de incremento automático no se actualizan hasta que se actualiza el registro.

Causa: Después de llamar a RecordSet.AddNew en Jet, la columna de incremento automático está disponible antes de actualizar el registro. Esto no es cierto en SQL Server o SQL Azure. 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 SQL Azure 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 SQL Azure. 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 SQL Azure mediante código VBA, incluya la opción dbSeeChanges, como en el ejemplo siguiente:

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

Después de la migración, algunas consultas no permitirán 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 con Access

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

Resolució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 datos, los hipervínculos de las columnas pierden su funcionalidad y se convierten en columnas nvarchar(max) simples.

Resolución: ninguna.

Algunos tipos de datos de SQL Server no se admiten en Access

Causa: si posteriormente actualiza las tablas de SQL Server o SQL Azure para que contengan tipos de datos que no son compatibles con Access, no podrá abrir la tabla en Access.

Resolución: puede definir una consulta de Access que devuelva solo esas filas con los tipos de datos admitidos.

Consulte también

Migrar bases de datos de Access a SQL Server