** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Integracion tablas relaciones formularios
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoIntegracion tablas relaciones formularios

 Responder Responder
Autor
Mensaje
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Tema: Integracion tablas relaciones formularios
    Enviado: 06/Junio/2021 a las 16:44
Hola, es un poco amplio el asunto, pero la cuestión es que justamente en la integración de estos tres campos es donde tengo la duda. Paso a explicarlo en resumen.
Tengo 2 formularios A y B
3 tablas, Pacientes, Estudios, BaseEstudios.
Las tablas pacientes y estudios se relacionan a través del campo IdPaciente.

Formulario A:
Tengo datos para registrar, supongamos exámenes complementarios de un paciente que se registran en la tabla exámenes complementarios.
Los objetos en el formulario A para cargar los datos serian:
TxtIdPaciente. Cuadro de texto. Id del paciente donde se va a cargar el estudio.
TxtFecha. Cuadro de texto. Se coloca la fecha.
CCEstudio. Cuadro combinado. Elige el tipo de estudio.
TxtDescripción. Cuadro de texto. Se escribe la descripción del estudio
BotonCargar. Consulta de datos anexados, agrega en la tabla estudios los datos registrados en el formulario A.
BotonNUevo. Abre e formulario B.

El cuadro combinado CCestudio se basa una tabla, que se llama BaseEstudios, la cual tiene los campos Id, Estudio.

Formulario B:
Este formulario lo utilizo para editar la tabla BaseEstudios. Es más que nada para que se agreguen o saquen estudios, a los fines prácticos, actualiza el CcEstudio.
Los objetos en este formulario serian:
LstEstudio. Cuadro de lista. Se visualizan los estudios de la tabla BaseEstudios. 
txtEstudio. Cuadro de texto. Se escribe el estudio que se quiere agregar.
BotonAgregar. Consulta de datos anexados. Agrega el estudio que se cargo en el txtEstudio a la table baseEstudios.
BotonEliminar. Consulta de eliminación. Elimina el estudio que se seleccionó en la lstEstudio.

Por ahí es más fácil verlo que leerlo para hacerse una idea, dejo una foto:
Formulario A:
https://ibb.co/N2kChF8

Formulario B:
https://es.imgbb.com/

Al agregar los estudios, en vez de agregar el campo2 con el nombre del estudio de la TablaBaseEstudio, agrego el campo1, con el Id, para no repetir los datos. Es decir en la tabla estudios me quedaría algo así:
id------------IdPaciente------------Fecha------------Estudio------------Descripción.
1------------ 7----------------------6/6/2021-------- 3------------------ Normal.
Ejemplo siguiendo el registro de "angioTc" del cuadro de lista

Ahora bien, supongamos que se cargan varios estudios en la base de datos y en un futuro se quiere eliminar algún estudio, por ejemplo para modificar su nombre, que en vez de que el estudio sea AngioTc, sea AngioTomografía. En este caso al borrarlo y agregarlo, se va a generar otro IdDeEstudio. Pero que pasa con los estudios de AngioTc que se habían cargado? El 3 desapareció de la tabla BaseEstudios, pero quedo registrado en la tabla estudios.

La pregunta ahora, cual sería la forma eficiente de resolver estos detalles?
Se me ocurren dos posibilidades:

1- En vez de guardar el Id del estudio, usar como columna dependiente la del nombre del estudio y no la del Id, de manera que en la tabla estudios se guarde el nombre del estudio y no el id. Me parece igual que si la base de datos crece, no sería ideal guardar datos de esta manera. Estoy en lo cierto? O es prácticamente lo mismo?

2- En el botón eliminar, usar en Dcount para buscar el estudio en tabla estudios, en el caso de que esta ya está guardada en otro estudio, impedir que se borre, avisar con un msgbox y sugerir cambiar el nombre. Para cambiar el nombre, agrego un botón con una consulta de actualización. Para esto también debería relacionar la tabla BaseEstudios con Estudios y agregarle la integridad referencial, actualizar y eliminar en cascada. Verdad?

Bueno, espero haber podido ser claro, creo que mis dudas son conceptuales.
Muchas gracias por la ayuda de siempre.
Saludos




Arriba
lunasoft Ver desplegable
Habitual
Habitual
Avatar

Unido: 04/Noviembre/2014
Localización: Graz
Estado: Sin conexión
Puntos: 100
Enlace directo a este mensaje Enviado: 06/Junio/2021 a las 17:15
Hola.

Yo veo 2 opciones

1. Integridad referencial impidiendo la eliminación si existen datos en las tablas


2. No borres los registros, agrega un campo booleano de nombre "archivado". Si lo marcas, que desaparezca de la consulta que llena el formulario. Así evitarias tener relaciones huérfanas.

Saludos

Juanjo Luna (Lunasoft)
Microsoft MVP 2023

----------------

https://www.luna-soft.es/

https://www.youtube.com/ACCESSoTOTAL

https://github.com/ACCESSoTOTAL
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 06/Junio/2021 a las 17:57
Hola! Muchas gracias por contestar!
Estoy en la etapa de diseño de la aplicación, no tengo datos guardados todavía, el ejemplo era una supuesta situación que se me podría presentar cuando comience a usarla, te aclaro esto, por la opción de usar un campo booleano para la consulta.

La forma más eficiente de guardar los datos en las tablas relacionadas es  a través del id, no? para descartar la primer opción que había planteado yo.

La primera opción que me planteas es mi opción 2, verdad?
Arriba
lunasoft Ver desplegable
Habitual
Habitual
Avatar

Unido: 04/Noviembre/2014
Localización: Graz
Estado: Sin conexión
Puntos: 100
Enlace directo a este mensaje Enviado: 06/Junio/2021 a las 18:06
Si usas integridad referencial sí (cosa que algunos no recomiendan).

Resumiendo yo te recomiendo la opción 2 que te planteo. Esta solución la puedes aplicar a todo el proyecto, de modo que nunca eliminas nada.

Cada tabla tiene un booleano de archivado.

Como bien indicas el uso de id es fundamental
Juanjo Luna (Lunasoft)
Microsoft MVP 2023

----------------

https://www.luna-soft.es/

https://www.youtube.com/ACCESSoTOTAL

https://github.com/ACCESSoTOTAL
Arriba
damian_colomb Ver desplegable
Habitual
Habitual


Unido: 08/Febrero/2021
Localización: Argentina
Estado: Sin conexión
Puntos: 177
Enlace directo a este mensaje Enviado: 08/Junio/2021 a las 04:21
MUchas gracias Lunasoft!
Se puede cerrar el hilo.
Saludos
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable