Clarion - Problema para Obtener Identity con SQLServer 2005

 
Vista:
sin imagen de perfil

Problema para Obtener Identity con SQLServer 2005

Publicado por isaac flores (54 intervenciones) el 09/06/2010 05:29:52
Buen día.

Estoy haciendo un sistema con SQL Server y clarion 6.3. El problema que tengo es que no puedo obtener el identity del último registro añadido con ADD a la base de datos.

El campo de la llave primaria tiene en la pestaña la propiedad "IsIdentity=true", ya he probado con archivo{prop:sql}= "select @@identity"

poniendolo en los parámetros del archivo, y todo lo que dice el manual de ayuda, pero nada, aunque en la tabla sql se graba correctamente, hacia clarion no me regresa cual fue el número (identity) con el que se grabó el registro.

simplemente la documentación que tengo no me saca del problema.

¿qué me falta? algo de configuración en el sql server?
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:Problema para Obtener Identity con SQLServer 20

Publicado por Mauro Pasetti (1 intervención) el 10/06/2010 06:16:15
archivo{prop:sql}= "select @@identity" y luego un NEXT(archivo) te tiene que devolver en el 1er campo de archivo el valor del select o generarte un error.
Yo también he tenido problemas con la selección del Identity en Clarion 5.5 y no soy un novato porque tengo experiencia Clarion + SQL de 10 años.

Otra opción es hacer:
Archivo{PROP:SQL}=' Select TOP 1 Campo_Identity From Tabla Order by CampoIdentity desc'
NEXT(Archivo)
El problema es que si antes del Select alguien te metió otro insert, el valor devuelto no es el de tu Identity.
Lo mejor sería hacer: un Select SCOPE_IDENTITY

Tené en cuenta lo siguiente.... (tomado de la ayuda de SQL Server 2000)

Las funciones @@IDENTITY, SCOPE_IDENTITY e IDENT_CURRENT se parecen en que devuelven el último valor insertado en la columna IDENTITY de una tabla.

@@IDENTITY y SCOPE_IDENTITY devolverán el último valor de identidad generado en una tabla en la sesión actual. No obstante, SCOPE_IDENTITY sólo devuelve el valor en el alcance actual; @@IDENTITY no se limita a un alcance específico.

IDENT_CURRENT no está limitado por el alcance y la sesión; se limita a una tabla especificada. IDENT_CURRENT devuelve el valor de identidad generado para una tabla específica en cualquier sesión y cualquier alcance. Para obtener más información, consulte IDENT_CURRENT.

El alcance de la función @@IDENTITY es el servidor local en el que se ejecuta. Esta función no puede aplicarse a servidores remotos o vinculados. Para obtener un valor de identidad en un servidor distinto, ejecute un procedimiento almacenado en ese servidor remoto o vinculado y haga que el procedimiento almacenado, que se ejecuta en el contexto del servidor remoto o vinculado, recopile el valor de identidad y lo devuelva a la conexión que lo llama en el servidor local.

Ejemplos
Este ejemplo inserta una fila en una tabla con una columna de identidad y utiliza @@IDENTITY para mostrar el valor de identidad empleado en la nueva fila.

INSERT INTO jobs (job_desc,min_lvl,max_lvl)
VALUES ('Accountant',12,125)
SELECT @@IDENTITY AS 'Identity'

Salu2, Mauro.
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
sin imagen de perfil

RE:Problema para Obtener Identity con SQLServer 20

Publicado por isaac flores (54 intervenciones) el 11/06/2010 18:14:35
Muchas Gracias Mauro por la respuesta.

Después de aventarme un clavado en lo profundo de la red, encontré otras soluciones y comentarios. Lo resolví de otra manera, al parecer la versión de motor que tengo tiene ese pequeño problema jejeje

Pero voy a realizar la prueba como la pusiste al principio, que seria lo más natural y sencillo.
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
sin imagen de perfil

RE:Problema para Obtener Identity con SQLServer 20

Publicado por Victor Medina (4 intervenciones) el 08/11/2014 01:05:52
Que tal

Tengo el mismo Problema,, pero al Usar Traansacciones

Me Marca Error 80 al Leer el Next

Alguna ayuda???
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