Access - generar # consecutivo en tablas vinculadas utilizada por varios usuarios

   
Vista:

generar # consecutivo en tablas vinculadas utilizada por varios usuarios

Publicado por Alejandro (3 intervenciones) el 05/05/2016 02:12:18
Buenas

Tengo diseñada una interfaz de usuario en access con tablas vinculadas para manejo de información. Esta interfaz esta en varios ordenadores, pero tengo un obstaculo y es que al momento en que varios usuarios utilizan al mismo tiempo la interfaz para generar una relación está "genera" las relaciones y mas muestra a los usuarios pero todas tienen el mismo número consecutivo y al imprimir la relación contiene la información de todos los usuarios que la utilizaban al momento de la generación.

Para generar el numero consecutivo utilizo Numero = Nz(DMax("N_Memo", "MEMOS"), 0) + 1 no se si es esto (q reo que si sumado a) o la actualización de las tablas vinculadas. Como puedo hacer para que esto no me suceda.

gracias de antemano por la ayuda

Alejandro E.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

generar # consecutivo en tablas vinculadas utilizada por varios usuarios

Publicado por Enrique Heliodoro (1663 intervenciones) el 05/05/2016 10:13:08
Una cosa es calcularlo y otra es utilizar el dato calculado .... aclaremos este punto:

Esa formula en principio es correcta, se obtendrá el supuesto numero consecutivo y reitero: supuesto porque es un valor puntual que tendrá que ser GUARDADO en la tabla para que un calculo posterior de como resultado el siguiente al que se ha obtenido, si algún usuario hace el mismo calculo ANTES de que nosotros guardemos el dato .... obtendría el mismo valor que nosotros y comienza el conflicto.

Lo mas elemental: INDEXAR ese campo para que no admita duplicados (al primero que lo guarde se lo validara, a los siguientes ... les dará error) así se evita de raíz el problema de los duplicados.

Eso nos lleva al siguiente punto ¿Cómo obtener el resultado mas real posible? .... pues obteniendo ese dato justo en el instante en que se guardaría el registro, esto es: se obtiene el dato y a continuación se guarda el registro y para mayor seguridad se bloquea la tabla durante todo ese proceso (para que nadie pueda interferir ni tan siquiera leyendo la tabla).

Normalmente si a la maquina se le 'manda' hacer algo con datos remotos (incluso con datos locales) y no lo logra a la primera, vuelve a intentarlo cunado menos tres veces antes de devolver el/un error, si esa inserción se hace de forma correcta, el segundo intento (de otro usuario concurrente) le permitiría hacer su inserción pero ya obtendría el siguiente numero al nuestro (y si hubiese otro en la cola de concurrentes ... aun 'se salvaría') y si la concurrencia (esos microsegundos que se tarda en el proceso) fuera muy alta, seria el momento optimo para pensar si Access es el entorno adecuado para esa aplicación.

Hay quien toma referencias de otros entornos y aplica la técnica de llevar en una tabla independiente 'el numero siguiente disponible' (o el numero mas alto actual), y en lugar de utilizar la tabla de trabajo, acude a esta que tendría un solo campo (o dos y pocos registros, uno por contador a controlar, por ejemplo ventas, pedidos, clientes ....), pero el tema de la concurrencia seria exactamente el mismo (y no es un problema de Access, lo es de cualquier entorno, solo que en otros esta 'mas o menos previsto').

Conclusión:
.- Obtener y guardar ese índice justo en el instante anterior a guardar el registro (suele ser suficiente)
.- Si aun así se dieran casos de concurrencia:
Bloquear las tablas durante ese micro instante (Access permite tres tipos de bloqueo, utilizar el mas critico)
.- En los clientes prever (un simple control de errores) que no se pueda obtener ese valor y volver a iniciar el proceso (un simple bucle), no solo porque pudiera haber concurrencia, sino porque pudiera darse el caso de saturación en la red (o una caída o .....)

Todo esto debería analizarse y aplicarse en base a un análisis profundo del entorno REAL pues las teorías solo funcionan en el papel, el entorno real (que es un mundo independiente, el mundo del creador de esa aplicación) tendrá sus propias peculiaridades

Un consejo: Si se puede (se maneja) utilizar DAO directamente en lugar de funciones de dominio (que son 'mas de lo mismo') pero duplicaría el tiempo dado que las funciones de dominio son procesos paralelos e independientes en un entorno que procesa las acciones de una en una y simula el paralelismo intercalándolos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar