[Lazarus-es] obtener id recién grabado

Ismael L. Donis Garcia ismael en citricos.co.cu
Mie Dic 19 18:53:20 CET 2012


Exacto debes usar la función returning de firebird.

Te pongo de ejemplo SP textual que tengo en una BD:

SET TERM ^ ;
CREATE PROCEDURE P_ENC_SAL (
    INT_IDAC INT_NNULL,
    INT_IDA INT_NNULL,
    INT_NUM INT_NNULL,
    DAT_FECHA DAT_NNULL,
    VCH_FACTURA VCH_11_NULL,
    VCH_RECIB VCH_30_NULL,
    VCH_TRANSP VCH_30_NULL,
    VCH_CLAVE VCH_2_NNULL,
    INT_USU INT_NNULL )
RETURNS (
    INT_SAL INT_NULL,
    INT_IDS INT_NULL )
AS
BEGIN
  /* Procedimiento para registrar el encabezado de los vales de salida */
  insert into vteano (idac, ida, num, fecha, factura, recib, transp, clave, iduv) 
      values (:int_idac, :int_ida, :int_num, :dat_fecha, :vch_factura, :vch_recib, :vch_transp, :vch_clave, :int_usu) returning idea into :int_ids;
  int_sal = row_count;
  suspend;
END^
SET TERM ; ^

El campo llave de la tabla se llama idea

Saludos
=========
|| ISMAEL ||
=========
  ----- Original Message ----- 
  From: Martin Gomez 
  To: Spanish version of Lazarus List 
  Sent: Wednesday, December 19, 2012 9:18 AM
  Subject: Re: [Lazarus-es] obtener id recién grabado


  para cada base de datos hay una función (distinta en cada caso) que te devuelve el valor del último id automático utilizado.


  aparentemente, en firebird la forma mas sencilla es ejecutar el INSERT con un RETURNING al final, en vez de Query.ExecSQL utilizas Query.Open y ya tenes el resultado.


  http://www.firebirdfaq.org/faq243/






  2012/12/19 Paola Bruccoleri <pbruccoleri en adinet.com.uy>

    Hola todos..
    quizás el asunto no es muy claro, trataré de explicar lo que quiero lograr.

    Tengo un form donde debo capturar unos datos que se grabarán en una tabla1 y a su vez capturar registros complementarios a esos datos (1 o más) que serán grabados en una tabla2.
    A la hora de grabar, tabla1 obtendrá su id en forma automática, pero debo usar ese mismo id para grabar los registros complementarios a ese en tabla2.
    Uso componentes zeos y firebird.
    Puedo usar un store procedure, pero no se si se le puede pasar por ej un array como parámetro (que serían los registros que irán a tabla2)
    Para que tengan una idea, lo asociaré a la idea clásica de una factura y sus detalles, donde el id de factura será el mismo obviamente en el maestro y en el detalle.

    Agradezco cq idea
    muchas gracias!




    _______________________________________________
    Lazarus-es mailing list
    Lazarus-es en lists.lazarus.freepascal.org
    http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es






  -- 

  Try not to become a man of success but rather to become a man of value. Albert Einstein


------------------------------------------------------------------------------


  _______________________________________________
  Lazarus-es mailing list
  Lazarus-es en lists.lazarus.freepascal.org
  http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20121219/c036e443/attachment-0002.html>


More information about the Lazarus-es mailing list