La Web del Programador: Comunidad de Programadores
 
    Pregunta:  63086 - @@IDENTITY EN MYSQL
Autor:  Pitu Seculi
Hola buenas tardes!! De primeras deciros que muchas gracias por leerme aunque no podais ayudarme ;)

Estoy migrando un programa hecho en PB + Sybase a PB + MySQL. He conseguido solucionar todos los problemas que me ha dado, pero ahora me encuentro un poco estancado.

Resulta que en muchos sitios (versión Sybase) hace la siguiente consulta:
SELECT @@identity INTO :variable FROM dummy;

Ahora quiero simular esto con MySQL.

Según he visto, esto lo que hace es recuperar el ultimo ID insertado en un registro. He leido que equivale al LAST_INSERT_ID() de MySQL, pero PB se queja al usar esta instrucción ya que me dice que no lo reconoce (que no está declarada).

En otro sitio he leido que yendo a la datawindow y especificando la columna "Identity Column" ya funcionaría, pero no es lo que me interesa. El código que tengo que pasar a MySQL es:
-->
(...)
INSERT INTO poblacion (pob) VALUES (:sPob);
if SQLCA.SQLCode = 0 then
SELECT @@identity INTO :lCodPob FROM dummy;
if SQLCA.SQLCode = 0 then
INSERT INTO codigo_postal (codpos, codpob) VALUES (:sCodPos, :lCodPob);
if SQLCA.SQLCode = 0 then
SELECT @@identity INTO :lCodIde FROM dummy;
if SQLCA.SQLCode = 0 then
dsCodPos.Retrieve()
SetItem(lFila, "codideper", lCodIde)
end if
end if
end if
end if
(...)
<--

Alguien sabe como puedo hacer esto mismo en MySQL y PB 5.0?? ya sé que es una versión antigua, pero es la que usan aquí...

Muchísimas gracias!! :)

  Respuesta:  Daniel Rodas
Hola

Por si aun te sirve, te sugiero que utilices Stored Procedures y allí en la base de datos hagas todo tu proceso y en power solo llames a un SP principal que contenga los demas.

Tendrias que poner parametros de retorno en tus SP para que al final en la llamada hagas un fetch y captures el valor que deseas y hagas el retrieve y luego el setitem (por cierto te conviene mejor cambiar el setitem por: dsCodPos.object.codideper[lFila] = lCodIde)

Saludos