Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   No puedo utilizar triggers (https://www.clubdelphi.com/foros/showthread.php?t=13292)

OtroYo 12-08-2004 21:44:39

No puedo utilizar triggers
 
Hola a todos,

tengo un problemilla que me esta volviendo loco. He creado un trigger en una tabla y a nivel de BD funciona correctamente pero cuando intento insertar alguna fila en esa tabla desde Delphi me da un error que dice que la informacion es insuficiente para actualizar la fila ???.

El Trigger se 'dispara' al hacer insert y lo que hace es insertar filas en otra tabla.

¿Que me pasa doctor?

Delphi 6 (ADO) - SQLServer 7

Saludos y gracias a todos.

__marcsc 12-08-2004 22:42:41

Hola,

estaría bien que detallases el error que te da, pero a priori parece un típico error que pasa al trabajar con ADO cuando caché local que ha quedado desactualizada después de hacer una inserción.

¿Por qué no pruebas a hacer un Requery del DataSet después de hacer el post?

A pesar del error, ¿el registro queda grabado? Es que tal vez me confundo de error.

Saludos!

OtroYo 13-08-2004 12:50:23

El error sale justo cuando hago el 'Post', por lo que no creo que sea un problema de referesco de datos ya que en esa tabla solo se hacen inserciones, que es cuando se 'dispara' el trigger.

El texto exacto del mensaje es este:
..... raise exception class EOleException with message 'No se puede encontrar la fila para su actualizacion: algunos valores han cambiado desde la ultima vez que se leyo'. Process .....



El codigo del trigger es este:

CREATE TRIGGER [MUETG002_1] ON [MUETB002]
FOR INSERT
AS
INSERT INTO MUETB003
SELECT LMUE_LAB_ID,LMUE_MUE_ID,LMUE_MUE_ANYO,
LMUE_PARAM,SPAR_ID
FROM INSERTED,PARTB005
WHERE LMUE_PARAM=SPAR_PAR_ID
AND SPAR_BAJA = 'N'

Como podeis ver nada del otro mundo pero sigo sin poder poner trigger en las tablas que utilizo en mi aplicacion, en cuanto quito los trigger todo funciona correctamente.

Otra vez muchas gracias a todos.

Saludos.

__marcsc 13-08-2004 12:57:58

Hola,

en efecto este es el error que yo te comentaba, nos ha ocurrido alguna vez y puede ser un poco difícil entontrar siu origen. Estás muy convencido de que esto es debido al trigger?? Yo no creo que vayan los tiros por ahí sinceramente.

De momento, cosas que deberías decirnos.

- El registro se graba igualmente? A nosotros nos guardaba el registro pero el error saltaba immediatamente después.

- Has probado a borrar el trigger para verificar que no tiene nada que ver?

- Tienes algún otro DataSet que esté sobre esta misma tabla?

- Has probado de hacer un Requery immediatamente después del Post?

Saludos!

OtroYo 13-08-2004 14:02:48

Hola otra vez,

- No, no graba nada en la tabla.

- Como comentaba anteriormente al quitar el trigger todo funciona correctamente.

- Si hay otra query sobre esa tabla, pero en ese momento esta desactivada.

- No puedo hacer nada despues del Post ya que es justo en ese momento cuando salta el error.

Lo que no he probado es si esto solo pasa en esa tabla en concreto o pasa en todas las tablas. Voy a probarlo, ya os comentare lo que pasa.

Saludos.

__marcsc 13-08-2004 14:09:04

Hola,

quizás en algun lugar de la aplicación tienes un DataSet que hace referencia a la tabla MUETB003, es decir sobre la que realizas el insert el en trigger. Esto podría provocar el error que te comento.

Puede ser??

OtroYo 15-08-2004 21:09:27

solucionado
 
Ya he encontrado el fallo.

Lo pone bien clarito en los libros en pantalla de SQLServer :(

Si se utiliza una instruccion select que devuelva resultados hay que añadir una clausula SET NOCOUNT al principio del trigger para que no devuelva nada a la aplicacion, por eso funcionaba a nivel de BD y fallaba a nivel de aplicacion.

Como la mayoria de informaticos, lo ultimo que hago es leer la documentacion. :D

Saludos y gracias a todos.


La franja horaria es GMT +2. Ahora son las 18:14:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi