Création d'une base de données dans Microsoft Access consultable uniquement par certains champs

StackOverflow https://stackoverflow.com/questions/72528

  •  09-06-2019
  •  | 
  •  

Question

Comment voulez-vous créer une base de données dans Microsoft Access qui ne peut être recherchée que par certains champs et contrôlée par seulement quelques zones de texte (nécessaires) et cases à cocher sur un formulaire, de sorte qu'il soit facile à utiliser - pas de requêtes difficiles?

Exemple: Vous avez plusieurs zones de texte et plusieurs cases à cocher correspondantes dans un formulaire. Lorsque la case à cocher en regard de la zone de texte est cochée, la zone de texte est activée et vous pouvez ensuite effectuer une recherche en fonction de ce qui est saisi dans cette zone de texte.

(En fait, je le sais déjà, je ne fais que jouer à stackoverflow, dans lequel je pose une question et je connais la réponse simplement pour augmenter les connaissances du monde en matière de codage! réponse à venir dans environ 5 minutes)

Était-ce utile?

La solution

Il s’agit en fait d’un sujet assez vaste qui présente de nombreux problèmes potentiels. La plupart des livres intermédiaires à avancés sur l'accès comporteront une sorte de section traitant de "Requête par formulaire". où vous avez un formulaire indépendant qui permet à l'utilisateur de choisir certains critères et qui, une fois exécuté, écrit SQL à la volée pour renvoyer les données correspondantes.

Dans toute structure de données autre que plate, à table unique, il ne s’agit pas d’une tâche triviale, car la clause FROM du SQL dépend des tables interrogées dans la clause WHERE.

Quelques exemples de formulaires QBF issus d'applications que j'ai créées pour les clients:

  1. Interrogation de 4 tables sous-jacentes
  2. Interrogation d'une table unique et plate
  3. Interrogation de 3 tables sous-jacentes
  4. Interrogation de 6 tables sous-jacentes
  5. Interrogation de 2 tables sous-jacentes

Le premier est géré par un module de classe dont les propriétés reflètent les critères sélectionnés dans ce formulaire et par des méthodes qui écrivent les clauses FROM et WHERE. Cela facilite grandement l'ajout d'autres champs (tant que ces champs ne proviennent pas de tables autres que celles déjà incluses).

La partie la plus complexe du processus est la rédaction de la clause FROM, car vous devez disposer des types de jointure appropriés et inclure uniquement les tables figurant dans la clause SELECT ou la clause WHERE. Si vous incluez autre chose, vous ralentirez beaucoup votre requête (surtout si vous avez des jointures externes).

Mais il s’agit d’un sujet complexe, et il n’existe pas de solution miracle - vous devez créer quelque chose comme cela pour chaque application. Il est également important que vous le testiez minutieusement avec les utilisateurs, car ce qui est tout à fait clair et compréhensible pour vous, le développeur, est souvent assez mystérieux pour mystifier les utilisateurs finaux.

Mais c’est un principe qui ne s’applique pas uniquement à QBF!

Autres conseils

Ma propre solution consiste à ajouter un "filtre". contrôle dans la partie en-tête du formulaire pour chacune des colonnes sur lesquelles je veux pouvoir filtrer (généralement tout ...). Chaque fois, un tel "filtre" le contrôle est mis à jour, une procédure sera exécutée pour mettre à jour le filtre actif du formulaire, à l'aide de l'option "BuildCriteria". fonction disponible dans Access VBA.

Ainsi, quand je tape " * cable * " dans le " filtre " en haut de la colonne Description du bon de commande, le libellé "WHERE PODescription is like", * cable * " est automatiquement ajouté à la propriété MyForm.filter ....

Certains objecteraient que filtrer une source d'enregistrement constituée de plusieurs tables sous-jacentes peut devenir très délicat. C'est vrai. La meilleure solution est donc, selon moi, de toujours (je le veux dire!) Utiliser une table plate ou une vue (requête "SELECT" dans Access) comme source d'enregistrement d'un formulaire. Cela vous facilitera la vie!

Une fois que vous en êtes convaincu, vous pouvez même penser à un petit module qui automatisera l'ajout de " filtre " contrôles et procédures associées à vos formulaires. Vous serez sur la bonne voie pour une véritable interface client conviviale.

Au démarrage, vous devez afficher un formulaire et désactiver les autres menus, etc. Ainsi, votre utilisateur ne verra jamais que vos fonctionnalités limitées et ne pourra pas ouvrir directement les tables, etc.

.

Cet extrait du livre, Protection et sécurité des bases de données Microsoft Access dans le monde réel , devrait être éclairant.

Pour une question aussi vague, tout ce que je peux répondre, c'est d'ouvrir MS Access et de cliquer plusieurs fois avec la souris.

À bien y penser:
Utilisez le " WhereCondition " argument de la " OpenForm " méthode

Si la fonctionnalité est très limitée et / ou spécialisée, une base de données SQL sera probablement excessive, de toute façon, par exemple. met en cache toutes les combinaisons de données localement, même en mémoire, et en affiche une en fonction des cases à cocher du formulaire. Auparavant, vous pouviez révoquer les autorisations de la table et les accorder uniquement aux vues / procédures qui interrogeaient les données de la manière prescrite. Cependant, la sécurité a été supprimée de MS Access 2007. Vous pouvez donc réellement empêcher les utilisateurs de contourner votre application simple en utilisant, par exemple: , Excel et interroger les données comme bon leur semble ... mais n’est-ce pas le but d’une base de données d’entreprise? ; -)

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