Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Duda de Autoincrement firebird (https://www.clubdelphi.com/foros/showthread.php?t=71379)

JAI_ME 15-12-2010 23:22:23

Duda de Autoincrement firebird
 
buenas tardes tengo, un Generador en firebird y un campo integer en una tabla con su propiedad autoincrement habilitada y configurada con dicho generador.

El problema es que no se como hacer para que el usuario al momento de guardar un registro desde una interfaz en delphi me incremente automaticamente este campo; La informacion suministrada por el usuario la guardo, edito y elimino con un TDBnavigator los registros los muestro en componentes TDBEdit.

muchas gracias.

Casimiro Notevi 16-12-2010 00:05:14

El usuario no debe incrementar nada, debe hacerlo la base de datos automáticamente en un trigger o store procedure, o lo ejecutas tú mismo desde el programa delphi.

Cañones 16-12-2010 01:48:02

que componente estás usando para hacer el insert?

Casimiro Notevi 16-12-2010 02:37:55

Cita:

Empezado por Cañones (Mensaje 385109)
que componente estás usando para hacer el insert?

Creo que no te entiendo :confused:

Échale un vistazo a la sección de "Generadores" del libro de Marteens, La cara oculta de delphi.
Lo encontrarás en el ftp del clubdelphi o aquí.

Cañones 16-12-2010 02:42:31

Si usa ZeosLib, DBX, DBExpress...

Casimiro Notevi 16-12-2010 02:55:08

FIBplus.
Pero eso no tiene nada que ver con los generadores.

Cañones 16-12-2010 03:21:24

Si usa IBX, tiene la propiedad GeneratorField donde define el generador y el campo que recibe el valor.
Si usa ZeosLib tiene el componente TZSequence que se enlaza con el generador y el componente que hace el insert. Entonces si usa un TZQuery en la propiedad Sequence se pone el TZSequence y en SequenceField el campo que recibe el valor.
Es menos trabajo y más prolijo que escribir un Trigger o SP.

Saludos.

Casimiro Notevi 16-12-2010 04:40:54

Sí, FIBplus también tiene algo similar, aunque no recuerdo haberlo usado, prefiero dejar a la BD que se encargue de hacerlo mediante un trigger.

Combat-F2D 16-12-2010 07:57:32

la ventaja de los generadores, y en especial que los emplee la BD por si sola, es que no te vas a encontrar con duplicados, a no ser que SI le metas mano externamente al motor de esta; yo personalmente no lo haria, pues ya me he encontrado con mas de una violation por esto

JAI_ME 16-12-2010 14:24:58

Cita:

Empezado por Cañones (Mensaje 385115)
Si usa IBX, tiene la propiedad GeneratorField donde define el generador y el campo que recibe el valor.
Si usa ZeosLib tiene el componente TZSequence que se enlaza con el generador y el componente que hace el insert. Entonces si usa un TZQuery en la propiedad Sequence se pone el TZSequence y en SequenceField el campo que recibe el valor.
Es menos trabajo y más prolijo que escribir un Trigger o SP.

Saludos.

buenos dias, utilizo los componentes IB y como les comente tengo un TDBnavigator configurado a una tabla llamada producto (IBTABLE) pero no logro incrementar automaticamente el valor del registro, en que parte aparece la propiedad GeneratorField no la he podido encontrar.

El insert lo hace el dbnavigator.
muchas gracias

Cañones 16-12-2010 21:40:22

Cita:

Empezado por Casimiro Notevi (Mensaje 385117)
Sí, FIBplus también tiene algo similar, aunque no recuerdo haberlo usado, prefiero dejar a la BD que se encargue de hacerlo mediante un trigger.

No los conozco, igual cada uno lo hace a su manera. :D
La ventaja de usar los componentes y por la cual deje de usar los trigger es que con el componente puedo saber cual es el valor generado antes de hacer el insert.

Cañones 16-12-2010 21:52:35

Hola, justo el TIBTable no tiene esa propiedad, tendrías que usar un trigger. Ahora no tengo uno como para pasarte de ejemplo. Pero cuando llegue a mi casa te subo un ejemplo. En dos horas mas o menos.
Saludos.

Cañones 17-12-2010 01:15:05

Acá va un ejemplo de trigger

Código SQL [-]
SET TERM ^ ;
CREATE TRIGGER TG_NRO_ARTICULO FOR ARTICULOS ACTIVE
BEFORE INSERT POSITION 0
AS 
BEGIN 
  IF (NEW.CODIGO IS NULL) THEN
    NEW.CODIGO = GEN_ID (NRO_ARTICULO,1);
END^
SET TERM ; ^

Lo que hace es, si codigo es nulo, genera un valor, con el genereador NRO_ARTICULO, y se lo asigna a CODIGO.


La franja horaria es GMT +2. Ahora son las 03:32:35.

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