Esta es la segunda parte de una serie de dos partes sobre las vistas que he escrito, puedes ver la primera aquí.

En los últimos años, he tenido una gran experiencia trabajando en bases de datos de Access con los datos vinculados a tablas almacenadas en SQL Server. Con las bases de datos relacionales y las tablas de búsqueda, puede terminar fácilmente con una vista que contiene múltiples columnas numéricas que solo contienen la clave principal de otras tablas.

Digamos, por ejemplo, que tiene una base de datos con dos tablas: una para información de la compañía y otra solo para contactos, pero necesita vincular sus contactos con compañías y tiene situaciones en las que un contacto está vinculado con varias compañías. Puede administrar esto fácilmente creando una tercera tabla de Contactos de la empresa que serían filas de datos que contienen ID de empresa e ID de contacto. Hay muchas situaciones en las que tendría una tabla similar que vincula los datos de una tabla a otra, pero estas tablas deben ser mantenidas y administradas por usuarios que realmente necesitan ver los datos subyacentes y no solo los ID. Para resolver el problema, puede crear una vista con todas las tablas necesarias y basar su formulario en la vista vinculada, pero rápidamente notará que no puede editar ningún dato, todo esto, es de solo lectura.

Consejos para hacer que su vista sea editable

Para editar su vista en Access, deberá asegurarse de que tenga una clave principal de la tabla que desea editar, junto con el campo de marca de tiempo y un índice. Los dos primeros se pueden lograr fácilmente agregando los campos en el diseño de su vista en SQL Server, para el último use el CREAR ÍNDICE ÚNICO como se muestra a continuación, junto con el código para agregar su vista como una tabla vinculada:

Dim tdf As DAO.TableDef
Dim db As DAO.Database

Set db = CurrentDb
Set tdf = db.CreateTableDef
tdf.Name = “ViewNameInAccess”
tdf.SourceTableName = “dbo.ViewName”
tdf.Connect = “ODBC;<SQL Server connection string>”
db.TableDefs.Append tdf

db.Execute “CREATE UNIQUE INDEX [PRIMARY] ON [ViewNameInAccess](MainTableID);”, dbFailOnError