![]() |
Ejecucion automatica de Triggers IB65 con Delphi 7 Dbexpress
* Tengo una base de datos (Interbase 6.5) en un Servidor Win 2000
- El Interbase Manager esta corriendo como un servicio En windows - Tengo una tabla almacenes con 2 campos: id_alm Integer Autoincrementado (LLAVE PRIMARIA) descripcion Character por lo tanto tengo un generador del id_alm q inicia en o e incrementa en 1 ademas de un Disparador antes de insertar BEGIN IF (NEW.ID_ALM IS NULL) THEN NEW.ID_ALM = GEN_ID(GEN_ALM_ID,1); END Los cuales estoy seguro q funcionan por que inserto datos desde el InterBase Expert y al insertar registros pone automaticamente el ID incrementando en el generador PERO CON DELPHI 7 NO LO HACE, TENGO LO SIGUIENTE * Utizo DBExpress - 1 SQLConnection1 (con mis respectivos parametros de coneccion) - 1 SimpleDataSet1 connection := SQLConnection1 commandtype:= ctTable commandtext:= almacenes - 1 DataSourse1 DataSet := SimpleDataSet1 Tengo una forma donde use un Grid, un boton de Agregar y un boton de Guardar - 1 DbGrid1 DataSource:= DataSourse1 Al oprimir el Boton de Agregar SimpleDataSet1.Insert; se genera el nuevo registro con los campos en blanco NO CAPTURO NADA en id_alm y tecleo datos par adescripcion Al oprimir el boton de Guardar SimpleDataSet1.Post; SimpleDataSet1.ApplyUpdates(-1); Y ENTONCES ME DA EL SIGUIENTE ERROR "Field 'id_alm'must have a value' Y esto para mi es que no se ejecuta el disparador, en cambio si manualmente le doy un valor al campo id_alm entonces lo acepta y guarda el registro sin problema. OTRO DETALLE Q DETECTE ES QUE SI MANUALMETE YO LE DOY VALORES AL ID_ALM Y REPITO UN VALOR DEL ID_ALMA CUANDO LO REPITO Y LE DOY GUARDAR NO ME MANDA NINGUN MESAJE DE ERROR Y APARENTEMENTE LO ACEPTA, PERO AL REFRESCAR LA TABLA EN REALIDAD NO REGISTRO. LO CUAL ES CORRECTO POR QUE ES UNA RESTRICCION, POR SER UN CAMPO LLAVE. !!!!!Por favor Alguien me podria decir que tengo q hacer para que funcione el disparador y el valor del campo se genere automaticamente con el generador que esta en Base de Datos. CON DELPHI 7 GRACIAS Atte: Norber norberto_larios@hotmail.com |
Hola,
Cita:
Indicas un par de problemas en tu mensaje: 1. El asunto de: "Field 'id_alm'must have a value'". Esto es debido a que tienes definido un TField para el campo "id_alm" con la propiedad Required establecida a True. Solución: cámbiala a False. 2. El tema de no ver el valor del campo (al que da valor el trigger en el servidor) al hacer el post. Esto es debido a que tu mandas el registro con un valor en el campo en cuestión que, al llegar al servidor, es machacado por el trigger. Soluciones: hay varias ... 2.1 Recuperar el valor del generador desde la aplicación cliente y asignarle allí el valor obtenido. Para obtener el valor de un generador puedes lanzar una consulta del tipo ... Código:
select gen_id("<generador>", 1) from rdb$database Código:
CREATE TRIGGER <trigger> FOR <tabla> En resumen, Delphi funciona correctamente. La cuestión es que trabajas con dos procesos (relativamente) independientes, por un lado tu aplicación (el cliente) y por otro el servidor InterBase. Saludos. |
Kinobi, Te agradezco la informacion, voy a trabajar con tus recomendaciones y ya vere si ma salen otras dudas, GRACIAS
|
La franja horaria es GMT +2. Ahora son las 20:28:37. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi