MTBASE / SYBASE DE COLOMBIA
 
Búsqueda avanzada...

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

Seleccione un icono para su respuesta:

Escriba aquí su comentario o respuesta:

Escriba aquí su nombre (opcional):

Escriba aquí su correo electrónico (opcional):

Escriba el código tal como se muestra en la imagen (mayúsculas y minúsculas):
Código de seguridad
¿No puede leer el código? Intente con otro Mostrar un nuevo código



Recuerde que al publicar ésta respuesta usted acepta los Términos y Condiciones de Uso de los foros.

 
 Inicio   Sobre MTBASE   Sobre Sybase   Empleos en MTBASE   Mapa del Sitio   Mail Corp.   Aspectos Legales y Políticas de Privacidad