Power Builder - duda con sequence oracle

 
Vista:

duda con sequence oracle

Publicado por samuel (61 intervenciones) el 01/06/2007 14:16:03
Hola a todos,
tengo una ventana con una datawindow cabecera y otra detalle. En la detalle tengo un campo autoincremental, que es el id_bien que se aumenta en 1 mediante una secuencia de oracle.
En mi botón "nuevo bien" tengo el siguiente código

SELECT "SEQ_BIENES"."NEXTVAL"
INTO :ld_maxIdBien
FROM "DUAL"
USING SQLCA;

ll_filaBienes = tab_1.tabpage_3.dw_bienes.insertrow(0)

y luego hago los setitem de ambas datawindow (cabecera y detalle).

Mi problema es que por ejemplo me creo dos registros y el valor de ld_maxIdbien es por ejemplo 1 y 2 que es el que pongo con el setitem en la datawindow cabecera, pero al guardar en la tabla de la
datawindow detalle queda el campo id_bien a 3 y 4.
Es decir que en la tabla de la datawindow cabecera hay dos registros con id_bien 1 y 2 y en la de detalle hay dos con id_bien 3 y 4.

Si alguien me pudiese ayudar en el manejo de secuencias de Oracle se lo agradecería
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:duda con sequence oracle

Publicado por Alonso (62 intervenciones) el 02/06/2007 03:50:39
En toda aplicacion que exista cabecera y detalle debe ser mas o menos asi:

TABLA CABECERA
ID_cabecera campo llave de cada cabecera
otros campos que individualizan a cada cabecera

TABLA DETALLE
ID_detalle campo llave de cada detalle
ID_cabecera_det campo donde se asigna la llave de la tabla cabecera
otros campos que individualizan a cada detalle

Consecuente a lo anterior:
1ro. Generas y grabas un registro en la Tabla Cabecera y rescatas su ID_cabecera (que es su llave primaria)..

2do. En la Tabla Detalle, le asignas al campo ID_cabecera_det, la llave que rescataste de la tabla cabecera, luego generas los otros campos de detalle, asi por cada registro en Detalle. Con respecto a la llave primaria de la Tabla Detalle es autoincremental, segun tu lo has indicado

Asi las llaves de cabecera y de detalle nunca seran iguales, pero si, cada registro de la Tabla Detalle pertenecera a una cabecera.

Espero que te ayude
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:duda con sequence oracle

Publicado por samuel (61 intervenciones) el 04/06/2007 09:46:22
Hola Alonso gracias por tu ayuda pero mi problema es al extraer la clave primaria de la tabla cabecera para insertarla como clave foránea en al tabla de detalle.
En mi código lo hago en mi botón "Nuevo", la id_cabecera se crea mediante sequence de oracle y se puede crear varios cabecera-detalle antes de guardar (pulsar el botón guardar vamos).
Mi problema es eso sacar el id_cabecera, puedo sacar el primero con una
select max (id_cabecera)
INTO :ll_maxIdCabecera
from TABLA_CABECERA;

pero si creo varios cabecera-detalle antes de pasar por el commit siempre me devolverá el mismo valor, entonces tengo crear el valor de la cabecera, hacer un commit, hago la select y hago el setitem en el detalle pero queda poco "limpio" eso de poner commit en el botón "Nuevo". Alguna otra solución??
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar