Duda de relación de tablas de n a n


(Tolgrim) #1

Buenas a todos,

Estoy haciendo mi segunda aplicación en velneo, esta vez para ordenar mis discos de música y así ir aprendiendo Necesitaba en el esquema de tablas hacer una relación de N a N, según leí en el pdf sobre análisis de tablas, habría que hacer tres tablas, con dos enlaces de 1 a N, en mi caso concreto:

Discos(Maestro), con un enlace plural a Discos por ubicación (Histórico con solo dos campos ) ,
Ubicaciones con un enlace plural a Discos por ubicación,

De manera que en un disco puedan encontrarse en varias ubicaciones y que en una ubicación pueda contener a varios discos.

Hasta ahí bien, pero... en la ficha de un disco tengo una rejilla que lista sus ubicaciones, al dar de alta desde esa rejilla una ubicación, solo se me da de alta la ubicación pero no la tabla intermedia (discos por ubicación), que enlaza las dos.

He mirado por ahi y lo que se me ocurre es en la tabla "Ubicaciones" poner una proceso posterior al alta, donde cree la ficha correspondiente en la tabla "Discos por ubicación" ¿es la solución adecuada? o estoy dando mal de alta en la tabla ubicaciones

Empece con algo así en el proceso posterior al alta de ubicaciones:

- Set (ID_UBIC, #ID)
- Cargar plurales (Discos por ubicación )
- Crear nueva ficha en memoria (d,discos por ubicación )
- Modificar campo ( UBICACIONES, ID_UBIC)

Pero no se obtener la #ID de la ficha disco que le corresponde.. ¿Como sería?

Saludos y gracias


(JuanJex) #2

Es un poco confuso lo q dices: la Ficha Discos presenta una rejilla(supongo q esta rejilla esta enlazada a la Tabla Discos-ubicaciones o a Ubicaciones), y cuando das alta es con insert o una accion te muestra el formulario de la tabla a la q enlazas la rejilla. Confirmame eso.
Respecto a poner codigo en Proceso Posterior al alta de la tabla Ubicaciones no es recomendable x:
- Este evento siempre se dispararia, imaginate que tambien es maestra de otras tablas y no seria necesario dar de alta en la tabla intermedia.
- Claro no tienes nunca el ID del disco recuerda es un evento que se dispara independiente, desconoce otros datos.

Si nos envias mas informacion de como tus objetos estan enlazados a las tablas te ayudo un poco mas

Sin embargo, si miras con detenimiento los ejemplos basicos veraz, que no hay q reinventar..nada Velneo es simple, hay q ordenarse en como Presentamos nuestros formularios.
Te digo esto por que todo lo que planeas hacer es similar al Caso: Productos - Clientes - Factura de Venta y hay muchos ejemplos por aqui para q te guies.
slds y suerte


(Tolgrim) #3

Muchas gracias por responder tan rápido, a ver...

Me refería a que en el formulario que me presenta una ficha de discos tengo una rejilla donde presento sus ubicaciones, esta se encuentra enlazada a la tabla ubicaciones. Planteo el esquema un poco a la vez que buscare los ejemplos que me comentas:

Datos:

- Discos(Maestro), con un enlace plural a Discos por ubicación, nombre, foto, etc...
- Discos por ubicación (Histórico con solo dos campos de enlace a maestro; Discos y Ubicaciones ) ,
- Ubicaciones con un enlace plural a Discos por ubicación ,Nº CD y NºTambor

Aplicación:

Formulario discos, de origen datos: DISCOS, que contiene datos del disco y:
Un subformulario con un CONTROL que mostrará sus múltiples ubicaciones, compuesto de :
OBJ1: proceso de origen Ficha DISCOS, destino UBIACION lista.
Cargar plurales (DISCOS _POR _UBICAICON_DISCOS)
Cargar Maestro ( UBIACIONES)
Añadir lista a la salida
FIN OBJ1
OBJ2: rejilla Ubicacion de tabla asociada UBIACIONES

Al dar de alta un disco, editarlo y dar de alta desde la rejilla del formulario una ubicación. ( con un formulario simple de tabla asociada UBICACIONES) mientras no cierre el formulario veo la ubicación añadida a la rejilla, al cerrar el formulario de discos y volver a el esta en blanco.

Cuando son tablas de 1 a N (sin historico en medio) no tengo problemas

P.D. y gracias por el consejo de no usar actualizaciones para estos temas, me lo apunto 1 saludo.


(JuanJex) #4

Logico que muestre en blanco, mira tu OBJ1: tiene carga plurales, y de heho como no hay ningun plural asociado(de hecho el disco es nuevo) es deicr no hay ningun registro en Disco-ubicaciones no jala nada, es decir es un error logico no de Velneo de hecho las sentencias funcionan normal pero no existe nada en realidad, luego el Cargar Maestro no jala nada. Ahora de hecho da de alta a las Ubicaciones pero no las asocia para nada.
Existe un error de concepcion me parece que Velneo tampoco da de alta automatica una tabla historica por el simple hecho de estar ligada a 2 maestros.
Supongo que lo quieres hacer en un solo formulario el alta de Disco+Ubicacion, y q tal si deseas agregarle las ubicaciones a tu disco.
Solucion:
Formulario1:
Enlazado con Tabla Discos
Un Control Objeto:
OBJ1: proceso de origen Ficha DISCOS, destino DISCO-UBICACION lista.
Cargar plurales (DISCOS _POR _UBICAICON_DISCOS)
OBJ2:Rejilla enlazada a la tabla DISCO-UBICACION
De hecho esta Rejilla tiene asociado un Formulario de Alta sobre esta tabla(DISCO-UBICACION) y es en este formulario,
que le pones un campito que representa la Ubicacion, y a aun costadito puedes poner Botones con diferentes Comandos por ejemplo Alta de Maestro y luego te pedira que maestro tu le pondras Ubicaciones y te pedira el Formulario de alta. Otro Boton con comando Localizar y te pedira un localizador que tbm tienes q haber creado.
De esta manera controlas q desde el formulario DISCO-UBICACION puedas dar de alta las ubicaciones y grabarlas.
Funcionaria = si empiezas desde la Ubicacion y ahi pones la rejilla de DISCO-UBICACION y los botones harian referencia a DISCOS en fin todo por donde empiezas.
Espero se entienda.
Slds


(Tolgrim) #5

Anda ya entiendo, era un problema de concepto mio, ya que creía que velneo si daba de alta automáticamente en la tabla DISCOS POR UBICACION, por ser histórica y estar enlazada con DISCOS Y UBICACION.

Y entiendo que la rejilla tenga que ser de la tabla intermedia, así desde ella puedo mostrar los diferentes atributos de las dos tablas que enlaza. y al realizar las altas desde esta lo único que hago es conectar dos entradas,una de DISCOS y otra de UBICACIONES, pero dos entradas previamente creadas.
Yo intentaba crear la UBICACIÓN enlazándola automáticamente, porque una Ubicación no tiene sentido de exisitir si no tiene asociado ningún disco, aunque esto ya lo controlaré de otra manera.

saludos y muchas gracias, después del trabajo lo pruebo, saludos!