Vuelvo con los triggers!!! grgrgrgrgr

12/08/2003 - 17:34 por davidojeda | Informe spam
estoy tratando de implementar una bitacora para mi bd..

estuve utilizando la funcion "if update(campo)", pero esa funcion me
devuelve verdadero siempre que se graba ese campo, independientemente
si se vuelve a garbar la misma informacion o no, me explico? es decir:

tengo un registro

IDEMPLEADO NOMBRE APELLIDO
1 JUAN PEREZ

SI EJECUTO UPDATE EMPLEADO SET NOMBRE='JUAN' WHERE IDEMPLEADO=1

y en el triger valido if update(nombre), la condicion me devuelve
verdadero,
lo que yo pensaba es que me devolvia verdadero si los datos eran
diferentes,

entonces como puedo para validar si un campo tiene un valor diferente
despues de un update???

porque en la tabla inserted y en la de empleado despues del update y
durante la ajecucion del trigger se encuentran exactamente iguales!!

una ayudadita please!!!!

esque si no puedo validar eso la bd de bitacora ira creciendo con
mucha rapides!!!

Preguntas similare

Leer las respuestas

#6 Liliana Sorrentino
14/08/2003 - 15:28 | Informe spam
David,

Los campos TEXT, NTEXT, IMAGE se actualizan con WRITETEXT.

Sobre la posibilidad de cambiar tu dato de observaciones a CHAR o VARCHAR,
la longitud máxima de ambos es 8.000, deberás analizar si es suficiente.

Saludos... Liliana.

"David Ojeda" escribió en el mensaje
news:
ok Liliana...

he estado analizando mas a detalle la situacion...

despues de probar la solucion que me sugeriste

llegue a esta solucion:

realice 3 triggers, uno para insert, otro para update y otro para
delete...

y en primera instancia salia bien..pero.

tengo que decir que esa tabla empleado tiene un campo ntext de
observaciones,

sql no tiene la capacidad de manejar en las tablas inserted y deleted
campos de tipo text, ntext, image. por lo tanto no puedo insertar
el contenido de esos campos en la tabla de bitacora, por lo tanto los
omito al preguntar if update(campo) y en la insercion a la tabla
bitacora


si hago un insert funciona perfectamente!!!
-
insert into empleado
(idempleado,nombre,apellido,observaciones)
values (1,'juan','perez','xxxx')


si hago un delete funciona perfectamente!!!
-
delete from empleado where idempleado=1

si hago un update donde se modifique cualquier campo aparte
del de observaciones funciona perfectamente!!!

update empleado set nombre='pedro',observaciones='yyyy' where
idempleado=1


pero si hago un update donde solo se involucre ese campo ntext,
falla!!!

update empleado set observaciones='yyyy' where idempleado=1


en la aplicacion en vb me sale el siguiente error:

-2147217864 no se puede encontrar la fila para su actualizacion:
algunos valores han cambiado desde la ultima vez que se leyo


la unica solucion que se me ocurre es

1. poner en vb on error resume next, para que no salga el error
2. validar para que si el numero de error en vb es -2147217864 lo
omita,
pero no es agradable andar validando ese error por toda la
aplicacion
3. en caso extremo cambiar ese campo ntext a varchar (pero cuanto le
puedo
poner de maxima longitud al varchar??)
Respuesta Responder a este mensaje
#7 Liliana Sorrentino
14/08/2003 - 15:32 | Informe spam
David,

Supongo que estás preguntando sobre el trigger para UPDATE...
No hay motivo para que falle, al menos con el ejemplo que te mandé ayer a
las 12:43, te genera tantos registros en la bitácora como actualizaciones
haya hecho. No sé cómo quedó definitivamente tu trigger.

Saludos...
Liliana.

"David Ojeda" escribió en el mensaje
news:
algo que se me habia pasado


la funcion update() fallara si se hace una actualizacion de datos


masiva????

un caso para la araña!!!

que otra opcion tengo???



saludos!!!
Respuesta Responder a este mensaje
#8 davidojeda
14/08/2003 - 20:38 | Informe spam
bueno liliana, creo que ya te he de tener fastidiada..

estuve probando los trigger insertando, actualizando y borrando
registros desde el query analizer.. todo funciono perfectamente

segun estuve leyendo, ese error que me aparece en vb es debido a que
necesito utilizar el mdac 2.5 o superior para que en vb no
aparezca ese error.


yo utilizo la 2.1, alguna vez estuve utilizando la 2.5 y me daba
muchos problemas para instalar el sistema en las maquinas
clientes...

por eso mejor utilice la version 2.1

sera ese el problema?

que me recomiendan?


espero sus sugerencias
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida