FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Campo autoincremental en Oracle
Hola:
Necesito saber como definir un campo que autoincrmente y como usarlo. Gracias |
#2
|
||||
|
||||
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!
__________________
delphi.com.ar Dedique el tiempo suficiente para formular su pregunta si pretende que alguien dedique su tiempo en contestarla. |
#3
|
|||
|
|||
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...
__________________
Alberto C. |
#4
|
||||
|
||||
¡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 . |
#5
|
||||
|
||||
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
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
||||
|
||||
Solucionado con GeneratorField
¡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 . |
|
|
|