Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-01-2008
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
AutoIncrement Firebird

Hola, estoy empezando a usar Firebir, la version que uso es la 1.5 y querria saber como hacer que mi clave primaria se autoincremente, trabajo con firebird 1.5, con IbExpert y con los objetos Ibo en delphi.

Muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 02-01-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Hola...

Hay varias formas... la más usada es un trigger before insert. Para esto necesitas tener creado un generador:

Código SQL [-]
create trigger AutoIncremente for MiTabla
active before insert position 0
as
begin
  if (new.key_field is NULL) then
    new.key_field = gen_id(MiTabla_Gen, 1);
end;

Saludos...

Última edición por maeyanes fecha: 03-01-2008 a las 08:01:19.
Responder Con Cita
  #3  
Antiguo 02-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
ojo, que hacerlo de esta manera podría darte problemas para encontrar los registros desde delphi al momento de crearlos. Por ello, lo que mas se recomienda es obtener el valor del generador desde dentro de tu aplicación.

Por ejemplo, con un query.

Código SQL [-]
select gen_id(MiTabla_Gen, 1) NuevoID from rdb$database;

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 03-01-2008
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
Hola...

Hay varias formas... la más usada es un trigger before insert. Para esto necesitas tener creado un generador:

Código SQL [-]create trigger AutoIncremente for MiTabla
active before insert position 0
as begin if (new.key_field is NULL) then new.key_field = gen_id(MiTabla_Gen, 1);
end;


Saludos...
Gracias por la solucion pero puedes expecificarme un poko mas k es cada kosa??
Responder Con Cita
  #5  
Antiguo 24-01-2008
Ubed Ubed is offline
Miembro
 
Registrado: ago 2007
Posts: 71
Poder: 17
Ubed Va por buen camino
Hola, este problem ya lo solucione a nivel de firebird aora me toca en el ib_objects.

Cuando intento confirmar la insercion de datos me dice que el campo id_per es obligatorio, y no me deja confirmar , como puedo solucionarlo??

Debe decir el IB_Query que es un valor autoincrement? Como lo hago?

Muchas gracias de antemano
Responder Con Cita
  #6  
Antiguo 24-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Poné su propiedad Required a False.

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
  #7  
Antiguo 24-01-2008
Avatar de gmontes
gmontes gmontes is offline
Miembro
 
Registrado: jul 2004
Ubicación: Culiacán, Sinaloa, México
Posts: 668
Poder: 20
gmontes Va por buen camino
mejor instala el ibexper personal edition y revisa tu base de datos y puedes crear e inicializar tus generadores para los trigers de los campos autoincremento

se trabaja mejor

www.ibexpert.com
__________________
Todos llevamos nuestros demonios a cuestas..

Última edición por gmontes fecha: 24-01-2008 a las 18:25:11. Razón: me falto la direccion web
Responder Con Cita
  #8  
Antiguo 21-05-2014
Avatar de bulc
bulc bulc is offline
Miembro
 
Registrado: jun 2010
Posts: 415
Poder: 14
bulc Va por buen camino
Trigger en AutoIncremento

Cita:
Empezado por Ubed Ver Mensaje
Hola, este problem ya lo solucione a nivel de firebird aora me toca en el ib_objects.

Cuando intento confirmar la insercion de datos me dice que el campo id_per es obligatorio, y no me deja confirmar , como puedo solucionarlo??

Debe decir el IB_Query que es un valor autoincrement? Como lo hago?

Muchas gracias de antemano
Puedes usar un Trigger dirigido a un Generador. El generador es mecanismo interno de la base de datos que permite llevar la cuenta de lo que sea. En este caso de un campo clave primaria. Debes crear el contador primero. En Firebird se hace con la sentencia: CREATE GENERATOR Gen_Tablax. En principio contiene un cero. Si quieres, puedes actualizarlo al valor que tú quieras. Y puedes automatizarlo usando un TRIGGER, tal como te han dicho. Yo en vez de usar Trigger utilizo una llamada al generador para recoger el dato -sin alterarlo-. Con ese dato relleno el campo de edición del Inserto o Append. Luego si la edición se lleva a efecto actualizo el dato incrementando el Generador. Y si se cancela el Inserto pues no pasa nada.
Para capturar el dato uso una función que obtiene el dato del servidor. De paso lo asigno a un TLabel para informar al usuario permanentemente de cual es el nº del último registro.
Código Delphi [-]
Function REVISA_GEN( IBQuery1: TIBQuery; PasaUno : Boolean ; Label3: TLabel) : Integer;
Var
  Avance : String;   // Si EsNuevo is True, then Avance is 1.
begin
    if PasaUno then Avance:='1' else Avance:='0';
    IBQuery1.Close;
    IBQuery1.SQL.Clear;
    IBQuery1.SQL.ADD('SELECT GEN_ID( GEN_WB,'+Avance+' ) FROM RDB$DATABASE');
    IBQuery1.Open;  // Primero se abre y luego se recoge el resultado;
    Result := IBQuery1.Fields[0].AsInteger;
    Label3.Caption:= IntToStr(Result);
    //Siempre que esta función se llama, se cambia el Label2 para acualizarlo
    //ShowMessage('Result from Funtion:  '+  IntToStr( Result));
END;
Espero te sirva de algo.
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
valor maximo del autoincrement anubis Tablas planas 2 16-07-2007 07:04:32
AutoIncrement de Firebird alucardo Firebird e Interbase 2 15-06-2006 19:03:20
excepción autoincrement jonmendi Conexión con bases de datos 0 25-04-2006 17:33:55
Interbase y autoincrement geovany SQL 1 04-11-2004 20:52:34
Autoincrement en Interbase XCool Conexión con bases de datos 2 09-10-2003 22:20:35


La franja horaria es GMT +2. Ahora son las 03:19:36.


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