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 Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2004
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 16-04-2004
Avatar de SCORDOBA
SCORDOBA SCORDOBA is offline
Miembro
 
Registrado: ago 2003
Ubicación: Llano de Brujas. Murcia
Posts: 37
Poder: 0
SCORDOBA Va por buen camino
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
__________________
Ven a Murcia y no solo pasaras calor.
Responder Con Cita
  #3  
Antiguo 20-04-2004
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
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.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #4  
Antiguo 20-04-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 23
guillotmarc Va por buen camino
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.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 21-04-2004
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
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..
Responder Con Cita
  #6  
Antiguo 21-04-2004
uper uper is offline
Miembro
 
Registrado: abr 2004
Posts: 296
Poder: 21
uper Va por buen camino
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 12:51:07.


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