PDA

Ver la Versión Completa : Campo autoincremental en Oracle


Onti
03-09-2003, 15:27:31
Hola:

Necesito saber como definir un campo que autoincrmente y como usarlo.

Gracias

delphi.com.ar
03-09-2003, 15:44:40
Puedes crear una secuencia y mediante un trigger "BEFORE INSERT" asignarle el valor de secuencia.nextval al campo que desees. Es una lastima que no se puedan usar secuencias como default value de un campo.

Saludos!

ingacg
19-09-2003, 21:22:31
exacto, o bien puedes hacerlo por sql

insert into tabla(campo_incrementable) values (secuencia.nextval)

donde la secuencia la creas con la orden create sequence...

Al González
15-02-2004, 20:07:27
¡Buen día a todos!

Al hacer esto con DataSet.Post, ¿se mostrará el valor del campo autoincremental en pantalla automáticamente, como sucede con las bases de datos de escritorio?

Pregunto esto porque tengo un caso similar cliente/servidor, donde deseo que después del Post se vea en el DBGrid donde inserté el registro, el valor que obtuvo el campo autoincremental (y que el objeto campo TIntegerField realmente tenga ese valor después del Post).

http://www.clubdelphi.com/foros/showthread.php?t=7408

Muchas gracias.

Al González :).

jachguate
21-02-2004, 18:59:18
Hola Al. No habia visto tu pregunta antes, y no veo la relación con el post al que redirigis en el mensaje.

Con relación a tu planteamiento... al obtener el valor de la secuencia en el evento OnPost del dataset tenes la ventaja que no solo es mostrado en pantalla, sino que Delphi - si trabajas con el BDE o con la mayoría de componentes de acceso a datos que se basan en el PK para identificar los registros - podrá refrescar el registro y mantener el puntero del dataset en este.

Si trabajas con datos en cache, existe la posibilidad que se creen huecos en la secuencia (por eso no lo utilizo para numerar documentos legales, por ejemplo), pues aún despues de hacer el Post, el usuario puede "arrepentirse" y cancelar las actualizaciones en el cache.

Espero haber resuelto en algo tu inquietud.

Hasta luego

;)

Al González
25-02-2004, 04:59:11
¡Buen día a todos!

Gracias Antonio.

Lo he solucionado con la propiedad GeneratorField de los IBX. En ella puedo especificar qué generador deseo que se ejecute, para cuál campo y en qué momento.

Lo que pasa es que en un principio creí que por el simple hecho de tener la tabla un generador y un disparador, el valor autoincrementado que asignaba el motor de la base de datos debía mostrarse automáticamente en pantalla después de haber guardado un nuevo registro. Lo cuál después comprendí que no es así, porque el servidor de la base de datos no tiene la obligación de avisar al cliente de esas asignaciones internas. Es hasta la siguiente lectura del registro cuando ya se obtendrá el valor dado al campo por el disparador.

Un abrazo.

Chao.

Al González :).