Añadir columnas en tabla de una base dividida, con contraseña

Gracias en gran medida a vuestra ayuda conseguí crear una pequeña aplicación y repartirla entre los usuarios dividida. Una base de datos que contiene las tablas: TABLAS_be. Accdb (esta tiene contraseña) y otra que contiene los formularios y consultas: APLI. Accdb que es con la que trabajan los usuarios. Estos archivos los tienen instalados en sus ordenadores en una carpeta llamada APLICACION instalada en C:\ . Lo hice así para luego poder enviarles actualizaciones con la parte APLI y así no perdieran sus datos.
El problema que ha surgido ahora es que debería añadir tres columnas a una de las tablas (HISTORICO) del archivo TABLAS_be. Accdb, cada usuario ya tiene metidos sus datos por lo que había pensado hacerlo con un formulario de actualización, a la vez que otras actualizaciones que tengo que hacer, pero no soy capaz de encontrar como hacerlo, con ADD COLUMN me da error ya que "ataca" a las tablas vinculadas no al origen. Cómo puedo decirle que lo que quiero es cambiar la tabla en la base de origen C:\APLICACION\ TABLAS_be. Accdb, que está además guardada con contraseña.

2 respuestas

Respuesta
1

Tienes que ejecutar una consulta de definición de datos, indicándole la contraseña y la ruta completa a la bd de destino.

Por ejemplo, si tu contraseña es pass1234 y quieres añadir los campos Nuevo01 (texto tamaño 50), Nuevo02 (Número Entero) y Nuevo03 (Fecha) a la tabla TDatos, pondrías en un botón de tu formulario "actualizador" lo siguiente:

Private Sub cmdActualizar_Click()
CurrentDb.Execute "ALTER TABLE [MS Access;PWD=pass1234;DATABASE=C:\APLICACION\TABLAS_be.accdb].TDatos ADD Nuevo01 Text(50), Nuevo02 Integer, Nuevo03 Date"
End Sub

También lo podrías hacer directamente en una consulta, con la SQL:

ALTER TABLE [MS Access;PWD=pass1234;DATABASE=C:\APLICACION\TABLAS_be.accdb].TDatos ADD Nuevo01 Text(50), Nuevo02 Integer, Nuevo03 Date

y ejecutar esa consulta, directamente o a través de un botón en un formulario.

Un saludo.


¡Gracias! Funciona a la perfección!!!!!! la de días que llevaba buscando cómo hacerlo!!!!

Tengo otra duda pero abriré otra pregunta, no quiero abusar.

Muchas gracias, otra vez!!!!!!!

Disculpa pero al intentar crear una columna con tipo de datos decimal me da error de sintaxis en la definición del campo, con las otras ha funcionado perfectamente. ¿para el tipo de campo decimal no se usa Decimal (0,0)?

Private Sub cmdActualizar_Click()
CurrentDb.Execute "ALTER TABLE [MS Access;PWD=ROCIN2018;DATABASE=C:\AORANI\Aplicación\AORANI_TABLAS _be.accdb].HISTORICO ADD COLUMN [N HORAS] Decimal(3,2)"
End Sub

Muchas gracias.

La sintaxis que usas es la correcta, pero parece ser que Access se "lía" un poco con los campos decimales.

Una solución es cambiar CurrentDb. Execute por CurrentProject. Connection. Execute, con lo que tu código quedaría:

Private Sub cmdActualizar_Click()
CurrentProject.Connection.Execute "ALTER TABLE [MS Access;PWD=ROCIN2018;DATABASE=C:\AORANI\Aplicación\AORANI_TABLAS _be.accdb].HISTORICO ADD COLUMN [N HORAS] Decimal(3,2)"
End Sub

Otra solución que vi es activar la compatibilidad de SQL Server (Archivo-> Opciones-> Diseñadores de objetos y marcas la casilla de verificación para "Esta base de datos" en la sección de sintaxis de compatibilidad de SQL Server (ANSI 92)), aunque no tengo claro si la tienes que marcar en la BD donde está la tabla o en las dos (solo en la BD que actualiza, a mi no me funcionó...)

¡Gracias! He probado lo que me decías y no me permite marcar la casilla de "Esta base de datos" en la BD que actualiza, sólo en la que está la tabla como decías. De momento haré un "parche" para no perder los datos, voy a crear la columna como texto y convertir el dato que tengo que introducir a cadena de texto. Muchas gracias por todo!!!!!!!!

¿Hiciste lo del currentproject. Connection? Porque yo hice la prueba, y me funciona sin problemas...

¡Gracias! Disculpa, había leído mal la respuesta y había entendido que para que funcionara lo del currentproject. Connection tenía que activar la casilla antes, error de lectura (e impaciencia) estaba muy claro en la respuesta. Lo he probado y FUNCIONA. ¡¡¡Muchísimas gracias!!!!

Respuesta
1

Tengo varias aplicaciones que funcionan com tu dices.

La idea es que al abrir la BDD front-end (la que tiene los formularios, consultas, informes, etc.), ésta me abre automáticamente un formulario "principal" y en él, en el evento "Al abrir" coloco el código que me actualiza culquier cosa que necesite la nueva versión.

Para crear campos nuevos en la BDD donde están los datos, utilizo dos métodos:

El primero es tener en la BDD una tabla de parámetros en la que tengo la ruta de la BDD de datos

El segundo es obtener esta ruta desde la propiedad Connect de cualquier tabla vinculada.

Una vez tengo la ruta, abro con VBA la BDD de datos y modifico cualquier tabla de ella.

Para añadir campos, tanto uso el médoto append de la TableDeff como lo hago con una SQL ALTER TABLE (ver https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/alter-table-statement-microsoft-access-sql )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas