Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-08-2004
OtroYo OtroYo is offline
Miembro
 
Registrado: ago 2004
Posts: 15
Poder: 0
OtroYo Va por buen camino
Unhappy 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.
Responder Con Cita
  #2  
Antiguo 12-08-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!
Responder Con Cita
  #3  
Antiguo 13-08-2004
OtroYo OtroYo is offline
Miembro
 
Registrado: ago 2004
Posts: 15
Poder: 0
OtroYo Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 13-08-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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!
Responder Con Cita
  #5  
Antiguo 13-08-2004
OtroYo OtroYo is offline
Miembro
 
Registrado: ago 2004
Posts: 15
Poder: 0
OtroYo Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 13-08-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
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??
Responder Con Cita
  #7  
Antiguo 15-08-2004
OtroYo OtroYo is offline
Miembro
 
Registrado: ago 2004
Posts: 15
Poder: 0
OtroYo Va por buen camino
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.

Saludos y gracias a todos.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 22:10:43.


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
Copyright 1996-2007 Club Delphi