Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Como obtener valor de Campo Autoincremento... (https://www.clubdelphi.com/foros/showthread.php?t=21151)

vic_ia 09-05-2005 01:57:42

Como obtener valor de Campo Autoincremento...
 
hola...

espero me puedan ayudar con esto...

tengo una tabla de en la que almaceno "mensajes", la clave principal es un campo Autoincremento (los demas campos son para guardar, de quien vino, cuando se recibio, etc), para esto me cree en generador y el correspondiente trigger (before insert), al hacer un insert con los valores de los demas campos se realiza el proceso de manera correcta; el detalle es que necesito obtener el valor del campo Autoincremento que le fue asignado a tal registro; por lo que he ledio lo adecuado seria colocar la sentencia de Insert en un procedimiento, llamar a este procedimiento con los parametros adecuados, y obtener en un parametro de retorno el valor del campo Autoincremento pero ahi es donde no se como obtener ese valor; el procedimiento es como sigue..

Código:

CREATE PROCEDURE NEW_PROCEDURE (PMENSAJE VARCHAR(100) CHARACTER SET ISO8859_1)
RETURNS (NUEVO_ID INTEGER)
AS
begin
  INSERT INTO MENSAJES(MENSAJE) VALUES (:PMENSAJE);
  NUEVO_ID = MENSAJES.id;
  suspend;
end

y me da el siguiente Error :

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Column unknown.
At line 8, column 23.

la tabla si tiene un campo ID que de hecho es el campo Autoincremento, he cambiado MENSAJES.id por GEN_MENSAJES_ID pero igual me dice que la columna no la conoce; espero alguien me pueda orientar...

saludos....

PD. Utilizo Delphi 6 y Firebird 1.5 y el store procedure lo esto creando con IBExpert.

Toñico 09-05-2005 09:30:46

Hola vic_ia,

Puedes usar una secuencia SQL para recuperar el máximo valor del campo autoincrementado. Justo después de hacer el insert lanzas una secuencia parecida a: "Select max(id) as Valor_Mas_alto from mensajes".

El problema de esto es que haya mas de una aplicación grabando registros, si estas trabajando en red por ejemplo. Si no es así, te puede servir.

Un saludo.

lgarcia 09-05-2005 14:43:02

Como obtener el valor de campo autoincremento
 
Hola

Por lo que veo trabajas con SQL2000 yo tenia un caso similar al tuyo y en el procedimiento almacenado donde hago la insercion utilizo la siguiente sentencia

SELECT @id = @@IDENTITY

donde @id es una variable int Output

Espero te ayude.

Saludos
Luis Garcia

_____________________________
La mejor manera de decir es hacer

vic_ia 09-05-2005 17:18:16

hola...

gracias toñico e Igarcia...

toniño, si la forma que comentas es factible el problema como tu mencionas es que se tendran mas de una aplicacion guadando mensajes "al mismo" tiempo...

Igracias, no no trabajo con SQL 2000 sino con Firebird 1.5 y las expresiones que me da no me las reconoce...

sigo tratando de buscarle solucion..

saludos...

Héctor Randolph 09-05-2005 21:15:32

Hola vic_ia !

Veo un problema en lo siguiente, por medio del identificador MENSAJES.ID no puedes obtener el contenido del campo ID; recuerda que dentro de un procedimiento de Firebird solamente cuentas con la sentencia SELECT para obtener los datos contenidos en un campo.

Para corregir tu código te recomiendo lo siguiente:

Código SQL [-]
CREATE PROCEDURE NEW_PROCEDURE (PMENSAJE VARCHAR(100) CHARACTER SET ISO8859_1)
RETURNS (NUEVO_ID INTEGER)
AS
begin
  INSERT INTO MENSAJES(MENSAJE) VALUES (:PMENSAJE);
  NUEVO_ID = GEN_ID([Nombre_generador],0);/*Obtienes el valor actual del generador sin incrementarlo*/
  suspend;
end

Por otra parte si lo que deseas es obtener el valor del generador directamente desde Delphi te recomiendo que leas este hilo:

http://www.clubdelphi.com/foros/show...2152#post82152

Un saludo!

vic_ia 10-05-2005 17:19:42

hola HECTOR RANDOLPH...

muchas gracias :p :p :p

ya habia hecho una chapuza para obtener el id, pero la verdad con tu indicación anduvo perfecto... nuevamente muchisimas gracias...

saludos...


La franja horaria es GMT +2. Ahora son las 02:55:56.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi