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

 
 
Herramientas Buscar en Tema Desplegado
  #6  
Antiguo 03-09-2011
Avatar de ariefez
ariefez ariefez is offline
Miembro
 
Registrado: sep 2005
Ubicación: Perú - Lima
Posts: 63
Poder: 19
ariefez Va por buen camino
FIBPlus también lo soporta en su tiempo me acuerdo haberlo implementado, pero, luego use generadores, como comentan lineas arriba.

Implementación: mediante un procedimiento obtener el valor del generador en el evento OnBeforePost y luego trabajar con dicho valor según lo requerido, cabe recalcar que uso ClientDataSet en la capa de Entidad y bueno en la Logica uso solo referencias.

El procedimiento para obtener el valor del generador es:

Código SQL [-]
create or alter procedure Proc_Get_Sequence (
    P_SEQ_NAME d_sys_field_name )
returns (
    ID integer )
as
begin
    execute statement
        'select next value for ' || :P_SEQ_NAME || ' from rdb$database'
    into :ID;

    suspend;
end;

O de forma general:

Código SQL [-]
create or alter procedure Proc_Get_Sequence (
    P_TABLE  type of d_sys_relation_name )
returns (
    ID integer )
as
    declare variable vField d_sys_field_name;
begin
    P_TABLE = upper(P_TABLE);

    select rdb$field_name from rdb$relation_fields
        where
            rdb$relation_name = :P_TABLE and
            rdb$field_id = 0
    into :vField;

    if (vField is not null) then
    begin

        vField = 'S_' || vField;

        if ( exists (
                select rdb$generator_name from rdb$generators
                    where rdb$generator_name = :vField ) ) then

            execute statement
                'select next value for ' || :vField || ' from rdb$database'
            into :ID;

    end

    if (ID is null) then
        ID = 0;

    suspend;
end;

Donde:
P_TABLE: Es es nombre de la tabla
d_sys_relation_name: dominio tipo varchar(31)
d_sys_field_name: dominio tipo varchar(31)

El nombre del generador como se puede observar es "S_" || "El nombre del campo", en mi caso siempre es el que se define primero en la tabla (rdb$field_id = 0).

Bueno y otro requerimiento es que exista el generador, sino el procedimiento devolverá cero.

Uso Firebird 2.5, pero creo que también esta disponible para la versión 2.1
Responder Con Cita
 



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
Duplica registro en ClientDataSet maestro-detalle Josepo Conexión con bases de datos 8 07-05-2013 10:59:09
Maestro detalle con firebird e IBExpress edenis Conexión con bases de datos 1 13-10-2006 18:09:08
Maestro detalle solo muestra un registro jandres Varios 2 10-06-2006 12:11:49
InserciÓn De Registro Con Maestro-detalle perillan Conexión con bases de datos 5 23-10-2005 11:15:23
Cancelar un registro en maestro/detalle... uper Firebird e Interbase 1 15-09-2004 17:56:40


La franja horaria es GMT +2. Ahora son las 04:51: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