Pregunta

He creado una aplicación MS Access 2003, configurada como una configuración front-end/back-end dividida, con un grupo de usuarios de aproximadamente cinco personas.El .mdb frontal se encuentra en un servidor de archivos de red y contiene todas las consultas, formularios, informes y código VBA, además de enlaces a todas las tablas en el .mdb back-end y algunos enlaces a fuentes de datos ODBC como un AS/ 400.El back-end se encuentra en el mismo servidor de archivos de red y solo contiene los datos de la tabla.

Esto funcionó bien hasta que "entré en funcionamiento" y un puñado de usuarios comenzaron a presentar solicitudes de mejora, informes de errores, etc.He estado implementando un nuevo código desarrollando/probando mi propia copia del .mdb de front-end en otra carpeta de red (que está vinculada al mismo .mdb de back-end) y luego publiqué mi archivo completo en un archivo "come- and-get-it", alertando a los usuarios, y ellos copian/pegan el nuevo archivo front-end en sus propias carpetas en la red.De esta manera, cada usuario puede actualizar su interfaz cuando esté en un "punto de parada" sin tener que expulsar a todos a la vez.

Descubrí que cuando estoy desarrollando ahora, a veces Access se vuelve extremadamente lento.Por ejemplo, cuando estoy desarrollando un formulario e intento hacer clic en un menú desplegable en el cuadro de propiedades, la flecha desplegable aparecerá, pero pasarán unos segundos antes de que aparezca la lista de opciones.O hay mucho retraso al seleccionar y mover controles en un formulario.O mucho retraso del teclado.

Luego, en otras ocasiones, no hay ningún retraso.

Me pregunto si es porque estoy vinculado al mismo servidor que los demás usuarios.Hice un esfuerzo razonable para configurar las consultas, formularios, informes, etc.con un bloqueo de registros mínimo, si es que existe alguno, según la necesidad.Pero es posible que me haya perdido algo o tal vez haya algún otro problema de rendimiento que deba solucionar.

Pero me pregunto si hay una manera aún mejor de configurar mi propio back-end de desarrollo .mdb, para poder probar mi código con datos "seguros" en lugar de con los mismos datos activos que el resto de los usuarios. .Me temo que es sólo cuestión de tiempo antes de que corrompa algunos datos, probablemente en el peor momento posible.

Obviamente, podría configurar un .mdb de back-end separado y reconfigurar manualmente los enlaces de la tabla en el front-end cada vez, usando el Administrador de tablas vinculadas.Pero espero que haya una solución más elegante que esa.

Y me pregunto si hay otros problemas de rendimiento que debería considerar en esta configuración de base de datos dividida y multiusuario.

EDITAR:Debería haber agregado que estoy atrapado con MS Access (no MS-SQL ni ningún otro back-end "real");Para obtener más detalles, consulte mi comentario en esta publicación.

¿Fue útil?

Solución

Si todos sus usuarios comparten la interfaz, esa es LA CONFIGURACIÓN INCORRECTA.

Cada usuario debe tener una copia individual del front-end.Se garantiza que compartir una interfaz conducirá a una corrupción frecuente de la interfaz compartida, así como a daños extraños de formularios y módulos en la interfaz.

No me queda claro cómo se podría desarrollar en la misma copia del front-end que usan los usuarios finales, ya que a partir de A2000, eso está prohibido (debido al "modelo de guardado monolítico", donde se almacena todo el proyecto VBA). en un solo campo BLOB en un solo registro en una de las tablas del sistema).

Realmente no creo que los problemas se deban al uso de datos de producción (aunque probablemente no sea una buena idea desarrollar con datos de producción, como han dicho otros).Creo que se deben a malas prácticas de codificación y a la falta de mantenimiento del código de interfaz.

  1. desactive COMPILAR A DEMANDA en las opciones de VBE.

  2. asegúrese de requerir OPCIÓN EXPLÍCITA.

  3. compila tu código con frecuencia, después de cada pocas líneas de código; para hacerlo más fácil, agrega el botón COMPILAR a tu barra de herramientas de VBE (mientras estoy en eso, también agrego el botón CALL STACK).

  4. periódicamente haga una copia de seguridad de su interfaz y descompile y vuelva a compilar el código.Esto se logra iniciando Access con el modificador /decompile, abriendo su interfaz, cerrando Access, abriendo su interfaz con Access (con la tecla SHIFT presionada para omitir el código de inicio), luego compactando la interfaz descompilada (con la tecla SHIFT). tecla presionada), luego compilando todo el proyecto y compactando por última vez.Debe hacer esto antes de cualquier publicación importante de código.

