PDA

Ver la Versión Completa : Maestro/detalle pierdo detalle con -1


atani123
03-07-2014, 11:18:24
Tengo 2 tablas, Master (id, codigo, nombre) y Detalle (id, id_Master, Direccion). Estan relacionadas mediante Master.id = Detalle.id_Master

Cuando hago una insercion me queda algo como esto.

Master
id = -1
codigo = '001'
nombre = 'jose'

Detalle linea 1
id = 1
id_Master = -1
Direccion = 'Pelayo 110'

Detalle linea 2
id = 2
id_Master = -1
Direccion = 'Caspe 35'

Detalle linea 3
id = 3
id_Master = -1
Direccion = 'Diputacion 8'


El caso es que cuando hago el post del Master, el id -1 cambia por el que toca y no me lo cambia en las lineas de detalle, por lo que quedan en el limbo.

¿Como deberia programar esto?

Al González
03-07-2014, 17:19:52
Obtén y asigna el ID correcto desde que empieza la captura del registro maestro. ^\||/

atani123
03-07-2014, 17:29:29
Pero existe el tipico problema de cancelacion, es decir, le asigno un numero ej el 8., entra otro usuario, le asigna el 9. Ahora si cancelamos la del 8, se nos quedara el hueco. ¿no?

cloayza
03-07-2014, 17:37:55
No siempre de gana amigo... :D La opción que te indica el honorable forero Al González es completamente válida.

Saludos cordiales

roman
03-07-2014, 17:45:39
Pero existe el tipico problema de cancelacion, es decir, le asigno un numero ej el 8., entra otro usuario, le asigna el 9. Ahora si cancelamos la del 8, se nos quedara el hueco. ¿no?

Si la numeración debe ser correlativa (sin huecos) entonces tu enfoque es correcto. No indicas que base usas pero la opción más sencilla, si tu motor lo permite, es establecer una restricción de llave foránea del tipo ON UPDATE ... CASCADE para que sea el mismo motor el que actualice la llave foránea cuando cambies la de la tabla maestra.

Si esto no es posible pues tampoco sería difícil obtener el ID asignado al maestro después del POST y hacer tú mismo la actualización.

// Saludos

Al González
03-07-2014, 19:07:00
Pero existe el tipico problema de cancelacion, es decir, le asigno un numero ej el 8., entra otro usuario, le asigna el 9. Ahora si cancelamos la del 8, se nos quedara el hueco. ¿no?
Es mejor usar llaves primarias artificiales (en el foro hay varios hilos que tratan sobre ello): Son IDs que el usuario no conoce y que no importa si llevan huecos o no, su único requisito es que sean únicos a nivel de la tabla. Para numerar registros de forma consecutiva recomiendo un campo aparte (Numero, Codigo, Clave), el cual sí es visible y sí representa algo para el usuario.

Un saludo.