Ver Mensaje Individual
  #9  
Antiguo 21-06-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Reputación: 22
Mick Va por buen camino
En cuanto a la forma de detectar registros modificados los componetes TQuery de base de datos de delphi ya tienen en cuenta eso, y existe la propiedad UpdateMode, para poder elegir que metodo utilizar para localizar los registros a modificar, y da 3 opciones:

upWhereAll
* All columns (fields) are used to locate the record.
upWhereChanged
* Only key field values and the original value of fields that have changed are used to find the record.
upWhereKeyOnly
* Only key fields are used to find the record.

La opcion elegida hace que se construya la clausula WHERE de las sentencias UPDATE de forma distinta.

Supongamos que tenemos un registro con los siguientes valores leidos previamente: ID=1 , NOMBRE='JOSE', TELEFONO='9001111110' y queremos modificarlo, pues tenemos 3 formas que son las siguientes:

* upWhereKeyOnly, seria asi:

UPDATE AGENDA SET NOMBRE='PEPE' WHERE ID=1

En este caso solo usamos la clave primaria en el WHERE y nunca se detectara si el registro ha sido modificado previamente (esta forma es la upWhereKeyOnly) y se sobreescribira cualquier modificacion previa:

* upWhereChanged, seria asi:

UPDATE AGENDA SET NOMBRE='PEPE' WHERE ID=1 AND NOMBRE='JOSE'

En este caso si el campo NOMBRE ha sido modificado por otro usuario, la setencia update no modificara el registro ya que no se cumplira que NOMBRE='JOSE'. En definitiva los campos que hayamos modificado deben ponerse en la sentencia where con los valores antiguos que se supone que deberian tener en la base de datos.

* upWhereAll, seria asi:

UPDATE AGENDA set NOMBRE='PEPE' WHERE ID=1 AND NOMBRE='JOSE' AND TELEFONO='9001111110'

Con este metodo evitamos que el registro sea modificado incluso si cualquier campo que nosotros no hemos modificado ha sido cambiado previamente, ya que incluimos en el where TODOS los valores de todos los campos del registro, incluidos aquellos que no hemos modificado.

La eleccion del metodo de actualizacion dependera de cada tabla e incluso de cada campo a modificar, es una cosa que habra que elegir en funcion del significado de la informacion.

De modo que si los campos de una tabla son independientes entre si podria interesarnos que los usuarios puedan estar modificando el mismo registro a la vez siempre y cuando modifiquen distintos campos (en ese caso utilizariamos el metodo upWhereChanged).

En cambio en otras tablas puede ser importante usar el upWhereAll para que realmente solo un usuario pueda modificar el mismo registro en un determinado instante.

Saludos

Última edición por Mick fecha: 21-06-2007 a las 02:59:45.
Responder Con Cita