Algunos otros pensamientos:

  1. No dices si es un servidor de Windows.Los servidores Linux a los que se accede a través de SAMBA han presentado problemas en el pasado (aunque algunas personas confían en ellos y dicen que son mucho más rápidos que los servidores de Windows), e históricamente los servidores Novell han necesitado ajustes en la configuración para permitir que los archivos Jet se editen de manera confiable.También hay algunas configuraciones (como OPLOCKS) que se pueden ajustar en un servidor Windows para que todo funcione mejor.

  2. almacene sus Jet MDB en recursos compartidos con rutas cortas.\Server\Data\MyProject\MyReallyLongFolderName\Access\Databases\ leerá datos mucho más lentamente que \Server\Databases.Esto realmente hace una gran diferencia.

  3. Las tablas vinculadas almacenan metadatos que pueden quedar obsoletos.Hay dos pasos sencillos y uno drástico que se deben seguir para solucionarlo.Primero, compacte la parte trasera y luego compacte la parte delantera.Esa es la fácil.Si eso no ayuda, elimine completamente los enlaces y vuelva a crearlos desde cero.

  4. También podría considerar distribuir un MDE a sus usuarios finales en lugar de un MDB, ya que no puede descompilarse (lo que sí puede hacer un MDB).

  5. ver Preguntas frecuentes sobre el rendimiento de Tony Toews para obtener otra información generalizada sobre el rendimiento.

Otros consejos

1) volver a vincular tablas de código de acceso http://www.mvps.org/access/tables/tbl0009.htm

Una vez que estoy listo para publicar un nuevo MDE a los usuarios que volver a vincular las tablas, hacer que el MDE y copia del MDE con el servidor.

2) he creado específicamente la utilidad libre de auto de fe de actualización para que yo pudiera hacer cambios en la FE MDE tan a menudo como quisiera y estar bastante seguros de que la próxima vez que alguien fue a ejecutar la aplicación que se retiraría en el último versión. Para obtener más información sobre los errores o la utilidad de actualización automática FE ver la utilidad libre de auto de fe de actualización en http://www.granite.ab.ca/access/autofe.htm en mi página web para mantener la FE en cada PC al día.

3) Ahora cuando se trabaja en un sitio en clientes que hacen los cambios a la estructura de la tabla después de horas cuando todo el mundo está fuera del sistema. Vea CÓMO: Detectar el tiempo de inactividad del usuario o inactividad en Access 2000 (Q210297) http://support.microsoft ? .com / kbid = 210297 ACC: Cómo detectar el tiempo de inactividad del usuario o inactividad (Q128814) http://support.microsoft.com/?kbid=128814

Sin embargo, encontramos que el código que se ejecuta en el evento de temporizador debe estar desactivado para los programadores. De lo contrario las cosas extrañas comienzan a suceder cuando se está editando código.

También la vista preliminar veces no permitiría a los usuarios ejecutar un elemento de menú para exportar el informe a Excel u otros. Por lo que tuvo que hacer clic derecho sobre el informe preliminar hasta obtener algún tipo de enfoque interno de vuelta en el informe para que luego podrían exportarlo. Esto también fue ayudado por extender el temporizador de cinco minutos.

La desventaja de extender el temporizador de cinco minutos era si una persona se queda en la misma forma y al mismo control para una parte considerable de la época, es decir, haciendo las mismas preguntas a alguien, la rutina no se dio cuenta de que tenían en realidad hecho algo. Voy a estar poniendo en algún momento alguna lógica para volver el contador cada vez que hacen algo en el programa.

4) En referencia a otra persona al comentar acerca de los scripts y tal para actualizar el esquema ver Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm . A pesar de que tiene sus peculiaridades que hace crear el código VBA para actualizar tablas, campos, índices y relaciones.

El uso de VBA para desenlazar y volver a vincular las tablas al nuevo objetivo cuando se cambia de dev para prod. Ha sido a muchos años para mí recordar la sintaxis -. Sólo sé que la función era fácil de escribir

O utilice MS-Access comunicarse con MS-Access a través de ODBC, o alguna otra conexión de datos que vive fuera de la MDB cliente.

Al igual que con todas las bases de datos de archivo base, es muy probable que encuentre problemas con el uso máximo o cuando se pasa de un pequeño número mágico en algún lugar entre 2 y 30.

Además, el acceso tiende a corromper con frecuencia, por lo que la copia de seguridad, compacto y reparación necesita ser hecho sobre una base frecuente. 3 ª Parte herramientas utilizadas para existen para automatizar esta tarea.

En cuanto al rendimiento, los datos se están procesando el lado del cliente, por lo que es posible que desee utilizar algo como NetMeter para ver la cantidad de datos que está pasando a través del cable. El mismo principio sobre la indexación y evitando los recorridos de tablas se aplica a presentar DBS de base también.

Muchas buenas sugerencias de otras personas. He aquí mis 2 millicents valor. Mis datos de back-end está en el servidor accede a través de una asignación de unidad. En mi caso, la Y conducir. usuarios de producción reciben la asignación a través de una secuencia de comandos de inicio de sesión utilizando el directorio activo. A continuación, los siguientes escenarios se hace fácilmente por archivo por lotes

  • Desarrollar contra el equipo local haciendo un comando subst en un archivo por lotes
  • ejecutar informes con los datos de las últimas noches al señalar Y al servidor de copia de seguridad (sólo lectura)
  • ejecutar informes en contra de final de mes por los datos que apunta al directorio correcto
  • prueba contra escenarios especializados manteniendo un directorio especial

En mi entorno (5 usuarios simultáneos promedio, 1000 de filas, no de 10.000.) Se ha producido la corrupción, pero es raro y manejable. Sólo una vez en los últimos años hemos recurrido al día anterior copia de seguridad. Utilizamos SQL Server para nuestra mayor volumen de cosas, pero no es lo más conveniente para desarrollar en contra, probablemente porque no tenemos un administrador de SQL en el sitio.

También puede encontrar algunas de las respuestas a esta pregunta (cómo extraer esquemas de acceso) ser útil también. Una vez que haya extraído un esquema utilizando una de las técnicas que se sugirieron a obtener toda una gama de nuevas opciones como la posibilidad de utilizar el control de la fuente sobre los esquemas, además de ser capaz de crear fácilmente entornos de prueba "limpios".

Editar para responder a comentar: No hay manera fácil de control de código, una base de datos en su formato nativo, pero los archivos de esquema son archivos de texto como cualquier otro. Por lo tanto, se puede comprobar a entrar y salir del software de control de código fuente de su elección para un fácil control de versión / reversiones.

O por supuesto, depende de usted que tiene una serie de scripts creados para volver a construir su base de datos a partir del esquema. Una vez que lo hace, es normalmente bastante trivial para crear una versión opción / alternativa que reconstruye en un lugar diferente, que le permite construir entornos de prueba desde cualquier versión anterior comprometida del esquema. Espero que aclara un poco!

Si desea actualizar el esquema MDB parte de atrás de forma automática cuando se libera una nueva FE a los clientes luego ver Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm estará feliz de generar el código VBA necesita volver a crear un MDB . O el código para crear las diferencias entre los dos bancos multilaterales de desarrollo para que pueda hacer una actualización de la versión de la MDB ya existente SER. Es un poco raro pero funciona.

Yo lo uso todo el tiempo.

Es necesario comprender que un archivo MDB compartida para los datos no es una solución robusta. Microsoft sugiere que SQL Server u otro servidor de base de datos basada sería una solución mucho mejor y le permitirá utilizar el mismo extremo de acceso frontal. El asistente de migración podría ayudarle a hacer el cambio si quería ir en esa dirección.

Como otros usos señalados, se producirá la corrupción. Es simplemente una cuestión de con qué frecuencia, si no.

Para entender los problemas de rendimiento que necesita para entender que al servidor el archivo MDB con los datos en ella es simplemente eso, un archivo. Dado que ningún código se ejecuta en el servidor, el servidor no entiende las transacciones, bloqueo de registros, etc. Simplemente sabe que no es un archivo que un montón de gente está tratando de leer y escribir simultaneamente.

Con un sistema de base de datos como SQL Server, Oracle, DB2. MySQL, etc el programa de base de datos se ejecuta en el servidor y se ve en el servidor como un solo programa de acceso al archivo de base de datos. Es el programa de base de datos (que se ejecuta en el servidor) que se encarga de bloqueo de registros, transacciones, concurrencia, la explotación forestal, los datos de copia de seguridad / recuperación y todas las otras cosas buenas que uno quiere de una base de datos.

Desde un programa de base de datos diseñada para ejecutarse en el servidor está diseñado para hacer eso y sólo eso, sino que puede hacerlo mucho mejor y más eficientemente que un programa como el acceso de leer un escribir un archivo compartido (MDB).

Hay dos reglas para el desarrollo de datos en tiempo real contra

  

La primera regla es. . . nunca desarrollan   en contra de datos en tiempo real. Ni nunca.

     

La segunda regla es. . .Nunca desarrollar   en contra de datos en tiempo real. Ni nunca.

Puede programáticamente cambiar los enlaces de tablas vinculadas, por lo que puede escribir una macro para cambiar sus enlaces cuando se está desplegando una nueva versión.

La aplicación es lenta porque es MS Access, y no le gusta a muchos usuarios concurrentes (donde muchos es cualquier número> 1).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top