Power Builder - OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

   
Vista:

OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

Publicado por Erick Morales (3 intervenciones) el 20/02/2012 18:42:52
Hola a todos.

Tengo una aplicación que corre sin problemas en PB 9.02. En ella, inserto un registro con un datawindow y recupero el identity sin problema. En este datawindow, siempre, sólo se inserta un registro a la vez. El código es el siguiente:

ll_codigo = dw_casos.Update(true,false)
ll_codigo <> 1 then
RollBack;
else
Commit;
ll_folio = dw_casos.GetItemNumber(1, "sop_id")
end if

El caso es que al migrarlo a PB 12, la obtención del identity ya no funciona, La columna identity es sop_id. Ya intente regenerando, exportando e importando,cambiando las banderas del update, también, colocando en una variable el valor del registro que devuelve el InsertRow(0) y nada. El registro si se inserta en la tabla, pero no logro que el DW me devuelva el identity.

No creo que sea cuestión de mi código, pues es migrado de PB 9 y, en PB 9, al insertar el registro, visualmente, como usuario, puedo ver el valor debido a que la columna de sop_id está visible en la ventana. Hice una prueba desde el ambiente de diseño (painter) del DW, "ejecuto" directamente el DW para insertar el registro y tampoco coloca nada en la columna del identity. En PB 9 si lo hace también en el painter.

Utilizo :
MS SQl Server 2000 (no lo puedo cambiar por que mi cliente no puede migrar al 2008)
PB 12. Build 6807

Nota: Probé usando la versión express R2 del SQL 2008 con el painter del DW y tampoco se puede.

Espero puedan ayudarme.

Saludos y gracias de antemano.

Erick.
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

OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 21/02/2012 17:24:28
Algunas cosas que se me ocurren:

Utiliza el Update(TRUE, TRUE)

Luego del COMMIT;
Haces un AcceptText()

En la base de datos sí queda almacenado el registro?

Saludos.
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

OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

Publicado por Erick Morales (3 intervenciones) el 22/02/2012 00:24:36
Hola JeinnerH.

Gracias por responder.

Seguí tu sugerencia: cambie las banderas de update a TRUE, TRUE y después del comit hice el accepttext(), lamentablemente no funcionó.

Los registros si quedan almacenados en la base de datos de manera correcta.

¿Alguna otra sugerencia?

Saludos!
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

OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

Publicado por JeinnerH jhidalgo@excelteccr.com (638 intervenciones) el 22/02/2012 15:44:48
He visto que ese problema se presenta, pero no recuerdo cómo se soluciona.

Cuántos usuarios pueden actualizar en la base de datos a la vez?

Otra opción sería tener otra llave alternativa, con la cual puedas recuperar el Identy, una vez que ha sido almacenada la información a la BD.

Una vez realizado el Update, sería cuestión de hacer un Select Max(Sop_Id)
Into :ll_LLave
From ....
Where ....

Para recuperar el valor, pero esto funcionaría sólo si tienes una llave secundaria que te permita buscar el registro.

Otra opción sería crear una tabla y almacenar en esta la secuencia, de forma manual, es decir un registro por consecutivo y antes de hacer el insert lo localizas y aumentas en uno el valor actual, utilizando este en el consecutivo. Seguido, se actualiza el contador.

Saludos.
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

OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5

Publicado por Erick Morales (3 intervenciones) el 24/02/2012 02:09:20
Es una aplicación multiusuario, por lo tanto, son varios los usuarios que pueden insertar registros al mismo tiempo.

He pensado realizar algo como lo que sugieres a través de un stored procedure, pero, la verdad, me niego aún a hacerlo, pues dejaría de lado la potencia del DW.

Después de mucho jugar con los argumentos de conexión, finalmente pude lograr que me devuelva el identiy, pero........ ¡SOLO LO HACE EN MODO DE DEBUG! Si corro la aplicación o si hago el ejecutable y lo corro, no funciona....... WTF!!!!!


Por si a alguien le sirve de referencia, los parámteros de conexión son:
DBMS="SNC SQL Native Client(OLE DB)"
SQLCA.DbParm = "Provider='SQLNCLI'......"

¿Alguien sabrá por qué en modo debug si jala?

Saludos.

Erick
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