• Viernes 19 de Abril de 2024, 18:19

Autor Tema:  Controles Delphi Y Firebird  (Leído 2825 veces)

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Controles Delphi Y Firebird
« en: Martes 21 de Noviembre de 2006, 17:53 »
0
Estoy usando un control TIBTable y otro TDBNavigator para para obtener información de una tabla en Firebird. Funcionan perfectamente bien. Sin embargo, cuando trato de agregar un registro obtengo el error "field ORDEN_ID must have a value". Este campo está definido como no nulo y tiene un trigger asociado (BEFORE INSERT) con su respectivo generador (el cual funciona bien si se trata de agregar datos directamente desde IBEasy+ o FlameRobin), evidentemente el trigger no está siendo accionado en el intento de insertar los datos.

¿Existe alguna consideración respecto el uso de controles data aware y los triggers en la base de datos?

Gracias de antemano.
Francisco

Ayla

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
    • http://www.clubdevelopers.com/foros/index.php
Re: Controles Delphi Y Firebird
« Respuesta #1 en: Miércoles 22 de Noviembre de 2006, 08:57 »
0
Hola Francisco!

Por lo que leo creo que sé más o menos lo que te pasa. Si en el TIBTable tienes definido el campo ORDEN_ID, en el before insert de TIBTable debes darle el valor cero al 'ORDER_ID':

TIBTable.FieldByName('ORDEN_ID').AsInteger:= 0;


Verás como ahora si te ejecuta el trigger correctamente.

Si no tienes el campo definido en control Data aware no hace falta que le asignes ningún valor.

Espero que sea eso.

Un saludo  :hola:
Y que mi luz te acompañe
pues la vida es un jardín
donde lo bueno y lo malo
se confunde y es humano
no siempre saber elegir.

Ayla Blog

fxge

  • Nuevo Miembro
  • *
  • Mensajes: 10
    • Ver Perfil
Re: Controles Delphi Y Firebird
« Respuesta #2 en: Miércoles 22 de Noviembre de 2006, 16:16 »
0
Hola Ayla, gracias por tu respuesta.

No he podido aplicar tus recomendaciones. Al colocar el codigo en el evento BeforeInsert obtengo un error en respecto a que el dataset no está en modo EDIT. Según la ayuda de Delphi, eso es correcto ya que el evento se dispara antes de cambiar el estado del dataset. Coloqué el codigo en BeforePost y se ejecuta la primera vez, pero no dispara el trigger y coloca ORDEN_ID := 0, por supuesto que luego no vuelve a correr ya que trata de colocar otro registro con el mismo valor de ORDEN_ID ques es mi clave primaria.

Me extraña tu comentario "Si no tienes el campo definido en control Data aware no hace falta que le asignes ningún valor" ya que no tengo ese campo definido en un control por lo que supongo que no debería darme ningun problema.

Alguna sugerencia?

Saludos,

Ayla

  • Miembro activo
  • **
  • Mensajes: 57
    • Ver Perfil
    • http://www.clubdevelopers.com/foros/index.php
Re: Controles Delphi Y Firebird
« Respuesta #3 en: Miércoles 22 de Noviembre de 2006, 16:58 »
0
Hola.

Tienes razón me confundí, lo tienes que colocar en el BeforePost  :rolleyes: .

El TIBTable no lo uso pero si uso el TIBDataSet, es por decirlo de algún modo a mi modo de ver es un TIBTable mejorado.

Pues al principio cuando empecé a utilizarlo me pasaba lo mismo que a tí, leí en algún sitio (si encuentro la referencia la pongo) que si tienes, en tu caso ORDEN_ID como campo persistente (pinchas dos veces encima del TIBTable y aparecen todos los campos de la tabla) debes colocar el valor 0 para que el trigger se dispare. Pero igual con el TIBTable no hace falta, no lo sé te hablo de mi experiencia con el TIBDataSet.


Aqui te dejo por si te sirve de ayuda, un enlace a un articulo que explica claramente como funcionan los componentes IB Inicio rápido a Firebird


Suerte  :whistling:
Y que mi luz te acompañe
pues la vida es un jardín
donde lo bueno y lo malo
se confunde y es humano
no siempre saber elegir.

Ayla Blog