FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. |
#2
|
|||
|
|||
Hola foro,
bueno, cuando se necesita conocer el el valor de una llave generada por el motor de base de datos por medio de un generador valga la redundancia (ahora se les dice secuencia a partir de la version 2 de firebrid), deberias utilizar la propiedad GeneratorField de los TIBDataset. Esta propiedad te permite indicarle al Dataset desde cual generador de la base de datos va a traer el nuevo valor para identificar en tu caso a los estudiantes. Existen 3 formas de generar el valor: 1. OnNewrecord. Esta opción incrementa el generador en 1 y lo trae hacia tu dataset cuando hagas una operacion Insert. La desventaja es que si das una operacion Cancel, pierdes el uso del numero y te quedan 'huecos' en tu secuencia. 2. On Post: Esta opción incrementa el generador en 1 pero solamente cuando cuando haces la grabacion del registro (operacion post). Es la que utilizo en situaciones como la que tu planteas. 3. On Server: llevo mas de 6 años trabajando con los IBX y no se la verdad que es lo que hace, mis disculpas. Ese es el mecanismo de tener 'en vivo' el identificador dentro de la aplicacion. De otro lado tambien coloco un trigger tipo Before Insert por si se hace ingreso de informacion por otro via diferente al formulario, quedaria mas o menos asi:
Si utilizas la propiedad GeneratorField es el aplicativo el que se encarga de construir el identificador y no el trigger. Muchos exitos, Luis F. Buelvas T.
__________________
Luis Fernando Buelvas T. |
#3
|
||||
|
||||
¡Hola a todos!
Quizá este mensaje no sea del todo útil para resolver tu problema Hagen, pero tal vez te ayude a visualizar de mejor forma el manejo de los campos llave. Un abrazo a muchos. Al González. |
#4
|
|||
|
|||
la solucion
para obtener la key generada por un generador (valga la redundancia)
puedes consultar directamente a través de un select . con esto , obtienes valor actual del generador . SELECT GEN_ID (gen_alumno, 0) contador from RDB$DATABASE y con lo siguiente , se incrementa el generador en 1, y obtienes el valor SELECT GEN_ID (gen_alumno, 1) contador from RDB$DATABASE saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Me da muchos fallos el quickreport 4.0 | escullar | Impresión | 0 | 03-05-2006 12:14:31 |
Relacion Muhcos a muchos | Sito | Conexión con bases de datos | 1 | 11-04-2006 13:25:29 |
UPDATE en una relacion 1 a Muchos... | JorgeBec | SQL | 4 | 19-11-2004 20:16:37 |
... muchos requisitos ... | Jure | Humor | 0 | 02-04-2004 16:22:18 |
Consulta SQl, relacion 1 a muchos | Walter | SQL | 3 | 15-07-2003 03:13:28 |
|