Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Interbase (https://www.clubdelphi.com/foros/showthread.php?t=50813)

elvymena 28-11-2007 21:23:05

Interbase
 
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:

Código SQL [-]
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

Interbase
 
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

Interbase
 
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

Interbase
 
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 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

Interbase
 
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:
Código SQL [-]
insert into AlumnoAutor (Nombre, Apellidos)
values ('Nombre1', 'Apellido1');

o bien

Código SQL [-]
insert into AlumnoAutor (id, Nombre, Apellidos)
values (null, 'Nombre1', 'Apellido1');

Saludos

elvymena 29-11-2007 19:10:36

Interbase
 
Gracias a todos fue de mucha ayuda.

Gracias... de verdad muchas gracias...

Saludos.


La franja horaria es GMT +2. Ahora son las 18:16:24.

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