Ver Mensaje Individual
  #2  
Antiguo 18-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Reputación: 24
kinobi Va por buen camino
Hola,

Cita:
Posteado originalmente por norberto_larios
PERO CON DELPHI 7 NO LO HACE,
los triggers no se ejecutan en el lado cliente, siempre se ejecutan en el lado servidor. Es decir, el trigger se ejecuta (en el servidor) en el momento en que se produce la acción que lo desencadena.

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
tendrás que modificar el trigger para que no te machaque el valor que tu le pasas:

Código:
CREATE TRIGGER <trigger> FOR <tabla> 
BEFORE INSERT AS 
BEGIN 
  IF (NEW.<campo> is NULL) THEN
    NEW.<campo> = GEN_ID(<generador>, 1); 
END;
2.2 No dar valor al campo en el cliente, dejando que lo haga el trigger, pero ésto implica que deberás "refrescar" (puede ser necesario relanzar la consulta asociada al DataSet) el contenido del registro tras el post.

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.

Última edición por kinobi fecha: 18-08-2003 a las 23:31:51.
Responder Con Cita