PDA

Ver la Versión Completa : Interbase


elvymena
28-11-2007, 21:23:05
Necesito saber si en Interbase puedo crear una tabla donde el campo ID es tipo Entero y se autoincremente.

Ejemplo:
ID-----*-Nombre-*
1------*-Juan
2------*-Lucas
3------*-Pedro
4------*-Maria
.
.
.
n


que el campo ID sea la misma base de datos que haga esto, espero me entiendan.

maeyanes
28-11-2007, 21:30:16
Hola...

Para crear autoincrementales en Interbase/Firebird se usan los llamados generadores...

Un pequeño ejemplo:


create table Alumno(
Id integer not null,
Nombre varchar(50) not null,
Apellidos varchar(50) not null);

alter table Alumno add constraint Alumno_PK primary key (Id);

create generator Gen_Alumno_Id;

set term ; ^
create trigger AlumnoAutoId for table Alumno
before Insert position 0
as
begin
if (New.Id = Null) then
New.Id = gen_id(Gen_Alumno_Id, 1);
end^
set term ^ ;



Saludos...

elvymena
28-11-2007, 21:37:20
set term ; ^ // QUE QUIERE DECIR ESTA LINIA
create trigger AlumnoAutoId for table Alumno
before Insert position 0
as
begin
if (New.Id = Null) then
New.Id = gen_id(Gen_Alumno_Id, 1);
end^
set term ^ ; // QUE QUIERE DECIR ESTA LINIA


SALUDO ME LO PUEDES EXPLICAR ESTA LINIA DE COMANDO. SI QUEIRES ESTOY CONECTADO AL MSN. ELVYMENA@HOTMAIL.COM

maeyanes
28-11-2007, 21:54:19
Hola...

Es para establecer el caracter que va a separar el final de comando, de forma predeterminada Interbase usa el caracter ; para esto y al usar dentro de procedimientos y disparadores el mismo caracter, causa problemas...

Y se usa para que al ejecutar scripts de creación de bases de datos, los procedimientos (store procedures) y disparadores (triggers) se creen bien...


Claro, esto podría haber cambiado en las últimas versiones de Interbase/Firebird...



Saludos...

elvymena
28-11-2007, 22:04:17
MIRA LO HICE, PERO CUANDO ESTOY EN EL MISMO INTERBASE E INSERTO UN DATO EN LA TABLA ALUMNO, ESTE NO ME COMPLETA EL CAMPO ID CON LA SECUENCIA SIGUIENTE.

AL FINAL EL CODIGO QUE ME ENVIASTE PUDE EJECUTARLO PERO DE LA SIGUEINTE MANERA.

COMO QUE DO.
create trigger AlumnoAutoId for Alumno
before Insert position 0
as
begin
if (New.Id = Null) then
New.Id = gen_id(Gen_Alumno_Id, 1);
end

EL QUE ME ENVIASTE.
set term ; ^
create trigger AlumnoAutoId for table Alumno
before Insert position 0
as
begin
if (New.Id = Null) then
New.Id = gen_id(Gen_Alumno_Id, 1);
end^
set term ^ ;

elvymena
28-11-2007, 22:05:41
Me puedes ayudar, por que esto es muy importante que esta base de datos lo haga bien y sin problema.

Que si tengo 3 usuarios en la Red ninguno sea bloqueado por que la secuencia ha sido repetida.

maeyanes
28-11-2007, 22:13:26
Hola...

Veo que eres nuev@ en estos foros, así que te remito a la Guía de Estilo (http://www.clubdelphi.com/foros/guiaestilo.php) de estos foros...

No te preocupes, la secuencia dificilmente se repetirá...

Yo uso más o menos esa aproximación y hasta ahora no he tenido problemas de ningún tipo...

Ahora, como es que estás insertando alumnos nuevos a tu base de datos?

Desde una aplicación, una sentencia insert desde algún programa tipo IBExpert?


Saludos...

elvymena
29-11-2007, 15:17:53
Saludos

Maeyanes, le pido mis mas sinceras disculpa por los error cometido, ahora a con conocimientos de ellos a al haber leido las normas del foro.

Ahora te explicare detalladamente mi problema.

Yo quiero hacer una base de datos en Interbase y como ya sabes tengo que tener una secuencia de cada uno de estos registro, por lo general estos registro se hacen secuenciales. Bien, yo lo que necesito saber como hacer una secuencia automatica en Interbase.

Yo he realizado todas tus recomendaciones paso por paso. Ahora te remito las herramientas que utilizo.

Interbase 6.0

Lepe
29-11-2007, 17:31:02
Donde dice:

if (New.Id = Null) then

debería decir:

if (New.Id is Null) then

¿no?

Ahora cuando vayas a insertar un registro, puedes hacerlo de dos formas:

insert into AlumnoAutor (Nombre, Apellidos)
values ('Nombre1', 'Apellido1');


o bien


insert into AlumnoAutor (id, Nombre, Apellidos)
values (null, 'Nombre1', 'Apellido1');


Saludos

elvymena
29-11-2007, 19:10:36
Gracias a todos fue de mucha ayuda.

Gracias... de verdad muchas gracias...

Saludos.