Ayuda por favor. Como insertar información a tabla maestro detalle
Como realizar una inserccion maestro detalle. Ejemplo el tipico caso de Pedidos y Detalle de Pedio que se encuentran en dos tablas con una relación de 1 a muchos. El detalle de pedido (productos a comprar) se encuentra en tabla.
Esto porque no me parece optimo utilizar dos insercciones una el encabezado y otra que recorra la tabla y llamando multiples veces a un procedure que inserte una linea de pedido.
Como hacer que un procedure reciba todos los detalle de pedidos en parametro, que opciones hay.
- Inicie sesión o regístrese para enviar comentarios
pues así es
Una inserción primero para el encabezado, y luego una inserción por cada detalle.
INTEFAZ GRAFICA: PRODUCTO
INTEFAZ GRAFICA:
PRODUCTO A------------------------->CLICK --------------------->MOSTRAR DETALLE A
PRODUCTO B------------------------->CLICK---------------------->MOSTRAR DETALLE B
PRODUCTO C------------------------>CLICK..............................>MOSTRAR DETALLE C
CLIENTE INGRESA SUS DAT OS
REALIZA PRIMER PEDIDO N 1 PRODUCTO A,B TOTAL =1O PESOS
REALIZA SEGUNDO PEDIDO N2 PPODUCTO C TOTAL=30 PESOS
......ASI SUCESIVAMENTE
COMPRA
CLIENTE ID 3
PEDIDOS:
N1 PRODUCTO A,B Total de N1 10
N2 PRODUCTO C Total de N2 30
TOTAL COMPRA 40
ASI QUE TENEMOS
UN CLIENTE REALIZA UNA O MAS COMPRAS
COMPRA TIENE UNO O MAS PEDIDOS
PRODUCTOS TIENE UNA MAS CARACTERISTICAS
OBSERVACION:
PRODUCTOS Y DETALLES FIJOS O DINAMICOS?
ENTONCES UNA COMPRA TIENE
UN CLIENTE
UNO O MAS PEDIDOS
TOTAL DE ESA COMPRA
DETALLE PEDIDO
ID IDPRODUCTO CANTIDAD
ENTONCES SI PRODUCTOS Y DETALLES SON FIJOS
DESDE LA INTERFAGA GRAFIAS PUDES ALMACENENAS LAS COMPRAS ENCAPSULAR ESOS DATOS Y LUEGO MEDIANTE
LA ABASTRACCION IR RECORRIENDO LOS DATOS Y ALMACENARLOS UNO POR UNO
LLAMANDO UNA INSERCCION A LA VEZ
FIJASTE EN DETALLE DE PEDIDO ,(AH! TE DISTE CUENTA) SI ANEXAS MAS COSAS SERAN TU SEGUNDA INSERRCION POR CADA ELEMENTOS REGISTRADO HACIA LA BASE DE DATOS
INSISTO SIEMPRE Y CUANDO EL PEDIDO Y DETALLE SEAN FIJOS
PORQUE SI NO ESTO CAMBIA SERIAN AGREGAR DOS INSERCCIONES MAS, LO MEJOR UN PROCEDIMIENTOS Y CURSORES
Pero que pasa si ocurre algun
Pero que pasa si ocurre algun problema en la primera insercción y se insera un pedido sin sus detalles ???
No estaría consistente la
No estaría consistente la base de datos!!!
Qué tipo de framework y base
Qué tipo de framework y base de datos estás usando? igual si nos comentas las herramientas concretas que utilizas se te puede orientar ...
NetBeans con MySQL aplicacion
NetBeans con MySQL aplicacion de escritorio
Tengo entendido que se puede
Tengo entendido que se puede armar un xml con los datos que se van insertar para hacerlo en una sola transaccion pero no se como armarla y llamarla desde el programa.
Si estás trabajando con JDBC
Si estás trabajando con JDBC directo tienes que poner la propiedad "autocommit" de la conexión a falso y tienes que invocar el método commit() explicitamente cuando hayas terminado.
De esa forma te aseguras que todos los registros fueron insertados correctamente. Si no lo fueron, llamas al método "rollback()".
Si utilizas algún framework revisa la documentación buscando el término "transacciones" .
Ejemplo:
Ok. Excelente muchas gracias.
Ok. Excelente muchas gracias. Le agradezco mucho.
Si estás trabajando con JDBC
Adhiero plenamente al comentario de OscarRyz, y agrego algo:
Si estás trabajando con una base Buffered Loggin, al objeto Connection asígnale el nivel de aislamiento (isolation) COMMITED READ, ya que puede que el dato de la cabecera todavía haya quedado en los logical logs de la base y no se haya grabado en el disco.
sería algo así:
c.setTransactionIsolation(TRANSACTION_COMMITED_READ); o así:
c.setTransactionIsolation(Connection.TRANSACTION_COMMITED_READ);
La verdad es que no lo recuerdo bien.
De esta manera, te aseguras de que cuando vayas a insertar los conceptos que son Foreign Keys (los del detalle), encuentren su Primary Key (los elementos del maestro).
Saludos!
para eso existen las
para eso existen las validaciones, ejemplo:
en la interfaz grafica solicita ese detalle