FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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. saludos.... PD. Utilizo Delphi 6 y Firebird 1.5 y el store procedure lo esto creando con IBExpert. |
#2
|
|||
|
|||
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. |
#3
|
|||
|
|||
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 |
#4
|
||||
|
||||
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... |
#5
|
||||
|
||||
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:
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! Última edición por Héctor Randolph fecha: 09-05-2005 a las 21:22:35. |
#6
|
||||
|
||||
hola HECTOR RANDOLPH...
muchas gracias ya habia hecho una chapuza para obtener el id, pero la verdad con tu indicación anduvo perfecto... nuevamente muchisimas gracias... saludos... |
|
|
|