Obtener el LAST ID INSERTED de MySQL con VFP

1,182 views
Skip to first unread message

Allan Raúl Acuña

unread,
Sep 8, 2014, 6:04:14 PM9/8/14
to publice...@googlegroups.com
Estimados,

Alguno de ustedes sabe como obtener el ultimo ID insertado de un campo Autoincremental en MySQL?

Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica

Programas ToP

unread,
Sep 8, 2014, 6:09:46 PM9/8/14
to publice...@googlegroups.com
LAST_INSERT_ID()
Saludos cordiales

ProgramasToP S.A.S.
Barranquilla - COLOMBIA

Antes de imprimir este correo piensa en la contribución que puedes hacer al medio ambiente.
Please consider your environmental responsibility and commitment before printing.

Allan Raúl Acuña

unread,
Sep 8, 2014, 6:11:10 PM9/8/14
to publice...@googlegroups.com
Si mi estimado, entiendo que esa es la función, solo que cuando la invoco me genera el valor en CERO.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Mon, 8 Sep 2014 17:09:35 -0500
From: progra...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP

Programas ToP

unread,
Sep 8, 2014, 6:12:40 PM9/8/14
to publice...@googlegroups.com
Debes usarlo inmediatamente después del INSERT.
Lo razonable es utilizarlo en la misma TRANSACTION

START TRANSACTION
    INSERT
    SELECT LAST_INSERT_ID()
END TRANSACTION

Saludos cordiales

ProgramasToP S.A.S.
Barranquilla - COLOMBIA

Antes de imprimir este correo piensa en la contribución que puedes hacer al medio ambiente.
Please consider your environmental responsibility and commitment before printing.

Armando Rodríguez B.

unread,
Sep 8, 2014, 6:13:48 PM9/8/14
to publice...@googlegroups.com

Carlos Salcedo

unread,
Sep 8, 2014, 6:14:44 PM9/8/14
to visual fox
Hola allan

un colega tuvo el mismo problema y aca le dieron la solucion


Saludos
Carlos


Date: Mon, 8 Sep 2014 17:12:30 -0500

Allan Raúl Acuña

unread,
Sep 8, 2014, 6:14:55 PM9/8/14
to publice...@googlegroups.com
Voy a probarle y te cuento como me fué, gracias.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Mon, 8 Sep 2014 17:12:30 -0500

Christian López Gómez

unread,
Sep 8, 2014, 6:19:17 PM9/8/14
to publice...@googlegroups.com
usa esta esta funcion para saber cual es el siguiente numero consecutivo mi estimado:

SELECT Table_name,Auto_Increment FROM INFORMATION_SCHEMA.TABLES WHERE Table_name = 'Nombre_Tabla';


saludos


--
Atentamente.
Ing. Christian López Gómez
Jefe de Sistemas
MSN:   christi...@hotmail.com
           christi...@gmail.com

Depto. Sistemas
P.D. "Un buen programador nunca muere solo se pierde en un proceso"

Allan Raúl Acuña

unread,
Sep 8, 2014, 6:41:05 PM9/8/14
to publice...@googlegroups.com
Muchas gracias mi estimado Christian.

También probaré y les comento por aquí, para que quede soportado.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Mon, 8 Sep 2014 17:19:10 -0500

Subject: Re: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP

Antonio Meza

unread,
Sep 8, 2014, 8:04:59 PM9/8/14
to publice...@googlegroups.com
En mysql y Mariadb el ultimo ID insertado esta protegido por la conexión (hanled), es decir, si hay varios usuarios conectados al servidor mysql, cuando envías un Select LAST_INSERT_ID te devolverá el que pertenece a tu conexión y no el ultimo que haya generado otro usuario conectado aun cuando hayan realizado inserciones en la tabla.

Ahora bien solo funciona el LAST_INSERT_ID si previamente enviaste un INSERT INTO que es el que afecta a los campos ID autoincrementables, si enviaste un Update o un Select o un Delete, pues LAST_INSERT_ID siempre va hacer 0 (cero) pero si envías un INSERT pues el valor de LAST_INSERT_ID sera afectado.

El comando SQL seria el siguiente 

SELECT LAST_INSERT_ID() as id

EL "as" es para que el nombre del campo no sea LAST_INSERT_ID, si el nombre del cursor devuelto le pones "Ultimo" entonces lo puedes mostrar así

wait windows ultimo.id

NOTA: Recuerda que tienes que enviar previamente un Insert into y después enviar otra consulta pero ya un select para obtenerlo.

saludos
Antonio Meza

Allan Raúl Acuña

unread,
Sep 8, 2014, 8:22:05 PM9/8/14
to publice...@googlegroups.com
Gracias Antonio por la explicación, aún no me siento a ver este tema, pero probaré todo.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Mon, 8 Sep 2014 17:04:59 -0700
From: solv...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Re: Obtener el LAST ID INSERTED de MySQL con VFP

Antonio Meza

unread,
Sep 8, 2014, 9:21:02 PM9/8/14
to publice...@googlegroups.com
Si vas a trabajar con mysql checa el código de la librería DBVFP.prg o la puedes usar jejej

saludos

Allan Raúl Acuña

unread,
Sep 9, 2014, 1:24:54 PM9/9/14
to publice...@googlegroups.com
Gracias Antonio.

Si he visto tu DBVFP, actualmente trabajo con una que yo mismo me desarrollé, también la tengo encapsulada en un PRG, adicionalmente le agregué rutinas para trabajar CursorAdapter.

Tengo en mente publicarla.

 
Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Mon, 8 Sep 2014 18:21:02 -0700
From: solv...@gmail.com
To: publice...@googlegroups.com
Subject: Re: [vfp] Re: Obtener el LAST ID INSERTED de MySQL con VFP

Christian López Gómez

unread,
Sep 9, 2014, 1:27:38 PM9/9/14
to publice...@googlegroups.com
mi estimado si te sirvio el codigo que te pase, este te dice el numero siguiente del autoincremental de la tabla.


saludos

Allan Raúl Acuña

unread,
Sep 19, 2014, 1:43:03 PM9/19/14
to publice...@googlegroups.com
Hola estimados,

Probé todas las sugerencias de los colegas y la que me resultó para obtener al 100% el ultimo ID insertado en una de las tablas, fué la que me dió christian.vfox:

Abajo les comparto el código:
*----------------------------------------
* OBTENER EL ULTIMO ID INSERTADO

lcSQL = "SELECT Table_name,AUTO_INCREMENT AS cod_marca FROM INFORMATION_SCHEMA.TABLES WHERE Table_name = 'marcas';"

lnCantExp = SQLConsulta(lcSQL, 'marcas_incremental')

  
Select marcas_incremental

Calculate Max(marcas_incremental.cod_marca) To lnMax_cod_marca
Use In marcas_incremental

m.cod_marca = Iif(Vartype(lnMax_cod_marca)='C', Int(Val(lnMax_cod_marca)), Int(lnMax_cod_marca))
*----------------------------------------

Como podrán ver el cursor creado por la consulta al SCHEMAS, le calculo el maximo porque logre observar que siempre me traia algunos campos NULL y entre ellos el ID insertado y confirmado, entonces calculo el MAXIMO para asegurarme del ID correspondiente. Obviamente como viene como texto lo convierto y listo.

Si alguno de ustedes tiene algo más optimizado, la comunidad les agradece la colaboración.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



From: allan...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP
Date: Mon, 8 Sep 2014 22:40:59 +0000

Antonio Meza

unread,
Sep 19, 2014, 1:56:48 PM9/19/14
to publice...@googlegroups.com
hola Allam!!

No se si estas confundiendo o tal vez no te entiendo lo que necesitas.

Porque tu titulo dice obtener el ultimo ID insertado en mysql, y en la forma que esta haciendo al parecer esta obteniendo el valor actual para el campo autoincremental, lo cual en un sistema multiusuario este no sera valido y te va a generar problemas.

Como te comente, en el caso de Mysql o MariaDB cuando envías un INSERT INTO, si consultas el valor de LAST_INSERT_ID() te devolverá el ultimo ID que hayas agregado para esta conexión, es decir si hay 5 usuarios y cada quien envió un INSERT INTO entonces para cada usuario el valor de LAST_INSERT_ID() sera diferente según el que le haya tocado y esta protegido por tu conexión, es mas si envias en diferentes momentos LAST_INSERT_ID() te devolvera el mismo valor salvo que hayas enviando antes otro INSERT INTO

En cambio si usas MAX() y te devolvió 10 pero un segundo después un usuario inserto un registro pues ya sera 11 y no 10, en cambio con LAST_INSERT_ID() asi miles de usuarios inserten registros a ti siempre te devolverá 10 porque ese lo registraste desde tu conexión.

saludos
Antonio Meza

Allan Raúl Acuña

unread,
Sep 19, 2014, 2:16:18 PM9/19/14
to publice...@googlegroups.com
Hola Antonio.

Si de hecho ya en líneas previas ya existe un INSERT, el cual lo creo con un SP, al cual solo le paso las variables a insertar. También el campo Autoincremental está creado en la tabla.

Ya hice las pruebas con varios usuarios y se generan bien los ID.

Probé la sugerencia que me distes de enviar la instrucción LAST_INSERT_ID() al final en el SP, pero siempre me retornaba cero el cursor, a lo mejor lo he empleado mal.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Fri, 19 Sep 2014 10:56:48 -0700
From: solv...@gmail.com
To: publice...@googlegroups.com
Subject: Re: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP

Antonio Meza

unread,
Sep 19, 2014, 2:20:46 PM9/19/14
to publice...@googlegroups.com
ahh ok, es que te falto mencionar un pequeño detalle que usas SP jajajaja y es diferente.

saludos
Antonio Meza

Allan Raúl Acuña

unread,
Sep 19, 2014, 2:25:43 PM9/19/14
to publice...@googlegroups.com
Si verdad, es que a veces tenemos el pequeño problema de que asumimos que los Foxceros saben de que estamos hablando, jajajaja.

Estuve investigando como hacerlo  con SP, probé varias cosas y no pude hacer que retornara.

Por ejemplo:

1)
DECLARE _returnVal;

SELECT LAST_INSERT_ID() INTO _returnVal;
SELECT _returnVAL;
------------------------------------------
2)
DECLARE LID int;

SET LID = LAST_INSERT_ID();
------------------------------------------
3)
BEGIN
  INSERT INTO table1(column1, column2) VALUES ('value1', 'value2');
  SET out_param = LAST_INSERT_ID();
END

Siento que seria más óptimo hacerlo con el SP, a lo  mejor me orientas.

Saludos cordiales.


Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Fri, 19 Sep 2014 11:20:46 -0700

Antonio Meza

unread,
Sep 19, 2014, 2:47:50 PM9/19/14
to publice...@googlegroups.com
La verdad nunca eh usado SP, pero como me gusta investigar lo que no se encontré esta pagina igual y te puedas sacar algo bueno.


Veo que en el SP de ejemplo hasta abajo usa un Select que devuelve el nombre con apellido, si le pones SELECT LAST_INSERT_ID() no se si te devuelva el valor.

Otro detalle que vi es que puedes ejecutar el SELECT LAST_INSERT_ID()  dentro de tu SP y luego asignar el valor a una variable igual y es lo que te hace falta, pero debe estar después de INSERT INTO dentro de tu SP.

saludos
Antonio Meza

Allan Raúl Acuña

unread,
Sep 19, 2014, 3:10:07 PM9/19/14
to publice...@googlegroups.com
Gracias Antonio.

Yo no usaba los SP pero algunos procesos me llevaron a usarlos, obviamente trato de hacerlo no muy complicados para que al momento de implementarlos en los otros lenguajes no se me sea un caos reprogramarlos, generalmente para agilizar las consultas me ha servidor mucho y sobre todo para cuando tengo que insertar muchos campos, mandarlos en un CADENA, a veces se puede tornar lento, en cambio si solo pasas las variables al SP es mejor el rendimiento.

Con esto me bajé a muchos usuarios que cuando mandaban a guardar me decian: "Esta m.., es lenta!!!!". ahora se quedan callados, como siempre es de esperar los usuarios solo tienen el valor de criticar.

Seguiré probando con tiempo y calma para hacerlo en el mismo SP.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Fri, 19 Sep 2014 11:47:50 -0700

Víctor Hugo Espínola Domínguez

unread,
Sep 19, 2014, 4:13:33 PM9/19/14
to publice...@googlegroups.com
Lambaré - Paraguay.



Allan Raúl Acuña

unread,
Sep 19, 2014, 4:45:06 PM9/19/14
to publice...@googlegroups.com
Muchas gracias Victor,

Probaré y compartiré la experiencia.


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Fri, 19 Sep 2014 16:13:25 -0400

Subject: Re: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP

Carlos Salcedo

unread,
Sep 19, 2014, 4:49:40 PM9/19/14
to visual fox
Esto hago dentro de los procedimientos almacenados
y nunca me ha fallado

select max(tabla)+1  into consecutivo from tabla ;

if  consecutivo is null then
set consecutivo = 1 ;

end if  ;

saludos
Carlos

Subject: RE: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP
Date: Fri, 19 Sep 2014 18:25:39 +0000

Rafael Mellado

unread,
Sep 19, 2014, 6:33:49 PM9/19/14
to publice...@googlegroups.com
Hola Raúl


Estoy utilizando la función Ukey para la creación del ID.

Esta función por defecto te devuelve una clave c(8), a esta cadena le puedes añadir el número de ordenador / usuario.

En la actualidad estoy trabajando con id c(10) y hasta la fecha no he tenido problemas, en la red hay varios artículos que hablan de ello.

Sl2

Allan Raúl Acuña

unread,
Sep 19, 2014, 6:35:23 PM9/19/14
to publice...@googlegroups.com
Hola Carlos,

En este caso ya el ID ya fue insertado y lo que se necesita es recuperar ese ID, veo que le estas sumando 1 ?


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



To: publice...@googlegroups.com
Subject: RE: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP
Date: Fri, 19 Sep 2014 15:49:37 -0500

Carlos Salcedo

unread,
Sep 19, 2014, 9:05:56 PM9/19/14
to visual fox
Esta funcion sirve porque eres tu quien le manda el consecutivo, y le sumo uno porque cuando la tabla
no tiene registros el valor es null entonces hago que arranque en uno.

Si quieres mándame la estructura de la tabla yo te hago el procedimiento lo pruebas
y me cuentas


From: allan...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP
Date: Fri, 19 Sep 2014 22:35:14 +0000

Allan Raúl Acuña

unread,
Sep 22, 2014, 11:16:40 AM9/22/14
to publice...@googlegroups.com
Gracias Carlos.

Puede ser cualquier estructura de tabla, basta solo tener un campo autoincremental.

marcas
   cod_marca = autoincremental
   denominacion= c(75)


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



From: caros...@hotmail.com
To: publice...@googlegroups.com
Subject: RE: Resuelto: [vfp] Obtener el LAST ID INSERTED de MySQL con VFP
Date: Fri, 19 Sep 2014 20:05:50 -0500

Gustavo Rojo

unread,
Mar 27, 2015, 4:23:25 PM3/27/15
to publice...@googlegroups.com
Hola Allan!

Probaste esta función de VFP:

GETAUTOINCVALUE(0)

Yo la uso y funciona muy bien, luego del update de la tabla, con esa función te devuelve el ultimo id generado.

Saludos!

Allan Raúl Acuña

unread,
Mar 27, 2015, 4:29:26 PM3/27/15
to publice...@googlegroups.com
Hola, como la mandas a llamar?


Saludos cordiales.

Lic. Allan Raúl Acuña
Analista Programador
msn= allan...@hotmail.com
skype= NicEasySoft
            +(505) 8 999 8950
Managua, Nicaragua
Centroamérica



Date: Fri, 27 Mar 2015 13:23:25 -0700
From: gusta...@gmail.com

Antonio Meza

unread,
Mar 27, 2015, 4:50:30 PM3/27/15
to publice...@googlegroups.com
Pero esta función es para DBF no para Servidores de bases de datos.

saludos
Antonio Meza
Reply all
Reply to author
Forward
0 new messages