Ver Mensaje Individual
  #3  
Antiguo 24-03-2005
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Reputación: 20
Héctor Randolph Va por buen camino
Otra forma de hacerlo

Hola VRO!

Efectivamente como bien lo dice maeyanes el trigger que actualiza el generador no lo puedes disparar directamente desde delphi ya que ese es trabajo del servidor.

También estoy de acuerdo en que una solución práctica es omitir del query de inserción el campo asociado con el generador para que Delphi no proteste cuando se quede vacío un campo que es requerido. (de hecho es lo que yo siempre hago)

Sin embargo en ocasiones es útil conocer cuál es el valor que le corresponde al registro en la secuencia del generador sin tener que esperar hasta que el servidor lo asigne (Regularmente será hasta aplicar un commit en la transacción actual y después de refrescar la tabla)

Si utilizas los componentes IBX que vienen con el Delphi, me refiero a IBDataSet o IBQuery puedes encontrar una propiedad que se llama GeneratorField

Por medio de esta función puedes incluir el campo asociado con el generador en el query de inserción sin ningún problema.

Las opciones que tienes que configurar tomando el mismo ejemplo que pone maeyanes son :

Primero indicas cual es el generador y campo que afecta

Generator: GEN_ID_MITABLA
Field: ID
Increment By: 1

Después indicas en que momento se actualiza el generador

Apply Event
- On New Record
- On Post
- On Server

La selección de Apply Event es al gusto del cliente, por jemplo si seleccionas On New Record el generador se dispara al momento de insertar un registro (IBQuery1.Insert) y el campo ID se actualiza inmediatamente con el valor correspondiente en la secuencia, El inconveniente en este caso es que si cancelas la inserción (IBQuery1.Cancel) el generador ya se actualizó y se salta ese número de la secuencia.

Para evitar esto puedes elegir On Post de esta forma el generador se actualiza cuando guardas el registro (IBQuery1.Post).

La última opción On Server como su nombre lo indica es dejar que el servidor se encarge de actualizar el generador, aquí la ventaja es que Delphi no va a protestar cuando el campo se quede vacío porque ya le estás anticipando que es un campo asociado con un generador.


Bueno, ahora ya puedes elegir la opción que consideres más apropiada.

Un saludo.
Responder Con Cita