Como saber cual es el ultimo Identity en SQL Server insertado con FoxyDB

268 views
Skip to first unread message

Juan Cueli

unread,
Apr 3, 2021, 11:13:16 AM4/3/21
to Comunidad de Visual Foxpro en Español
Pregunta para quienes tengan experiencia usando foxyDB. Estoy usando específicamente la versión 3.01

Estoy intentando hacer lo siguiente:
  1. Utilizo la función query de FoxyDB para traer una tabla de SQL Server vacía a la que luego le voy a insertar un valor
  2. Realizo un insert mediante sentencia de FoxPro (nada fuera de los normal un insert normal de VFP)
  3. Luego procedo a grabar en la tabla de SQL usando las funciones CursorChanges, para saber si realmente hay cambios, Update, para que actualice el cambio en sql, y Commit, para que aplique finalmente el cambio en sql

Hasta aquí todo bien, mi problema es que necesito saber cual fue el identity que genero SQL al momento de aplicar el commit. Estoy viendo que FoxyDb tiene las siguientes propiedades:
  • id_last – Número del Ultimo Id Registrado después de un Insert Into
  • id_Active – Si se esta recuperando el Ultimo ID para evitar una desconexión.
  • id_Code – Numero de código único generado
  • id_name – Nombre del Campo ID Autoincremental Primary Key ( “id” default)
El problema es que no he logrado hacer que con ninguna de esta me retorne el identity creado. FoxyDb por defecto usa el nombre id para su identity, pero en mi caso no se llaman así.
También vi las siguientes funciones
  • Id – Obtener el Ultimo ID al insertar un Registro Nuevo, el valor se obtiene en la propiedad id_Last
  • Code – Obtener Código Único (Correlativo)
  • UUID – Generar valor UUID (Identificador Universal único)
Pero di igual manera tampoco me funcionan. También intente hacer un refresh pero al final el sistema es multiusuario y nada me asegura que cuando realice el refresh, ese valor coincida con el ultimo generado por el usuario que inserto el registro.
En resumen, quiero saber cual es el Identity que se generó al momento de insertar la información en la Base de Datos de Sql

Mas abajo les envio un pequeño ejemplo de lo que intento hacer
  • MiTabla: Nombre de la tabla de SQL
  • Campo1 y Campo2: Campos de la tabla de SQL
  • lEsNuevo: Lo uso para saber si se esta insertando un nuevo campo o si lo estoy actualizando (lo uso por lo general para otros propositos)
  • IdCampo: Nombre del campo que es identity Column y es AutoIncrementable

oConn = Newobject("FoxyDb","FoxyDb.prg")
lnOk = oConn.Connect()

If lnOk
lEsNuevo = .T.
oConn.Query("select * from MiTabla where 1 = 2","MiTabla","MiTabla")
oConn.CursorEdit("MiTabla")

Insert Into MiTabla(campo1,;
campo2);
values("Valor1",;
"Valor2")

If oConn.CursorChanges("MiTabla")
If oConn.Update("MiTabla","IdCampo")
If oConn.Commit()
If lEsNuevo
oConn.Refresh("MiTabla")
oConn.CursorEdit("MiTabla")
Endif
Endif
Endif
Endif
Endif

Juan Cueli

unread,
Apr 3, 2021, 11:46:43 AM4/3/21
to Comunidad de Visual Foxpro en Español
Ya descubir lo que pasaba, me falto enviarle un tercer parametro a la funcion update en .t. para que me pueda retornar el id_last.

If oConn.CursorChanges("MiTabla")
If oConn.Update("MiTabla","IdCampo",.t.)
                lnLastId = oConn.id_last
If oConn.Commit()
If lEsNuevo
oConn.Refresh("MiTabla")
oConn.CursorEdit("MiTabla")
Endif
Endif
Endif
Endif
Reply all
Reply to author
Forward
0 new messages