PDA

Ver la Versión Completa : Update!!!, pero solo para un registro


ELINK
27-12-2007, 16:46:08
Buen dias con todos :)

Quisiera saber como hacer para, desde la base de datos, negar la actualizacion de mas de un registro a la vez. :confused:

Gracias Por adelantado :D

dec
27-12-2007, 16:57:17
Hola,



UPDATE FROM tabla SET campo_texto = 'nuevo valor' WHERE campo_id = 1;



O sea, especificas que quieres actualizar el "campo_texto" sólo del registro cuyo "campo_id" sea 1. ¿No es algo así?

jachguate
27-12-2007, 18:54:46
francamente, la pregunta no me quedó clara!.

Hasta luego.

;)

ELINK
27-12-2007, 19:08:15
francamente, la pregunta no me quedó clara!.

Hasta luego.

;)


es simple, POR EJEMPLO alguien del lado del cliente hace un "update datos set nombre = 'Luis' "

aca me coje todos los nombres de la tabla datos y lo pasa a 'Luis'

Lo que quiero es saber si la base de datos a traves de un Trigger (creo) con un error le diga "ha,ha, solo puedes modificar un registro a la vez". Se Puede...? :confused:

jachguate
27-12-2007, 19:34:50
Que pasa si alguien hace algo como:


update lista_precios
set precio = precio * 1.05;


Me parece poco adecuado evitar esto en la base de datos... pero si querés hacerlo, con algo de ingenio, seguramente se puede.

Por ejemplo, creando una tabla auxiliar del tipo:


create table auxiliar_no_actualizaciones (
usuario varchar(50) not null,
tabla varchar(50) not null,
fecha timestamp not null
);


En un trigger before update, verificas que no haya un registro para el usuario/tabla en el último segundo. Si lo hay, elevas una excepción. Si no lo había, lo insertas.

Para evitar que se acumulen los registros en dicha tabla, podrías eliminar todos los registros con mas de 2 o 3 segundos de antiguedad en el mismo trigger before.

Hasta luego.

;)

ELINK
27-12-2007, 23:41:42
Que pasa si alguien hace algo como:

Código SQL [-] (http://www.clubdelphi.com/foros/showthread.php?t=51741#)update lista_precios
set precio = precio * 1.05;


Me parece poco adecuado evitar esto en la base de datos... pero si querés hacerlo, con algo de ingenio, seguramente se puede.

Por ejemplo, creando una tabla auxiliar del tipo:

Lo que pasa es q tengo una tabla "caliente" donde cada registro tiene características únicas y SIEMPRE debe ser tratado individualmente (registro por registro), por eso buscaba una forma de prevenir cualquier tipo de "error humano" que ponga en riesgo esta tabla "caliente".

Gracias.

P.D.:el ultimo ejemplo no lo entendí muy bien :(

rastafarey
08-01-2008, 20:26:41
crea una variable por transaccion y la incrementas en el disparadaor si se pasa del numero de registros que debes actualizar tiras la excepcion.

Solo valido para firebird 2.x