Ver Mensaje Individual
  #1  
Antiguo 26-10-2006
Avatar de Hagen
Hagen Hagen is offline
Miembro
 
Registrado: ene 2004
Posts: 65
Reputación: 21
Hagen Va por buen camino
Question Problemas con generadores en relacion Muchos-a-Muchos

Estoy usando Delphi 7, Firebird 1.5.3 e IBX 7.06

Como muchos sabran, cuando se tiene una relacion muchos a muchos se debe crear una
tablas intermedia que almacena la relacion entre ambas tablas:

Por ej: Un materia puede ser cursada por varios estudiantes y un estudiante puede
cursar varias materias. En este caso se crea una tabla intermedia que
relaciona las 2 tablas. En dicha tabla se debe almacenar la llave primaria
de materia y de estudiante.

Bueno el problema se me presenta cuando se debe almacenar las llaves primarias en
la tabla intermedia. Debido a que uso como llave primaria un numero devuelto por
un generador en las tablas estudiante y materia.


Como se daran cuenta NO ES la tipica relacion maestro-detalle (uno a muchos).


OJO: la llave primaria me la asigna el servidor mediante un generador y un trigger.

En concreto mi problema esta en:

- Como se puede conocer el valor que se asigno a la llave primaria tanto en la
tabla estudiante como en la tabla materia. O sea como obtengo el valor de la
llave primaria una vez echo el Post??

Yo lo obtengo buscando con un Query y dandole como parametro los valores
introducidos. Considero que esta no es la mejor manera, ya que si la tabla
tuviera varios registros (300.000) afectaria al rendimiento de la aplicacion.
Y tambien puede darse el caso que se introduzcan los mismos datos entonces el
query me devolveria mas de 1 registro.


Algunas consideraciones:

- La aplicacion debe funcionar con varios clientes a la vez


- Se debe realizar la insercion de los datos desde el mismo formulario o sea
que la insercion de los datos de alumnos y de las materias que cursa se
hace desde el mismo formulario. Si solamente se tuviera un formulario
en donde se establezcan las relaciones entre materia y alumnos; seria mas facil
porque lo unico que tendria que hacer es usar dblookupcombobox's para "jalar"
los datos ya introducidos; pero esa no es la idea.


Muchas gracias de antemano.
Responder Con Cita