Question

J'ai créé un MS Access 2003 l'application, mis en place en tant que configuration divisée frontal / back-end, avec un groupe d'utilisateurs d'environ cinq personnes. Le .mdb frontal se trouve sur un serveur de fichiers réseau, et il contient toutes les requêtes, les formulaires, les rapports et le code VBA, ainsi que des liens vers toutes les tables de la .mdb back-end et quelques liens vers des sources de données ODBC comme un AS / 400. L'extrémité arrière se trouve sur le même serveur de fichiers réseau, et il a juste les données de la table en elle.

fonctionnait bien jusqu'à ce que je « suis allé vivre » et ma poignée d'utilisateurs a commencé à venir avec des demandes d'amélioration, rapports de bugs, etc. Je suis le déploiement nouveau code en développement / test dans ma propre copie du front-end .mdb dans un autre dossier réseau (qui est lié à la même arrière-plan .mdb), puis l'affichage de mon dossier complet dans un « come-et-get-it » dossier, alerter les utilisateurs, et ils vont copier / coller le nouveau fichier frontal à leurs propres dossiers sur le réseau. De cette façon, chaque utilisateur peut mettre à jour leur extrémité avant quand ils sont à un « point d'arrêt » sans avoir à démarrer tout le monde à la fois.

J'ai trouvé que lorsque je suis en train de développer, parfois l'accès devient extrêmement lent. Comme, quand je développe une forme et d'essayer de cliquer sur un menu déroulant sur la boîte de propriétés, la flèche déroulante poussera, mais il faudra quelques secondes avant que la liste des options apparaît. Ou il y a des tonnes de retard dans la sélection et le déplacement des contrôles sur un formulaire. Ou beaucoup de retard du clavier.

Alors, à d'autres moments, il n'y a pas de lag du tout.

Je me demande si c'est parce que je suis lié à la même arrière que les autres utilisateurs. Je l'ai fait faire un effort raisonnable pour mettre en place les requêtes, formulaires, rapports, etc. avec verrouillage d'enregistrement minimal, voire pas du tout, en fonction de la nécessité. Mais je l'ai manqué quelque chose, ou peut-être il y a un autre problème de performance que je dois répondre.

Mais je me demande s'il y a une façon pour moi encore mieux de mettre en place mon propre développement back-end .mdb, donc je peux être tester mon code sur des données « sûres » au lieu des mêmes données en temps réel que le reste des utilisateurs. Je crains que c'est seulement une question de temps avant que je corruption des données, probablement au pire moment possible.

De toute évidence, je pouvais mettre en place un .mdb back-end séparé et reconfigurer manuellement les liens de la table à l'avant à chaque fois, en utilisant le gestionnaire de table liée. Mais j'espère qu'il ya une solution plus élégante que cela.

Et je me demande s'il y a d'autres problèmes de performance j'envisagerait dans ce multi-utilisateurs, la configuration de base de données divisée.

EDIT: Je aurais dû ajouter que je suis coincé avec MS Access (pas MS-SQL ou tout autre extrémité arrière « réel »); pour plus de détails voir mon commentaire à ce poste.

Était-ce utile?

La solution

Si tous les utilisateurs partagent l'avant, c'est LA CONFIGURATION MAL.

Chaque utilisateur doit disposer d'une copie individuelle de l'extrémité avant. Le partage d'une extrémité avant est garanti pour conduire à la corruption fréquente de l'extrémité avant commune, ainsi que des corruptions étranges formes et des modules à l'avant.

Il est pas clair pour moi comment vous pourriez être en développement dans la même copie de l'extrémité avant que les utilisateurs finaux utilisent, depuis commençant par A2000, qui est interdit (à cause du « modèle monolithique de sauvegarde », où l'ensemble VBA projet est stocké dans un seul champ BLOB dans un enregistrement unique dans l'une des tables du système).

Je ne pense pas que les problèmes sont causés par l'utilisation des données de production (mais il est probablement pas une bonne idée de développer par rapport aux données de production, comme d'autres l'ont dit). Je pense qu'ils sont causés par des mauvaises pratiques de codage et le manque de maintenance de votre code frontal.

  1. Désactiver compilable sur demande dans les options VBE.

  2. assurez-vous besoin OPTION EXPLICITE.

  3. compiler votre code souvent, après quelques lignes de code -. Pour vous faciliter la tâche, ajouter le bouton COMPILE à votre barre d'outils VBE (alors que je suis, j'ajoute également le bouton CALL STACK)

  4. faire périodiquement une copie de sauvegarde de votre extrémité avant et décompiler et recompiler le code. Ceci est accompli en lançant Access avec le commutateur / décompiler, l'ouverture de votre extrémité avant, fermeture de l'accès, l'ouverture de votre extrémité avant avec l'accès (avec la touche MAJ enfoncée pour contourner le code de démarrage), puis compacter l'extrémité avant décompilé (avec la touche SHIFT clé maintenue enfoncée), puis compiler l'ensemble du projet et le compactage, une dernière fois. Vous devez le faire avant toute libération de code majeur.

