Anexar datos de varias tablas relacionadas.

Tengo que unir en una, los registros de varias bases de datos.
Son bd idénticas pero con datos diferentes.
La tabla “alumnos” tiene el campo autonumérico “Id”, por el que está relacionada a la tabla “composición familiar”.
Si hago una consulta de datos anexados para la tabla “alumnos” ésta le asigna a los nuevos registros un “Id” diferente del que tenía en la base de datos de donde proviene.
Esto haría que perdiese la relación entre estos registros y los de la tabla “composición familiar” cuando anexara los datos de esta.
¿Cómo podría unir estos datos (mediante las consultas de datos anexados o de otra manera), solventando este problema?

1 respuesta

Respuesta
1

Lamento comentarte que, según he entendido por lo que explicas, lo que pides no es posible, porque la función del Id es precisamente asegurarse de que no haya datos repetidos.

La pregunta del millón es: ¿Tienes ID repetidos en las dos tablas?

Ya me dirás.

Se trata Neckkito, de que a varias personas se les va a repartir la base de datos vacía, cuando hayan introducido todos los registros me las van a pasar a mí para unificarlos en una sola bd que es idéntica a la anterior (en cuanto a estructura). Por lo tanto sí voy a tener ID repetidos en dichas tablas.

Gracias de nuevo.

Con la sistemática que estás empleando no hay solución a tu consulta: es imposible hacerlo como pides.

Si utilizas Access 2003 puedes echar un vistazo a este link, en el epígrafe "La creación de réplica como Backup": http://neckkito.eu5.org/index.php?option=com_content&view=article&id=105:backup&catid=47:post-access&Itemid=113

Si utilizas un Access posterior la solución pasaría por crear un código personalizado para cada persona a la que des la BD. Lo anterior se podría hacer de la siguiente manera, pero requiere que la entrada de datos se realice desde un formulario:

1.- Creas en la tabla, tras el autonumérico, un campo de tipo texto, llamémosle [IdCod].

2.- Supongamos que el primer campo que debe rellenarse es [Nombre]. Sacas las propiedades de ese campo y te vas a la pestaña Eventos -> Después de actualizar, y le generas el siguiente código:

...

Private Sub Nombre_AfterUpdate()
Const codUser As String = "A"
Dim miCod As String
miCod = codUser & Me.Id.Value
If IsNull(Me.IdCod.Value) Then
Me.IdCod.Value = miCod
Me.Refresh
End If
End Sub

...

Donde, en la declaración de la constante, deberías escribir, por ejemplo, "A" para un usuario (así como está escrito en el código), "B" para otro usuario, "C" para otro, etc.

3.- En las relaciones entre las tablas <alumnos> y <composición familiar> el campo que te relacionaría ambas tablas debería ser [IdCod], y no el [Id].

De esta manera podrías repartir las diferentes BD's y podrías anexar sin problemas porque no tendrías [IdCod] repetidos.

Te he puesto el IF por si acaso debe modificarse, a posteriori, el campo [Nombre]. Sin ese IF se te "regeneraría" el código de nuevo, y si el que lo modifica tiene asignada la constante "B" y no "A", por ejemplo, te cambiaría el identificador. Con el IF no se te cambiara nada si el registro ya ésta creado.

...

Ten en cuenta que esto es sólo un apaño, porque Access no está pensado para ser utilizado de la manera que tú quieres utilizarlo.

Lo que llamas "apaño", tiene una pinta genial. Lo probaré y te cuento.

He cogido algunas ideas muy interesantes para hacer copias de seguridad de mis bases de datos (excelente artículo por cierto) pero , disculpa mi torpeza pero no acabo de ver la relación de "La creación de réplica como Backup" con el problema de anexión de datos que te he planteado.

Muchísimas gracias.

Cuando sincronizas réplicas de BD's automáticamente los datos se combinan en todas las BD's en las que haces la sincronización.

Es decir:

- La BD "A" tiene unos datos Z

- La BD "B" tiene unos datos Y

Cuando las sincronizas tienes:

- La BD "A" tiene unos datos Z y unos datos Y

- La BD "B" tiene unos datos Z y unos datos Y

Si "pierdes" la BD "A" tienes, por aproximación a la idea, un backup de los datos Z en la BD "B".

Esa es la idea de utilizar la sincronización como backup, y por eso indico que sólo puede considerarse backup de datos, porque si en la BD "A" habías añadido formularios, informes u otros objetos, estos no se "sincronizan", por lo que los pierdes si pierdes la BD "A" (aunque, por suerte, los datos sí están en la BD "B", al menos hasta la última sincronización).

Cuando te remití al artículo no era para tratar tu consulta "especialmente" como un tema de backup, sino para que supieras que existía "eso" de réplica y, si estabas interesado/a y le veías aplicación práctica a tu problema (como sistema, no como backup), en el artículo hay links a páginas de Microsoft que te explican con detalle cómo funciona el asunto. Sólo era para eso.

Espero haber clarificado la cosa.

Y te agradezco tus palabras sobre el artículo. Siempre es un placer ver que lo consideráis útil para vosotros. ;-)

Ya me dirás qué tal te va tu BD.

He optado por la solución con el código que pusiste, he hecho pruebas y funciona perfectamente.

En cuanto a la sincronización como backup, con tu explicación me he aclarado bastante. Seguro que me sirve para más adelante.

Sólo agradecerte de nuevo la labor impagable que haces y lo mucho y muy bien que nos ayudas.

¡Neckkito for president ya! :-)

Firmado: "Plataforma para la beatificación de Neckkito" :-)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas