|
Soporte Técnico >
Foros de Discusión >
PowerBuilder >
Respuestas al Tema
Respuestas para el Tema “OBTENER IDENTITY AL INSERTAR REGISTRO EN UN DW EN PB 12.5”

Hay 4 respuestas para éste tema.
Erick
(Feb 28, 2012 - 1:48PM)
|
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.
|
1.
L.S.C. Moroni Romero – moroni.romero@yahoo.com
(Feb 28, 2012 - 8:39PM)
|
ll_folio = dw_casos.object.sop_id[1]
prueba asi...
|
2.
Erick
(Feb 29, 2012 - 12:16PM)
|
Hola Moroni.
Muchas gracias por tu respuesta. Seguí tu sugerencia pero lamentablmenete no funcionó.
Jugando con los valores de conexión, pude hacer que el DW me devuelva el identity, pero sólo en modo de debug, si ejecuto la aplicación o hago un ejecutable y lo corro, sigo obteniendo un nulo. El registro si se inserta siempre en la base de datos, pero el DW "no cacha" el identity.
"Algo" en el entorno de debug, hace que si me devuelva el identity, pero no logro saber que es.
Los datos de conexión con los que sí me devuelve el identity en modo de debug son: DBMS=SNC SQLCA.DbParm="Provider='SQLNCLI',Database= ......
¿Alguna idea?
Gracias!
|
3.
ElvisLS
(Mar 22, 2012 - 8:54PM)
|
Hola Erick
Para resolver el problema en la cadena de conexion debes agregar la opcion: Identity='SCOPE_IDENTITY() ó Identity='@@IDENTITY'"
ejemplo con PB11.51 y SQL Server 2008: SQLCA.DBParm = "TrustedConnection=1,Provider='SQLNCLI10',Com...()'"
SQLCA.DBParm = "TrustedConnection=1,Provider='SQLNCLI10',Com...
Si usas el SQL Profiler, en la traza SQL veras el INSERTAR al momento de guardar los datos desde el DW y luego aparece una linea extraña: exec XXxxxxXX (este es el error de PowerBuilder), Ahora si agregas las opciones indicadas anteriormente en vez de exec ahora se vera SELECT @@IDENTITY ó SELECT SCOPE_IDENTITY()
Con esto esto evitas el valor NULL y el DW ya visualizara el valor de IDENTITY luego de guardar los datos..
En el entorno de trabajo de PowerBuilder te recomiendo que uses SCOPE_IDENTITY() para esto debe configurar en el tab Syntax la opcion: DataWindow Identity Value = SCOPE_IDENTITY() el predeterminado es @@IDENTITY, pero no sirve por el error que tiene PB.
|
4.
Erick Morales
(Mar 26, 2012 - 7:07PM)
|
Wow!!
Genial ElvisLS, utilice SCOPE_IDENTITY() y funciona de maravilla, tanto corriendo la aplicación desde PB como en un ejecutable.
Muchísimas gracias por tu invaluable ayuda.
|
|
Publique una Respuesta o Comentario para éste Tema
|
|