Programación General > Visual Basic 6.0 e inferiores
Soporar usuarios recurrentes en un Sistema VB6
lagunax:
Hola a todos nuevamente, ojala alguien pueda iluminarme un poco esta duda que tengo.
Acabo de montar a un servidor un sistema de altas-bajas-cambios-consultas en VB6 con una BD access 2003. El problema es que me piden que este sistema sea capaz de soportar usuarios recurentes (varios usuarios utilizandolo a la vez) pero realmente no tengo ni idea de que tipo de procesos se deben implementar para que exista un soporte de este tipo. Estoy completamente en blanco y sin pistas de donde poder investigar esto.
¿Alguien podría ayudarme a conocer más acerca de este tema, porfavor?
:hitcomp:
Nebire:
Básicamente tu programa no tiene que hacer nada excepto detectar cuando la base de datos está inoperante, por exceso de tráfico, para informar al usuario y en todo caso guardar las transacciones localmente si la importancia de guardar los datos es muy elevada.
Casi toda la responsabilidad de esa tarea recáe en la base de datos. Nunca he usado Access2003 por tanto no puedo referirte como se comportará con accesos recurrentes, si te diera problemas trata de trasladarlo a SQLServer. La cuestión es la base de datos la has diseñado tú ? o tú sólo has creado las funciones de consulta y actualización de la BD ?. Si es lo 2º el administrador de la BD es quien debería proveer las transacciones recurrentes. Si todo depende de ti, no te queda más remedio que empollarte la utilización de Access2003, para poder establecer la funcionalidad adecuadamente.
Se supone de entrada que hay un servidor que porta la base de datos y se supone que hay varios terminales que tienen una instancia (copia) del programa que has realizado. si esto es así en teoría no debería haber problemas, si los hay hay que acceder a la parte de administración de la base de datos y hacer lo cambios pertienentes, en SQLServer sería tocar la BD Master para configurar algunos parámetros (de permisos de usuarios más que nada) y quizás crear algunos trigger...
En el supuesto y raro caso de que el acceso a la BD fuere desde un único terminal y se hicieran varias transacciones a la BD desde dicha instancia ver nota para que las llamadas fueran concurrentes estas deberían tratarse como multihilo. Lo cual puede programarse con cierta facilidad usando 2 timers que procesan las transacciones. Un timer está a la escucha de transacciones entrantes, si detecta una lo añade a una coleccion de transacciones, el otro timer procesa la transacciones de la colección si detecta que la colección contiene transacciones toma la 1ª dentro de la colección y la procesa, al final de dicha transacción dedica un evento para notificar el resultado de la transacción y acto seguido elimina dicha transacción de la colección, en un pequeño intervalo volverá a consultar si hay transacciones pendientes...
El manejo de la colección podría y debería incorporar capacidad de prioridades, cada funcionalidad que se realice en una base de datos debería tener una prioridad, cuando se realice una petición de una transacción se consulta su prioridad, para añadirla en la colección de transacciones debe hacerse en la posición que le corresponda. esta posición se determina recorriendo la colección de atrás adelante, y tomando la posición la que se alcance cuando coincida una transacción del mismo nivel de prioridad (va detrás de esa) . Un par te punteros que describan: Transaccion_Espera_prioridad_Minima y Transaccion_Espera_prioridad_Maxima registran cual es la prioridad mínima y máxima actualmente en la colección, entonces añadir una nueva transacción puede colocarse directamente al inicio o al final sin recorrer toda la colección comparando dichos valores, al eliminar una transación de la colección habría que actualizar dichos valores, pero seguiría siendo rentable si la cola de transacciones llegara a ser muy alta, para una concuerrencia de unas pocas decenas es probable que no se note eficiencia. Opcionalmente la prioridad podría ser horaria, es decir última en entrar última en procesarse, por tanto en este caso siempre se añadirían al final y se eliminarían del principio....
Básicamente el mecanismo de recurrencia está descrito en los 2 párrafos anteriores, pero como te digo las bases de datos hoy por hoy incorporan dichos mecanismos, sólo deben hacerse las configuraciones precisas (y especialmente los permisos de acceso de los usuarios)... por ejemplo si se determina una cola máxima de transacciones en la coleccción en espera de procesar, cualquier petición de añadir una nueva transacción en espera será respondida como cola llena "guarde localmente su propia cola de transacciones en espera y vuelva a solicitar dentro del intervalo x"... El cliente al recibir dicha notificación de vuelta si la transacción no procede de otra instancia de este mecanismo lo guarda en una instancia de este mecanismo de modo local y actualiza su timer a un intérvalo sugerido de x, cuando la cola de transacciones esté abierta quizás el intervalo de espera debe cambiarse a uno más fluído, esto se debe enviar como el evento de respuesta de la transacción...
p.d.: si necesitas un ejemplo sencillo para crear y administrar un sistema de cola de transacciones podría escribir un pequeño código ilustrando los pasos sencillos, pero deberías ser paciente ya que tampoco tengo en estos momentos todo el tiempo del mundo para atender en el foro como me gustaría... pero bueno si cabe la posibilidad de que la descripción de tu problema no fuere exactamente como describes y necesitas un mecanismo de este tipo, lo indicas y con paciencia le dedicaría algún ratillo...
nota: (es decir habría una aplicación secundaria por cada operario que envía sus datos a este programa y este los postprocesa para manejarse con la BD... no sería lo más óptimo pero en configuraciones donde sólo un terminal es potente y los demás son poco potentes o viejos quizás sea la solución provisional más aceptable)
lagunax:
Gracias por tu respuesta tan rápida Nebire.
De hecho el sistema es de lo más sencillo, utilizo setencias ADO para accesar a la BD y en algunos casos lo hago manualmente (sin ADO, definiendo las variables).
La BD en Access 2003 la diseñe de la manera más sencilla, como tampoco he utilizado access tan a fondo, más que nada como un repositorio de datos, únicamente cree los campos de la misma con sus respectivos tipos de datos. Del acceso y modifcicación de la BD esta a cargo el código en Basic.
Si pudieras ayudarme con ese codigo de crear y administrar un sistema de cola de transacciones te estaré sumamente agradecido, claro que puedo esperar, no hay problema con la espera. Como realmente es un diseño muy sencillo tanto del programa de basic como de la BD espero que no te resulte complicado.
De nuevo gracias por tu ayuda, estaré al pendiente de tu respuesta.
:good:
Nebire:
Bien, aquí en mi localidad nos tomamos 'puente' hasta el lunes, por tanto tengo un tiempo disponible...
si no te importa te lo mostraré en 3 o 4 pqueños proyectos de modo que a cada paso el proyecto es lo anterior más algunos cambios o añadidos. De ese modo el seguimiento del mismo te será creo que más fácil entenderlo... Si lo coloco todo terminado es probable que te cueste segurilo y entender la relevancia de cada cosa.
Descripción del primer proyecto:
Así pués el primer proyecto será el flujo entre las partes implicadas... para simplificar el caso y no depender de posibles errores y /o malas instalaciones, configuraciones, en ejemplos nunca suelo trabajar con bases de datos sino con estructuras de modo que se separa claramente lo que es entender el problema planteado de los posibles problemas de los defectos o carencias ajenas al puro entendimiento del problema.
En este proyecto proveeremos una clase que trabaje con las colecciones y provea los eventos, es quien despacha las transacciones. Y proveeremos un formulario que actúa del consumidor de esta clase. en el siguiente proyecto se crearían instancias de este formulario para simular diferentes usuarios...
... queda a la espera ...
Nebire:
Hola Lagunax, te comento...
El programa de ejmplo ya está bastante avanzado, no obstante mañana tengo el día bastante ocupado.
Así, entre el lunes y el martes espero encontrar otro momento para finalizarlo... probarlo (por si se me coló algún error de bulto9 y subirlo.
Navegación
[#] Página Siguiente
Ir a la versión completa