Como trabajar las llaves primarias en red
Hola a todos:
Ante todo muchas gracias por la leer este hilo, tengo un problema al guardar registros en Paradox en varios terminales a la vez, el problema se cebtra en generar la clave primaria en los terminales. probe con un campo autoincremental pero cuando un registro se elimina se pierde ese numero, siendo escencial mantener y reutilizar estos numeros. Como veran no se puede poner en exclusivo la tabla por que se esta compartioendo con varios terminales. Cual seria una Solución viable.(uso paradox y delphi 6.0) Nuevamente Muchas Gracias. Javier Villa. |
Si no necesitas que sean correlativos, es decir, que puedes aprovechar los que se borran, yo utilizaría un proceso paralelo que reutilice los números, ya sea en el momento de asignarlos o utilizando una tabla intermedia que guarde los libres.
En todo caso debes eliminar la característica de autoincremental de campo. |
De todas maneras se elimina el autoincremental
Lo que mas molesta es cuando varios usuarios quieren grabar al mismo tiempo en diferentes terminales, cual es el procedimiento a seguir en ese caso.
|
Para la clave primaria usaría un autoincremental.
Para el código que sea correlativo, usaría otro campo distinto con un índice. Hay muchas formas de hacerlo, una de ellas: - En el OnNewRecord, buscas el hueco del correlativo y lo asignas al campo. - En el BeforePost y asegurándote que la tabla está en estado dsInsert (se está insertando pero todavía no se ha guardado). Buscas de nuevo el correlativo por si alguien ha grabado mientras este usuario estaba pensando en las musarañas ;). Esto tiene fallos de todas formas, porque imagina que se da un registro de alta, se guarda, otro usuario hace lo mismo y despues el primer usuario borra su registro. Obviamente queda un hueco (que se puede aprovechar la próxima vez que se inserte un registro). La rutina para volverse loco es esta: Código:
procedure TDTM.BuscaHuecoCliente(const idActual: Integer); OFFtopic: ¿Quién será el que se ha cargado las etiquetas delphi :D :D Saludos |
La franja horaria es GMT +2. Ahora son las 13:08:52. |
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