Quelques autres pensées:

  1. vous ne dites pas si c'est un serveur Windows. serveurs Linux accessibles sur SAMBA ont présenté des problèmes dans le passé (même si certaines personnes ne jurent que par eux et disent qu'ils sont largement plus rapide que les serveurs Windows), et historiquement des serveurs Novell ont besoin d'avoir des paramètres retouchés pour activer les fichiers Jet d'être fiable édité. Il y a aussi quelques paramètres (comme OpLocks) qui peut être ajustée sur un serveur Windows pour faire fonctionner les choses mieux.

  2. stocker vos BDM Jet en actions avec des chemins courts. \ Server \ Data \ MyProject \ MyReallyLongFolderName \ Access \ Databases \ va être données de lecture beaucoup plus lent que \ Server \ bases de données. Cela fait vraiment une énorme différence.

  3. tables liées stocker les métadonnées qui peuvent devenir obsolètes. Il y a deux étapes et un un radical à prendre pour y remédier. Tout d'abord, compacter l'arrière, puis compacter l'avant. C'est facile. Si cela ne fonctionne pas, supprimer complètement les liens et les recréer à partir de zéro.

  4. vous pouvez également envisager de distribuer un fichier MDE à vos utilisateurs finaux au lieu d'un MDB, comme il ne peut pas uncompile (qui peut BMD).

  5. voir Tony Performance Toews FAQ pour d'autres informations sur la performance généralisée .

Autres conseils

1) Relink tables d'accès à partir du code http://www.mvps.org/access/tables/tbl0009.htm

Une fois que je suis prêt à publier un nouveau MDE aux utilisateurs que je RELINK les tableaux, faire le MDE et copiez le MDE au serveur.

2) Je spécifiquement créé l'utilitaire gratuit Auto FE Updater pour que je puisse apporter des modifications à la MDE FE aussi souvent que je voulais et être tout à fait confiant que la prochaine fois que quelqu'un est allé exécuter l'application qu'il se retirerait dans le dernier version. Pour plus d'informations sur les erreurs ou l'utilitaire Auto FE Updater voir l'utilitaire gratuit Auto FE Updater http://www.granite.ab.ca/access/autofe.htm sur mon site pour garder le FE sur chaque PC jusqu'à ce jour.

3) Maintenant, lorsque vous travaillez sur place à un client je fais les mises à jour de la structure de la table après les heures où tout le monde est hors du système. Voir COMMENT: Détecte l'utilisateur Temps d'inactivité ou d'inactivité dans Access 2000 (Q210297) http://support.microsoft ? .com / kbid = 210297 ACC: Comment détecter l'utilisateur Temps d'inactivité ou d'inactivité (Q128814) http://support.microsoft.com/?kbid=128814

Cependant, nous avons constaté que le code qui fonctionne sur l'événement timer doit être désactivé pour les programmeurs. Sinon, les choses étranges commencent à se produire lorsque vous éditez le code.

imprimer également aperçu ne parfois pas permettre aux utilisateurs d'exécuter un élément de menu pour exporter le rapport vers Excel ou autres. Donc, vous avez eu un clic droit sur le rapport prévisualisé pour obtenir un certain type de mise au point interne de retour sur le rapport afin qu'ils puissent ensuite l'exporter. Cela a également été aidé par l'extension de la minuterie à cinq minutes.

L'inconvénient de prolonger la minuterie à cinq minutes était si une personne reste dans la même forme et le même contrôle pour des parties importantes de la journée, à savoir quelqu'un qui fait les mêmes enquêtes, la routine ne se rendent pas compte qu'ils avaient en fait quelque chose. Je vais mettre dans une logique quelque temps pour remettre ce compteur chaque fois qu'ils font quelque chose dans le programme.

4) En ce qui concerne une autre personne des commentaires sur les scripts et une telle mise à jour du schéma voir Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm . Bien qu'il a ses bizarreries il crée le code VBA pour mettre à jour des tables, des champs, des index et des relations.

Utilisez VBA pour supprimer le lien et re-lier vos tables à la nouvelle cible lors du passage de dev à prod. Il a été de nombreuses années pour me rappeler la syntaxe -. Je sais que la fonction était simple d'écrire

Ou utilisez MS-Access pour parler à MS-Access via ODBC ou une autre connexion de données qui vit en dehors du mdb client.

Comme toutes les bases de données de base de fichiers, vous finirez par rencontrer des problèmes avec l'utilisation de pointe ou quand vous allez sur un petit nombre magique quelque part entre 2 et 30.

En outre, l'accès tend à corrompre fréquemment, donc sauvegarde, compact et réparation doit être fait sur une base régulière. 3e partie des outils utilisés pour existent pour automatiser cette tâche.

En ce qui concerne la performance va, les données sont en cours de traitement côté client, de sorte que vous pouvez utiliser quelque chose comme NetMeter pour voir combien de données va sur le fil. Le même principe sur l'indexation et qui évite les analyses de table s'appliquent à déposer ainsi dbs de base.

De nombreuses bonnes suggestions d'autres personnes. Voici mes 2 millicents vaut la peine. Mes données back-end est sur le serveur accessible via un mappage de lecteur. Dans mon cas, le lecteur Y. Les utilisateurs de production obtiennent le mappage par un script de connexion en utilisant le répertoire actif. Ensuite, les scénarios suivants sont facilement effectués par fichier batch:

  • Développer contre l'ordinateur local en faisant une commande dans un fichier subst batch
  • exécuter des rapports par rapport aux données dernières nuits en pointant Y sur le serveur de sauvegarde (lecture seule)
  • exécuter des rapports contre la fin des données du mois en pointant vers le bon répertoire
  • test de scénarios contre spécialisés en gardant un répertoire spécial

Dans mon environnement (en moyenne 5 utilisateurs simultanés, 1000 de lignes, et non 10 000 de.) La corruption a eu lieu, mais il est rare et facile à gérer. Une seule fois au cours des dernières années que nous avons eu recours à la sauvegarde précédente jours. Nous utilisons SQL Server pour nos affaires de volume plus élevé, mais il est pas aussi pratique de se développer contre, probablement parce que nous n'avons pas un administrateur SQL sur le site.

Vous trouverez peut-être aussi quelques-unes des réponses à cette question (comment extraire les schémas d'accès) être utiles. Une fois que vous avez extrait un schéma en utilisant l'une des techniques qui ont été proposées vous gagnez toute une gamme de nouvelles options comme la possibilité d'utiliser le contrôle de la source sur les schémas, ainsi que d'être en mesure de construire facilement des environnements de test « propres ».

Modifier pour répondre à un commentaire: Il n'y a pas moyen facile de contrôler la source d'une base de données Access dans son format natif, mais les fichiers de schéma ne sont que des fichiers texte comme les autres. Par conséquent, vous pouvez les vérifier dans et hors du logiciel de contrôle de code source de votre choix pour le contrôle Version facile / rollbacks.

Ou bien sûr, il dépend de vous avoir une série de scripts mis en place pour reconstruire votre base de données à partir du schéma. Une fois que vous le faites, il est normalement assez trivial pour créer une option / version alternative qu'il reconstruit dans un endroit différent, vous permettant de créer des environnements de test de toute version validée précédente du schéma. J'espère que cela clarifie un peu!

Si vous souhaitez mettre à jour le schéma MDB arrière automatiquement lorsque vous relâchez un nouveau FE aux clients voient alors Compare'Em http://home.gci.net/~mike-noel/CompareEM-LITE/CompareEM.htm va heureusement générer le code VBA besoin de recréer un MDB . Ou le code pour créer les différences entre les deux banques multilatérales de développement afin que vous puissiez faire une mise à niveau de version du MDB déjà existant BE. Il est un peu bizarre, mais fonctionne.

Je l'utilise tout le temps.

Vous devez comprendre qu'un fichier .mdb partagé pour les données ne sont pas une solution robuste. Microsoft suggère que SQL Server ou une autre base de données sur serveur serait une solution beaucoup mieux et vous permettra d'utiliser la même extrémité avant d'accès. L'assistant de migration serait vous aider à faire le changement si vous voulez aller dans ce sens.

Comme autre utilise souligné, la corruption se produira. Il est tout simplement une question de la fréquence, pas si.

Pour comprendre les problèmes de performance que vous devez comprendre que le serveur le fichier mdb avec les données, il est simplement que, d'un fichier. le serveur ne comprend pas les transactions, le verrouillage des enregistrements, etc. puisqu'aucun code est exécuté sur le serveur, il sait simplement qu'il ya un fichier qu'un tas de gens essaient de lire et écrire simultaniously.

Avec un système de base de données telles que SQL Server, Oracle, DB2. MySQL etc. le programme de base de données fonctionne sur le serveur et se tourne vers le serveur comme un programme unique d'accéder au fichier de base de données. Il est le programme de base de données (en cours d'exécution sur le serveur) qui gère le verrouillage des enregistrements, les transactions, la concurrence, l'enregistrement, la sauvegarde des données / récupération et toutes les autres belles choses que l'on veut à partir d'une base de données.

Depuis un programme de base de données conçu pour fonctionner sur le serveur est conçu pour faire et seulement cela, il peut le faire beaucoup mieux et plus efficently qu'un programme comme l'accès à lire une écriture d'un fichier partagé (mdb).

Il y a deux règles pour le développement par rapport aux données en direct

  

La première règle est. . . ne jamais développer   par rapport aux données en direct. Jamais.

     

La deuxième règle est. . .Ne développer   par rapport aux données en direct. Jamais.

Vous pouvez modifier les liaisons programatically pour les tables liées, de sorte que vous pouvez écrire une macro pour modifier vos liens lorsque vous déployez une nouvelle version.

L'application est lente, car il est MS Access, et il n'aime pas beaucoup d'utilisateurs simultanés (où beaucoup est un nombre> 1).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top