[SOLUCIONADO]Problema en Sincronizacion de una Relacion

Buena Tarde,

Esta semana ha sido la de los problemas.

Se tiene una relacion de DOCENTES (grado, grupo, docente)
NOTAS (grado,grupo,estudiante)
El datos relacion es DOCENTES-NOTAS(grado, grupo, estudiante, nota)

En el primer CI de navegacion se cargan los docentes con sus respectivas asignaturas
En la Edicion se muestra el listado ML de los estudiantes de dicho grupo

Si se ingresa la nota del primer estudiante y se le da guardar, la misma nota la transmite a todo el grupo, parece que el UPDATE no tiene en cuenta los campos completos de la tabla hija, sino solamente la de la tabla padre.

Resumiendo, como puedo agregar a la sicronizacion, que me tome la llave de la tabla hija, ya que falta el estudiante segun el Log ?

Para cargar el ML utilizamos

$condicion[‘vigente’] = true; //estudiantes activos
return $this->get_relacion()->tabla(‘notas’)->get_filas($condicion);

Para la modificacion del ML
return $this->get_relacion()->tabla(‘notas’)->procesar_filas($datos);

Estamos errando en algo ??
Gracia por su ayuda.

Anexo parte del log, donde se ve claramente, que el ML se carga bien, pero al momento de la transaccion, falta el codigo del estudiante, por lo tanto actualiza todo el grupo y se necesita actualizar cada registro independientemente

0 =>
array (
0 =>
array (
‘per_codigo’ => ‘080001’,
‘per_nombres’ => ‘AGUDELO GAVIRIA JOAN MAURICIO’,
‘eno_participacion’ => ‘3’,
‘eno_cuaderno’ => NULL,
‘eno_total_trabajo’ => ‘3’,
‘eno_taller1’ => NULL,
‘eno_taller2’ => NULL,
‘eno_taller3’ => NULL,
‘eno_taller4’ => NULL,
‘eno_total_produccion’ => NULL,
‘eno_parcial1’ => NULL,
‘eno_parcial2’ => NULL,
‘eno_total_evaluaciones’ => NULL,
‘eno_final’ => NULL,
‘eno_autoevaluacion’ => NULL,
‘eno_cuantitativo’ => ‘0.6’,
‘eno_cualitativo’ => ‘4’,
‘eno_estudiante’ => 390,
‘x_dbr_clave’ => 0,
‘apex_ei_analisis_fila’ => ‘M’,
),
2 =>
array (

TRANSACCION

AP_TABLA: [estudiante_notas]
registro: 0
UPDATE estudiante_notas
SET eno_participacion = ‘3’,
eno_total_trabajo = ‘3’,
eno_cualitativo = ‘4’,
eno_cuantitativo = ‘0.6’
WHERE eno_anno = ‘2010’
AND eno_periodo = ‘1’
AND eno_jornada = ‘1’
AND eno_ciclo = ‘2’
AND eno_grado = ‘2’
AND eno_grupo = ‘1’
AND eno_area = ‘15’
AND eno_asignatura = ‘165’;

Hola Jhon,

si mal no entiendo la situacion seria la siguiente:

  • Tabla Docentes con clave multiple: grado, grupo, docente

  • Tabla Notas con clave multiple: grado, grupo, estudiante

  • Tabla Docentes Notas con clave multiple: grado, grupo,estudiante

Osea la tabla docentes notas termina siendo una relacion N->N entre las otras dos tablas no?.

Suponiendo el esquema anterior a la tabla Docentes Notas creo le falta como parte de la clave el docente. Las relaciones N->N se manejan de forma particular con datos_tabla, ya que el esquema fue pensado principalmente para trabajar con relaciones 1->N .

Generalmente en estos casos lo que se hace es fijar el cursor en la tabla padre, eliminar todos los registros de la tabla hija y agregar nuevamente los datos que quedaron. En ciertas situaciones la eliminacion no es posible por temas de consistencia, en ese caso lo que se debe hacer es modificar el registro de manera manual.

En tu caso el problema que tienes que que por el tipo de relacion para poder ubicar univocamente un registro en la tabla hija deberias tener cursores seteados en ambos padres, sin embargo como cargas la relacion x docente la tabla de notas (que no tiene relacion directa con la anterior) traera todos los registros que posee (sin filtrar por docente) por lo que para apuntar a un registro especifico de un estudiante deberias ir seteando los cursores de manera manual a medida que vas transitando por los registros de la tabla hija.

En definitiva, vas a tener que modificar el metodo que escucha la modificacion del ML ya que el procesar_filas() no te sirve en este caso. Como desees hacerlo ya depende de lo que permita el modelo de datos pero teniendo claves significativas no deberias tener tanto inconveniente.

Por cierto, dime si quieres que mezcle este tema con el hilo de los problemas de concurrencia ya que en definitiva estan relacionados.

Saludos


Solucionado con los la concurrencia, en realidad es del mismo hilo.

Ingenieros, gracias por su apoyo en este proceso.