Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-10-2017
botones67 botones67 is offline
Miembro
 
Registrado: may 2003
Posts: 104
Poder: 0
botones67 cantidad desconocida en este momento
Hola compañeros.
Supondo que tendrás un tigger before insert.
Yo además tengo un procedimiento almacenado que pasa a una variable antes del Post o de ApplyUpdates en nuevo valor generado por el generador al lado del servidor luego con ese
valor sería fácil pasarlo a otra tabla.
// lado del ejecutable antes de post o ApplyUpdates
Código SQL [-]
datos.modulodb.proce.ExecProc;
      datos.modulodb.Cliente_Maestro.FieldByName('id').AsInteger := datos.modulodb.PROCE.ParamByName('CODD3').AsInteger;
// lado del servidor procedimiento almacanedo
Código SQL [-]
CREATE PROCEDURE NUEVO
      RETURNS( CODD3 INTEGER)
      AS
        BEGIN
          CODD3=GEN_ID(MAESTRO_ID_GEN,1);
          SUSPEND;
       END


Un saludo y suerte.
Responder Con Cita
  #2  
Antiguo 13-03-2018
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Sí, usa la función GetLastAutoGenValue con FDConnection

Te indicará el número del Generador en la actualidad, como te han dicho ya.
Código Delphi [-]
Var nGen : Integer;
Begin
  nGen :=  DataModuleX.FDConnection1.GetLastAutoGenValue('Gen_aTable')
Me pregunto si existe una función parecida para el caso de haber definido un campo IDentificador con Firebird 3.0 mediante:
ID Integer Generated by Default as Identity Primary Key;
Saludos,
bulc
Responder Con Cita
  #3  
Antiguo 14-03-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
¿alguien ha conseguido obtener el ultimo ID desde in INSERT/SELECT??

Cita:
Empezado por bulc Ver Mensaje
Te indicará el número del Generador en la actualidad, como te han dicho ya.
Código Delphi [-]
Var nGen : Integer;
Begin
  nGen :=  DataModuleX.FDConnection1.GetLastAutoGenValue('Gen_aTable')
Me pregunto si existe una función parecida para el caso de haber definido un campo IDentificador con Firebird 3.0 mediante:
ID Integer Generated by Default as Identity Primary Key;
Saludos,
bulc
Responder Con Cita
  #4  
Antiguo 14-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿No te sirven las respuestas que han dado?
Responder Con Cita
  #5  
Antiguo 14-03-2019
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Sí, gracias

Lo daba por terminado. Los siento.
Responder Con Cita
  #6  
Antiguo 14-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por bulc Ver Mensaje
Lo daba por terminado. Los siento.
Pero tú no eres quien ha preguntado
Responder Con Cita
  #7  
Antiguo 15-03-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Si en IBEXPERT ejecuto el siguiente codigo

Código SQL [-]
insert into tabla
(campo)
values
('prueba')
returning id

Inserta y me devuelve el ID que es un AUTOINCREMENT IDENTITY COLUMN

Ahora si lo ejecuto desde un FDQUERY

Tengo el siguiente error:

[FireDAC][Phys][FB]Dynamic SQL Error
SQL error code = -104
Token unknown - line 5, column 1
returning


Soy nuevo con firebird y estoy aprendiendo muchas cosas aún.

Con Sybase Advantage Database lo hacía de forma similar, pero en lugar del returning ejecutaba SELECT LASTAUTOINC( STATEMENT ) as id from tabla
Responder Con Cita
  #8  
Antiguo 15-03-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Bluc

¿como hiciste para obtener el campo Identity?

Ya que por lo visto esa función GetLastAutoGenValue sólo es para Generators, o bien a mi no me anda.

Si la ejecuto me da error

Código Delphi [-]
[FireDAC][Phys][FB]invalid request BLR at offset 55
generator TABLA is not defined

Cita:
Empezado por bulc Ver Mensaje
Te indicará el número del Generador en la actualidad, como te han dicho ya.
Código Delphi [-]
Var nGen : Integer;
Begin
  nGen :=  DataModuleX.FDConnection1.GetLastAutoGenValue('Gen_aTable')
Me pregunto si existe una función parecida para el caso de haber definido un campo IDentificador con Firebird 3.0 mediante:
ID Integer Generated by Default as Identity Primary Key;
Saludos,
bulc
Responder Con Cita
  #9  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por amadis Ver Mensaje
Bluc
¿como hiciste para obtener el campo Identity?
Ya que por lo visto esa función GetLastAutoGenValue sólo es para Generators, o bien a mi no me anda.
Si la ejecuto me da error
¿Qué código estás usando? ¿y cuál es el error?
Responder Con Cita
  #10  
Antiguo 15-03-2019
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
No existe esa función

si no se ha usado el sistema de autoincremento mediante Trigger y Generador.
Cabe pensar que usando Firebird 3.0 sería más cómodo usar un Incremento de contador automático. Bueno, claramente es posible. Pero con el sistema de Trigger y Generador se tiene esa ventaja.
Yo me he decantado por usar esa última modalidad.
Desconozco si en caso de usar el novedoso sistema automático de Firebird 3.0, se puede recoger el último número generado mediante esa función GetLastAutoGenValue.
¿Alguien lo sabe?
Responder Con Cita
  #11  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por bulc Ver Mensaje
si no se ha usado el sistema de autoincremento mediante Trigger y Generador.
Cabe pensar que usando Firebird 3.0 sería más cómodo usar un Incremento de contador automático. Bueno, claramente es posible. Pero con el sistema de Trigger y Generador se tiene esa ventaja.
Yo me he decantado por usar esa última modalidad.
Desconozco si en caso de usar el novedoso sistema automático de Firebird 3.0, se puede recoger el último número generado mediante esa función GetLastAutoGenValue.
¿Alguien lo sabe?
Eso está disponible desde firebird 2, creo recordar.
Otra cosa distinta es que los componentes que está usando permita hacer uso de ello.
De todas formas, si no pone el código que está usando, ni da más información, es difícil ayudar.
Responder Con Cita
  #12  
Antiguo 15-03-2019
amadis amadis is offline
Miembro
 
Registrado: may 2005
Ubicación: San José, Colón, Entre Ríos, Argentina
Posts: 315
Poder: 20
amadis Va por buen camino
Utilizo Firebird 3, y el campo clave ID es un AUTOINCREMENT IDENTITY COLUMN

El código que utilizo, lo puse antes arriba, es el siguiente, lo ejecuto en un FDQuery

Código SQL [-]
insert into tabla
(campo)
values
('prueba')
returning id


Cita:
Empezado por Casimiro Notevi Ver Mensaje
Eso está disponible desde firebird 2, creo recordar.
Otra cosa distinta es que los componentes que está usando permita hacer uso de ello.
De todas formas, si no pone el código que está usando, ni da más información, es difícil ayudar.
Responder Con Cita
  #13  
Antiguo 15-03-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.055
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por amadis Ver Mensaje
Utilizo Firebird 3, y el campo clave ID es un AUTOINCREMENT IDENTITY COLUMN
El código que utilizo, lo puse antes arriba, es el siguiente, lo ejecuto en un FDQuery
Código SQL [-]insert into tabla (campo) values ('prueba') returning id
Vale, entonces ese es el código que usas, bien.
Responder Con Cita
  #14  
Antiguo 13-03-2018
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Cita:
Empezado por botones67 Ver Mensaje
Hola compañeros.
Supondo que tendrás un tigger before insert.
Yo además tengo un procedimiento almacenado que pasa a una variable antes del Post o de ApplyUpdates en nuevo valor generado por el generador al lado del servidor luego con ese
valor sería fácil pasarlo a otra tabla.
// lado del ejecutable antes de post o ApplyUpdates
Código SQL [-]
datos.modulodb.proce.ExecProc;
      datos.modulodb.Cliente_Maestro.FieldByName('id').AsInteger := datos.modulodb.PROCE.ParamByName('CODD3').AsInteger;
// lado del servidor procedimiento almacanedo
Código SQL [-]
CREATE PROCEDURE NUEVO
      RETURNS( CODD3 INTEGER)
      AS
        BEGIN
          CODD3=GEN_ID(MAESTRO_ID_GEN,1);
          SUSPEND;
       END


Un saludo y suerte.
No entiendo cómo se ejecuta el SP 'NUEVO' en las dos primeras líneas. ¿Puedes ampliarlo, por favor?
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
FireDAC - Problema con relación Maestro/detalle y columna AutoInc jarlos Conexión con bases de datos 4 01-06-2016 05:32:27
Asignar el valor de un campo AutoInc definido en un tirgger_BI KAYO Firebird e Interbase 1 23-09-2008 17:47:05
campo autoinc teclilla Tablas planas 3 14-06-2008 02:10:52
obtener el valor de un campo (Tquery) Yoli Conexión con bases de datos 5 08-04-2005 22:07:05
Recuperar autoinc. después de Insert to aig MS SQL Server 2 22-09-2004 10:41:28


La franja horaria es GMT +2. Ahora son las 00:26:33.


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
Copyright 1996-2007 Club Delphi