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)
-   -   incremento de store procedure (https://www.clubdelphi.com/foros/showthread.php?t=9164)

uper 15-04-2004 17:26:33

incremento de store procedure
 
hola a todos, estoy desarrollando una aplicacion en delphi 5.0 y ya baje interbase firebird v 6.0 ya cree mis tablas, generadores, store procedure y trigger para autoincremento de ID's.
Con los store procedure cree mis autoincrementos de id al igual que los trigger pero la verdad no se como se manadan a llamar los store procedure y los trigger no se si se tiene que crear los dos o basta con los store procedure desde la aplicacion cliente.
mi tabla se llama deptos
dos campos id interger prymary key y area varchar(25)

create procedure proxArea returns (cod integer) as
begin
cod=gen_id(G_Dep);
end

Como se realiza la configuración es decir los parametros en las propiededes de delphi.

Se los agradeceria si me orientaran.
Gracias

SCORDOBA 16-04-2004 16:25:41

Solo debes hacerlo en una de las dos opciones. Si no necesitas recuperar en el cliente el registro recien insertado, yo los pongo en el trigger.(Por norma hay que trasladar todas las reglas posibles al servidor).

En el caso de que si necesites seguir trabajando en la parte cliente con el registro recien insertado necesitas saber el valor de la primary key de ese registro y ese valor no llega al cliente con la asignacion en el trigger.

Si lo quieres hacer con el store procedure tienes que lanzar una consulta:

select cod from proxArea

Ojo: tienes mal el procedimiento;

create procedure proxArea returns (cod integer) as
begin
cod=gen_id(G_Dep);
suspend; /*si no pones esto siempre te devolvera null*/
end

Yo uso los FIB+ y estos llevan encapsulado en la clase TfibDatabase una funcion gen_id.

Saludos

jachguate 20-04-2004 04:41:36

Cita:

Empezado por scordoba
suspend; /*si no pones esto siempre te devolvera null*/

Pues yo nunca lo uso. Supongo que dependerá de como ejecutes el sp. Si haces un select, claro que te devolverá null, pero yo lo invoco desde delphi, leyendo el valor del parámetro y siempre me ha funcionado.

Hasta luego.

;)

guillotmarc 20-04-2004 10:19:49

Hola.

Creo que ese suspend es necesario en Interbase 6, aunque en Firebird 1 ya está solventado el bug.

NOTA: uper, no existe Firebird 6, debes haber instalado Interbase 6.

http://firebird.sourceforge.net

Saludos.

uper 21-04-2004 19:15:20

una consulta...
 
ok, ya voy entendiendo, scordoba los auto incrementos los haré con trigger, y tengo entendido que se ejecutan en conjunto a la tablas que uno crea son algo así como eventos de las propias tablas, pero ya no hay que programarlas desde la aplicación del cliente los trigger o como se llaman. En cuando a que si quiero recuperarlos como esta esa explicación, es decir que yo inserte un registro, se ejecutara y me pondrá el valor pero si cancelo la acción, devuelve el valor para la próximo inserción, esto es lo correcto.

Mi trigger de departamento es:
CREATE TRIGGER T_dep FOR Dept
ACTIVE BEFORE INSERT POSITION 0
AS

begin
IF (NEW.ID IS NULL) THEN
NEW.ID=GEN_ID(G_dep,1);

end

Donde: G_dep es mi generador antes creado
Dept es mi tabla
ID es mi campo clave primaria de la tabla Dept

Y los componentes Ibstoresprocedures se usaran para los storeprocedures de la base de datos, pero eso

Si guillotmarc me equivoque como se hace mención de interbase/firebird yo considere que es libre interbase conocido con ese nuevo nombre por eso lo hacia referencia, disculpa; una cosa es firebird 1.5 que es desarrollado por un grupo de personas que después de que se libero interbase open source dedicadas a mejorar este software hasta este momento yo se de esto, pero por un lado es firebird y otro es interbase 6.0 cada uno por su lado verdad.

Bueno, se los agradezco el poder orientarme, espero alguna respuesta después de mi respuesta..

uper 21-04-2004 19:15:59

una consulta...
 
ok, ya voy entendiendo, scordoba los auto incrementos los haré con trigger, y tengo entendido que se ejecutan en conjunto a la tablas que uno crea son algo así como eventos de las propias tablas, pero ya no hay que programarlas desde la aplicación del cliente los trigger o como se llaman. En cuando a que si quiero recuperarlos como esta esa explicación, es decir que yo inserte un registro, se ejecutara y me pondrá el valor pero si cancelo la acción, devuelve el valor para la próximo inserción, esto es lo correcto.

Mi trigger de departamento es:
CREATE TRIGGER T_dep FOR Dept
ACTIVE BEFORE INSERT POSITION 0
AS

begin
IF (NEW.ID IS NULL) THEN
NEW.ID=GEN_ID(G_dep,1);

end

Donde: G_dep es mi generador antes creado
Dept es mi tabla
ID es mi campo clave primaria de la tabla Dept

Y los componentes Ibstoresprocedures se usaran para los storeprocedures de la base de datos, pero eso

Si guillotmarc me equivoque como se hace mención de interbase/firebird yo considere que es libre interbase conocido con ese nuevo nombre por eso lo hacia referencia, disculpa; una cosa es firebird 1.5 que es desarrollado por un grupo de personas que después de que se libero interbase open source dedicadas a mejorar este software hasta este momento yo se de esto, pero por un lado es firebird y otro es interbase 6.0 cada uno por su lado verdad.

Bueno, se los agradezco el poder orientarme, espero alguna respuesta después de mi respuesta..

Uper.


La franja horaria es GMT +2. Ahora son las 10:58:01.

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