PROBLEMA DE USUARIOS
Publicado por Iván Salazar (101 intervenciones) el 24/11/2006 12:48:43
Saludos
La presente es para exponerles mi siguiente caso:
La Base de Datos es ORACLE
Cuando dos usuarios en este caso están accesando a la misma ventana, esta tiene un evento de grabar los datos en la tabla, el cual la clave se asigna automáticamente.
Esta clave se asigna cuando el usuario pulsa el botón de guardar, todo Ok, se guarda el row y asigna el código ejecutando un SELECT que ubica el MAX() del código. Ahora bien, el otro usuario cuando guarda le da el mismo valor que el del usuario anterior el cual ya guardo los datos y por ende la BD muestra el mensaje de UNIQUE CONSTRAINT , o sea, valor duplicado.
¿Que estaría pasando por qué no ejecuta el SELECT que ubica el valor máximo en la tabla cuando otro usuario ya haya insertado una ROW, hay que agragarle una función especifica de PB?
¿Hay algo en las propiedades del DW que me falta o como deberían estar las propiedades?
Les acoto algo que estoy ejecutando las sentencias de commit; rollback; según el caso del Update() para evitar que permanezcan los bloqueos en la BD y que la transacción no este abierta.
Anexo copio el SELECT
String ls_cod
Long ll_cod
SELECT NVL(MAX(substr("PRESUPUESTOS"."COD_PRESUPUESTO",12,9 )),'0') as cod_presupuesto
INTO :ls_cod
FROM "PRESUPUESTOS"
WHERE ( "PRESUPUESTOS"."COD_INSTITUCION" = :ai_institucion ) AND
( "PRESUPUESTOS"."COD_SEDE" = :ai_sede ) AND
( "PRESUPUESTOS"."COD_AREA" = :as_area ) AND
( "PRESUPUESTOS"."COD_PROYECTO" = :as_proyecto ) AND
( "PRESUPUESTOS"."COD_OBRA" = :as_obra ) AND
( "PRESUPUESTOS"."COD_CLASEOBRA" = :ai_claseobra ) USING gtr_sybase ;
if isnull(ls_cod) then Return 1
ll_cod=Long(ls_cod)
ll_cod ++
Return ll_cod
Sin mas a que agregar y agradecido por tuda su atención
La presente es para exponerles mi siguiente caso:
La Base de Datos es ORACLE
Cuando dos usuarios en este caso están accesando a la misma ventana, esta tiene un evento de grabar los datos en la tabla, el cual la clave se asigna automáticamente.
Esta clave se asigna cuando el usuario pulsa el botón de guardar, todo Ok, se guarda el row y asigna el código ejecutando un SELECT que ubica el MAX() del código. Ahora bien, el otro usuario cuando guarda le da el mismo valor que el del usuario anterior el cual ya guardo los datos y por ende la BD muestra el mensaje de UNIQUE CONSTRAINT , o sea, valor duplicado.
¿Que estaría pasando por qué no ejecuta el SELECT que ubica el valor máximo en la tabla cuando otro usuario ya haya insertado una ROW, hay que agragarle una función especifica de PB?
¿Hay algo en las propiedades del DW que me falta o como deberían estar las propiedades?
Les acoto algo que estoy ejecutando las sentencias de commit; rollback; según el caso del Update() para evitar que permanezcan los bloqueos en la BD y que la transacción no este abierta.
Anexo copio el SELECT
String ls_cod
Long ll_cod
SELECT NVL(MAX(substr("PRESUPUESTOS"."COD_PRESUPUESTO",12,9 )),'0') as cod_presupuesto
INTO :ls_cod
FROM "PRESUPUESTOS"
WHERE ( "PRESUPUESTOS"."COD_INSTITUCION" = :ai_institucion ) AND
( "PRESUPUESTOS"."COD_SEDE" = :ai_sede ) AND
( "PRESUPUESTOS"."COD_AREA" = :as_area ) AND
( "PRESUPUESTOS"."COD_PROYECTO" = :as_proyecto ) AND
( "PRESUPUESTOS"."COD_OBRA" = :as_obra ) AND
( "PRESUPUESTOS"."COD_CLASEOBRA" = :ai_claseobra ) USING gtr_sybase ;
if isnull(ls_cod) then Return 1
ll_cod=Long(ls_cod)
ll_cod ++
Return ll_cod
Sin mas a que agregar y agradecido por tuda su atención
Valora esta pregunta
0