Alternative à valeurs multiples champs dans MS Access
Liés à la question: Les Champs à valeurs multiples une Bonne Idée?
Je sais que plusieurs valeurs de champs sont similaires à plusieurs-à-plusieurs relations. Quelle est la meilleure façon de remplacer plusieurs valeurs de champs dans un MS d'Accès de l'application?
J'ai une application qui a valeurs multiples domaines. Je ne suis pas sûr exactement comment faire disparaître avec ceux-ci et de mettre en œuvre exactement la même logique sous la forme de champs de valeur unique?
Ce serait la mise en œuvre en termes de table-relations quand je veux déplacer un multi-valuées relation à valeur unique.
Merci.
Je ne dirais pas qu'ils sont similaires à plusieurs-à-plusieurs liens, je ne les ai pas lu en détail mais n'imaginez pas que vous pourriez utiliser plusieurs valeurs des champs pour le PK est & FK. Êtes-vous en mesure de nous en dire plus sur la façon dont ils sont largement utilisés dans votre base de données, le nombre de tables, les champs, les valeurs, etc. Il semble que vous aurez besoin d'écrire quelques VBA logique de les dépouiller, mais nous avons d'abord besoin de plus de structure de détails.
Multi-valeurs des champs sont en effet, comme plusieurs-à-plusieurs relations, contrairement à Matt Donnan de l'assomption. Plusieurs valeurs de champs ne peuvent pas être eux-mêmes le PK est & FK, mais ils sont mise en œuvre par l'Accès "derrière les coulisses" à l'aide du système distinct de la valeur et de la jonction des tables.
Multi-valeurs des champs sont en effet, comme plusieurs-à-plusieurs relations, contrairement à Matt Donnan de l'assomption. Plusieurs valeurs de champs ne peuvent pas être eux-mêmes le PK est & FK, mais ils sont mise en œuvre par l'Accès "derrière les coulisses" à l'aide du système distinct de la valeur et de la jonction des tables.
OriginalL'auteur Jay | 2012-11-22
Vous devez vous connecter pour publier un commentaire.
Ce qui suit est probablement beaucoup plus détaillé que vous avez besoin, mais il est prévu pour un débutant. Disons que vous avez une table, MainTable:
Vous voudrez probablement une liste de titres et de pays à partir de laquelle sélectionner.
Dans le cas du Titre, il ne serait pas la pire chose à stocker les informations dans un champ dans une table, parce que vous avez une seule colonne, et les données sont peu susceptibles de changer, et vous ne sera probablement pas la création d'une requête à l'aide de données.
Pays est une autre histoire, conventionnellement vous serait de stocker un nombre et d'avoir une look-up table). C'est le genre de situation où les gens sont tentés d'utiliser un champ à valeurs multiples.
Toutefois, la convention est beaucoup plus facile. Ajouter une autre table pour les pays:
Vous pourriez appeler le champ relié de la table principale CountryID. Vous pouvez maintenant créer une relation dans la fenêtre de rapport montrant comment les Pays se rapporte à MainTable:
Vous pouvez voir que d'Appliquer l'Intégrité Référentielle est sélectionné, ce qui signifie que vous devez avoir la valeur null ou un pays dans le pays de table dans le CountryID champ.
Pour afficher les données, vous pouvez créer une requête:
Mais le point principal est d'avoir une forme qui permet l'entrée de données. Vous pouvez créer un formulaire à l'aide des assistants, mais après cela, vous devez soit cliquer avec le bouton droit CountryID et de le modifier pour une zone de liste déroulante ou ajouter une zone de liste modifiable ou zone de liste à l'aide de l'assistant. L'Option 2 est probablement le plus facile. Voici la plupart des étapes de l'assistant:
Vous disposez maintenant d'une liste déroulante de pays sur votre formulaire.
Voir aussi: créer un formulaire pour ajouter des enregistrements dans plusieurs tables
Dans Access 2010, il y a de nouvelles façons d'ajouter des valeurs à des combos lorsque l'utilisateur entre des données qui n'existe pas dans la table de valeurs possibles. Dans les versions précédentes (même si je ne suis pas sûr de 2007), vous devez utiliser le Pas Dans la Liste des événements pour ajouter des éléments à un tableau, en 2010, vous avez le choix de l'ajout d'une Liste des Éléments de formulaire d'Édition de la feuille de propriétés.
Oui, vous aurez besoin d'une table de jonction. Cela va contenir PersonID et CountryID avec un index unique sur l'ensemble des champs. Par exemple: stackoverflow.com/questions/1356492/...
Ce n'est PAS une réponse et ne pas permettre à l'utilisateur de sélectionner plus d'une valeur pour le choix, et donc n'est PAS multi-valeur.
OriginalL'auteur Fionnuala
Il n'y a pas de remplacement pour MVFs dans une base de données Access. Certains requête techniques peuvent imiter MVFs mais vous pouvez trouver de MVF fonctionnalité supérieure. 1. Il est très simple et rapide à mettre en œuvre. Pas de code et pas de SQL. 2. Il est à la fois visuel et par conséquent, il est intuitive pour l'utilisateur. Il ya certaines choses que vous ne pouvez pas faire avec une MVF si vous avez vraiment besoin de décider ce qui est le plus important.
La MVF de contrôle permet d'ajouter un multiple choix de l'INTERFACE utilisateur d'un formulaire et de le faire sans code. Il existe peu de systèmes que je connais qui sont de code gratuit, comme l'Accès à cette capacité. Cette fonctionnalité permet à des non développeurs à créer des applications typiques besoin d'un coûteux développeur. L'idée que chacun a à apprendre à utiliser une norme de transmission de conduire une voiture est stupide, et dans ce contexte, c'est aussi idiot. C'est une fonctionnalité qui permet aux gens de construire des systèmes sans code ou SQL. Quelle est la prochaine étape, ce qui suggère que tout le monde apprendre l'assembleur pour utiliser un ordinateur? Quelle est la prochaine, forçant le code de mise en page d'un formulaire?
Le remplacement est un plusieurs-à-plusieurs relation avec une table de jonction, connu à partir de la norme RDB conception, comme ils sont en effet fonctionnellement équivalent. L'accès implémente MVFs d'une table de jonction, il suffit de cacher la complexité de l'utilisateur. Je crois que les seules limites de MVFs sont liés à l'intégration, ou le portage vers d'autres SGBD, comme la jonction des tables besoin d'être reconstruit la première. Peut-être que les futures versions d'Access permettra d'offrir de le faire automatiquement, mais pour le moment, des efforts de programmation supplémentaires si les données ne sont jamais à être utilisé en dehors de l'Accès devrait être définitivement considéré comme.
J'étais en soulignant que MVFs ne doit pas être simplifiée, c'est tout. À moins qu'il est extrêmement simple de base de données, il est probable que quelqu'un va vouloir aller au-delà de la n-code “à choix multiples de l'INTERFACE utilisateur”. Je viens de passer un an à l'élaboration et à la mise à jour d'une base de données avec MVF. Sinon pour les requêtes simples qui pourraient normalement être fait avec l'Accès des designers (c'est à dire "pas de SQL") ne sont pas toujours possibles avec MVFs, en particulier la mise à jour des requêtes et les requêtes de type insert esp. avec des jointures. Même si la MVF n'est pas le champ en cours de mise à jour... souvent il ne peut même pas être référencé dans la requête sans causer de problèmes.
OriginalL'auteur David Nealey
La question est plutôt bizarre, car il pose des questions sur un champ à valeur unique, mais s'interroge également sur la table des relations. Dans un très stricte interprétation, un champ à valeurs multiples (MVF) pourrait être remplacé par une zone de texte unique rempli avec séparées par des virgules éléments... pas de table-les relations nécessaires. Au lieu de cela, je suppose que par "valeur unique" champ que la question des moyens champs standard dans un multi-table de relation, dans lequel chaque champ de chaque ligne a un unique valeur. Mais chaque enregistrement principal peut encore être liée à plusieurs lignes dans la table de valeurs, qui conserve tout l'objet de la MVF.
Examiner le plan de base de données ci-dessous pour illustrer un remplacement possible pour la MVF. Je ne suis pas y compris tous les possibles de la propriété ou pour créer de l'objet de base, juste ce qui est nécessaire pour la création de comportement souhaité, en supposant une connaissance suffisante de l'Accès à "combler les vides" et ne craint pas de code de base ou SQL.
La structure de base se compose de trois tableaux: 1) la première table, 2) "liste de valeurs" de la table, 3) table de jonction utilisé pour définir plusieurs-à-plusieurs relations.
Code client: numéroauto, primaire
CustomerName: texte court
Code: texte court, d'une longueur de 5, clé primaire
Description: texte court
Code client: long
Code: texte court
Créer des relations entre les tables. Cela nécessitera l'index défini sur les tables (non détaillé ici).
Code client -> champs code client (à faire respecter l'intégrité activé)
Code -> Code des champs (à faire respecter l'intégrité activé)
(Un champ ID pourrait également être créé pour les valeurs de la table [par exemple les Codes du Tableau] table, mais cela complique plus tard, les requêtes et les contrôles, etc. Dans un tel cas, la table de jonction contiendrait un autre champ ID et non pas directement la valeur.)
Au standard d'un module VBA, de créer une fonction comme
Requêtes utiles de la table primaire sans dupliquer les lignes nécessitera la création des requêtes d'agrégation (c'est à dire le Groupe, Compter, etc.). Sélection Simple qui pourrait être fait en une seule requête, par exemple
Plus compliqué de sélection peut nécessiter plusieurs requêtes, l'une des premières à choisir les bons dossiers, puis un autre à se joindre à la table principale de la première requête. Mais honnêtement, ces types de requêtes sont pas plus compliqué que de ce qui peut être nécessaire pour sélectionner plusieurs valeurs de Champs. En fait, la syntaxe de la requête pour MVF est non-standard et peut obtenir assez compliqué et confus, encore plus que d'avoir une table de jonction et plusieurs-à-plusieurs liens. Derrière les coulisses, l'Accès est essentiellement de faire la même chose, comme je l'ai déjà indiqué, mais parce qu'il se cache tellement de détails qu'il faire quelques requêtes encore plus difficile.
Concernant les multi-valeur de présentation et de sélection sur un formulaire, imitant les valeurs multiples de zone de liste déroulante exactement n'est pas possible, principalement en raison de l'Accès de base zone de liste déroulante ne pas avoir une multi-sélection de l'option avec la possibilité d'afficher les cases à cocher. Cependant, on peut remplir un non-lié ListBox avec la propriété [Multi Select] = Simple. Sur l'événement Form_Load, ajouter des valeurs disponibles (par exemple, le Code de l'exemple de la table) à la zone de liste à l'aide de ListBox.Méthode AddItem. Puis, dans la Form_Current, Form_AfterUpdate, Form_Undo événements, on peut ajouter le code pour afficher et/ou enregistrer les valeurs sélectionnées. Ce qui nécessite plus de code qui est probablement au-delà de la portée ici.
Techniquement la question posée à propos de "déplacement" d'un MVF à l'autre de la mise en œuvre. L'essentiel est de remplir la table des valeurs (par exemple, la table de Code dans l'exemple) avec les mêmes valeurs dans la MVF liste. Cela pourrait être un processus manuel, mais dépend de la façon dont la MVF de la zone de liste déroulante est rempli. Puis écrire une requête qui de copies de chaque MFV dans la table de jonction (par exemple [Code Client]) pour le même enregistrement principal, quelque chose comme
Une mise en œuvre complète est certainement pas une tâche simple dans l'ensemble, mais si vous le trouvez trop de problèmes avec MVFs ou si vous êtes désireux de migrer vers une autre base de données, ce type de changement peut être nécessaire de comprendre.
OriginalL'auteur C Perkins