![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
OK Roman. Lo voy a tomar en cuenta.
Por lo que veo tambien tendré que pensar en la forma de que sea poco probable que alguien se ponga a editar el mismo registro que otra persona ya esta editando para evitar alguna confucion en la informacion. La verdad es que esto se trata de hacer un sistemita de telemarketing donde habra una base de datos con las personas a llamar y su telefono y como habra 3 computadoras el sistema le debe ir marcando a cada quien que telefono deben marcar tratando de que nunca marquen a la misma persona por que entonces se crea un problema de estarle hablando a la misma persona y es perdida de tiempo y confucion. Por eso necesita que no fuera posible editar el mismo registro. Aunque eso es algo basico en cualquier sistema de red con una sola BD donde la accesaran entre varios. Me pregunto si la Arquitectura Cliente/Servidor de Delphi y sus componentes referentes a esto tendran la misma forma de funcionar que dices a la hora de editar un mismo registro. Sera? Como sea, agradesco su apoyo, 3 cabezas siempre piensan mejor que una. Quedo a sus ordenes para lo que les pueda apoyar.
__________________
"Los unicos que no se equivocan son aquellos que no intentan hacer algo." Iván Caballero Cano... [email protected] |
|
#2
|
|||
|
|||
|
Pensando en lo que pretendes hacer, el problema no se debe al uso de bloqueos sino a que el diseño de la base de datos no es el adecuado.
Es decir si mucha gente va a poder añadir en cualquier momento "anotaciones", estas no deberian ir todas juntas en un mismo camo memo. Sino que lo logico seria tener una tabla de anotaciones, en la que cada registro es una anotacion individual. Asi que si dos personas añaden 2 anotaciones, pues aparecerian dos registros, con lo que no habria confusion posible, ademas asi se podria guarda de una forma sencilla, la fecha y hora de cada anotacion y el usuario que las ha hecho. Ademas permite mucha mas flexibilidad en cuanto a la seguridad del sistema, porque se podria evitar si se quisiese que un usuario "borrase" o alterase anotaciones realizadas por otro usuarios. O incluso llevado al extremo evitar que un usuario elimine las anotaciones propias XD, en realidad esto no es tan extremo, es muy comun, para evitar que un usuario pueda eliminar o alterar alguna anotacion suya y se desdiga de lo que haya anotado .Saludos |
|
#3
|
|||
|
|||
|
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. |
|
#4
|
||||
|
||||
|
Una discusión acerca del uso de UpdateMode y el uso de TimeStamp, puede verse en el artículo La cuarta opción de Ian Marteens.
// Saludos |
|
#5
|
|||
|
|||
|
creo que lo que deberias de hacer es crear una tabla de status con fecha y hora por cada paquete o registro, compra de un cliente.
__________________
Se un buen lector y que la fuerza te acompañe |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Cómo bloquear una tabla ? | santi33a | MS SQL Server | 1 | 12-04-2006 15:02:34 |
| Como bloquear un registro!!! | CarlosHernandez | Firebird e Interbase | 7 | 12-08-2005 16:49:50 |
| Como se podría bloquear un registro | marcial | Conexión con bases de datos | 4 | 17-02-2004 22:00:42 |
| como bloquear un registro en un dbgrid | marcelofabiani | Conexión con bases de datos | 5 | 02-10-2003 21:04:01 |
| Como bloquear la tabla, para escritura? | judoboy | Conexión con bases de datos | 2 | 21-05-2003 10:02:48 |
|