Alternative zum mehrwertige Felder in MS Access
Verwandte Frage: Mehrwertigen Feldern eine Gute Idee?
Ich weiß, dass mehrwertige Felder sind ähnlich wie viele-zu-viele-Beziehung. Was ist der beste Weg, um zu ersetzen, mehrwertige Felder in einer MS Access-Anwendung?
Ich habe eine Anwendung, die multi-valued fields. Ich bin nicht sicher, wie genau zu tun, Weg mit denen und implementieren genau die gleiche Logik in form von Feldern, die einwertige?
Was wäre die Umsetzung im Hinblick auf die Tabellen-Beziehungen, wenn ich mich bewegen will, eine mehrwertige Beziehung zu einem Wert.
Danke.
Ich würde nicht sagen, dass Sie ähnlich sind wie bei viele-zu-viele-Beziehungen, ich habe Sie nicht gelesen, im detail aber nicht vorstellen, Sie könnte verwenden mehrwertige Felder für die PK ' s & FK ist. Sind Sie in der Lage, uns zu sagen, mehr über, wie umfangreich Sie sind in Ihrer Datenbank wie viele Tabellen, Felder, Werte etc. Es scheint, man wird schreiben müssen, das einige VBA-Logik, um Sie auszuziehen, aber zuerst müssen wir mehr Struktur details.
Mehrwertige Felder sind in der Tat wie viele-zu-viele-Beziehungen, im Gegensatz zu Matt Donnan ' s Annahme. Mehrwertige Felder können nicht selbst die PK 's & FK' s, aber Sie sind realisiert indem Sie den Zugang "hinter die kulissen" durch die Verwendung von separaten system Wert-und verknüpfungstabellen.
Mehrwertige Felder sind in der Tat wie viele-zu-viele-Beziehungen, im Gegensatz zu Matt Donnan ' s Annahme. Mehrwertige Felder können nicht selbst die PK 's & FK' s, aber Sie sind realisiert indem Sie den Zugang "hinter die kulissen" durch die Verwendung von separaten system Wert-und verknüpfungstabellen.
InformationsquelleAutor Jay | 2012-11-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das folgende ist wahrscheinlich weit Ausführlicher, als Sie brauchen, aber es ist für einen Anfänger. Lassen Sie uns sagen, Sie haben eine Tabelle, MainTable:
Werden Sie wahrscheinlich wollen eine Liste der Titel und der Länder, aus denen zu wählen.
In dem Fall der Titel, wäre es nicht die schlechteste Sache, die Speicherung der Informationen in ein Feld in einer Tabelle, denn Sie haben eine einzelne Spalte und die Daten wahrscheinlich nicht zu ändern, und Sie werden wahrscheinlich nicht werden, erstellen Sie eine Abfrage mit den Daten.
Land ist eine andere Geschichte, die konventionell würden Sie speichern eine Nummer und haben eine look-up-Tabelle. Es ist die Art von situation, wo die Menschen sind geneigt, um ein multi-value-Feld.
Jedoch, die Konvention ist das viel einfacher. Fügen Sie eine weitere Tabelle für das Land:
Können Sie gerne rufen Sie das zugehörige Feld in der Haupttabelle CountryID. Sie können nun eine Beziehung in der Beziehung-Fenster zeigt, wie Land bezieht sich auf MainTable:
Können Sie sehen, dass mit Referentieller Integrität aktiviert, was bedeutet, dass Sie muss null oder ein Land aus der Länder-Tabelle in der CountryID Feld.
Um die Daten anzuzeigen, können Sie eine Abfrage erstellen:
Aber der wichtigste Punkt ist, um eine form, die es erlaubt, Daten Eintrag. Sie können erstellen ein Formular mit dem Assistenten, aber nach, dass, müssen Sie entweder mit der rechten Maustaste CountryID und ändern Sie es in ein Kombinationsfeld oder fügen Sie ein Kombinationsfeld-oder Listenfeld mit dem Assistenten. Option 2 ist wahrscheinlich das einfachste. Hier sind die meisten der Schritte des Assistenten:
Haben Sie jetzt eine dropdown-Liste der Länder, die auf Ihre form.
Siehe auch: erstellt ein Formular zum hinzufügen von Datensätzen in mehrere Tabellen
In Access 2010 gibt es neue Möglichkeiten, das hinzufügen von Werten zu combos, wenn der Benutzer Daten eingibt, die nicht vorhanden in der Tabelle der möglichen Werte. In früheren Versionen (obwohl ich nicht sicher bin, 2007), die Sie verwenden würden, die Nicht In Liste-Ereignis zum hinzufügen von Elementen zu einem look-up-Tabelle, in 2010, haben Sie die Wahl des Hinzufügens eines Listenelemente Bearbeiten Formular, um das Eigenschaftenblatt.
Ja, Sie benötigen eine Zuordnungstabelle. Diese enthält PersonID und CountryID mit einem eindeutigen index auf die Kombination von Feldern. Zum Beispiel: stackoverflow.com/questions/1356492/...
Dies ist NICHT die Antwort und nicht dem Benutzer erlauben, zu wählen Sie dann einen Wert für die Wahl, und damit ist NICHT multi-Wert.
InformationsquelleAutor Fionnuala
Es gibt keinen Ersatz für MVFs in einer Access-Datenbank. Einige Abfrage-Techniken nachahmen kann MVFs aber Sie können finden, MVF-Funktionalität überlegen sein sollte. 1. Es ist schnell und sehr einfach zu implementieren. Kein code und kein SQL. 2. Es ist das visuelle, und daher ist es intuitiv für den Benutzer. Es gibt einige Dinge, die kann man nicht mit einem MVF, so dass Sie wirklich brauchen, um zu entscheiden, was wichtiger ist.
Der MVF-Steuerung ermöglicht das hinzufügen von multiple-choice-Benutzeroberfläche, um eine form und nicht so ohne code. Es gibt nur wenige, wenn irgendwelche Systeme, die ich kenne, sind code-frei wie der Zugang für diese Fähigkeit. Diese Funktion erlaubt auch nicht-Entwicklern das erstellen von Anwendungen, die typische erfordern eine teure Entwickler. Die Idee, dass jeder muss lernen, verwenden Sie ein standard-Getriebe, ein Auto zu fahren ist dumm, und in diesem Zusammenhang ist auch albern. Es ist eine Funktion, die es Menschen ermöglicht, Systeme zu bauen, ohne code oder SQL. Was kommt als Nächstes, was darauf hindeutet, dass jeder lernen, assembler, einen computer zu benutzen? Was kommt als Nächstes, zwingen code, um das layout eines Formulars?
Der Ersatz ist eine viele-zu-viele-Beziehung mit der Zuordnungstabelle, bekannt aus standard-RDB-design, als Sie tatsächlich funktional gleichwertig. Access implementiert MVFs mit einer internen Zuordnungstabelle, einfach das verstecken der Komplexität vor dem Anwender. Ich glaube, dass die einzigen Einschränkungen der MVFs sind in Bezug auf integration oder Portierung auf andere DBMS, wie die Kreuzung Tabellen müssen neu aufgebaut werden ersten. Vielleicht in zukünftigen Versionen von Access bieten, um dies automatisch tun, aber im moment, den zusätzlichen Programmieraufwand, wenn die Daten jemals verwendet zu werden, die außerhalb von Access sollte auf jeden Fall berücksichtigt werden.
Ich war zu betonen, dass MVFs sollte nicht pauschaliert werden, das ist alles. Es sei denn, es ist eine sehr einfache Datenbank, es ist wahrscheinlich, dass jemand will, um darüber hinaus gehen die no-code "die multiple-choice-UI". Ich habe jetzt verbrachte ein Jahr in die Entwicklung und Aktualisierung einer Datenbank mit MVF. Ansonsten einfach Anfragen, die könnten in der Regel durchgeführt werden, die mit der Access-Designer (d.h. "no SQL") sind nicht immer möglich, mit MVFs, insbesondere update-Abfragen und Abfragen einfügen esp. mit joins. Auch wenn der MVF ist nicht das Feld aktualisiert wird... oft kann es nicht auch sein, bezogen auf alle in der Abfrage ohne Probleme.
InformationsquelleAutor David Nealey
Die Frage ist eher merkwürdig, da fragt er über ein Feld mit einem Einzelwert, sondern fragt auch über-Tabelle-Beziehungen. In einer sehr strengen Auslegung, eine multi-Wert-Feld (MVF) ersetzt werden könnte, mit einer einzigen TextBox gefüllt mit Komma getrennte Elemente... keine Tabelle-Beziehungen erforderlich. Stattdessen, ich nehme an, mit "single-value" - Feld, dass die Frage bedeutet standard-Felder in einem multi-table-Verhältnis, in dem jedes Feld der jeweiligen Zeile eine single Wert. Aber jeder primären Datensatz kann immer noch bezogen werden, um mehrere Zeilen in der zugehörigen Wertetabelle, die beibehält, der Sinn und Zweck des MVF.
Betrachten Sie die Datenbank, nachfolgend zur Veranschaulichung ein möglicher Ersatz für die MVF. Ich bin nicht mit jedem möglich, das Eigentum oder, wie man erstellen Sie grundlegende Objekt, nur das, was notwendig ist für das anlegen gewünschte Verhalten-vorausgesetzt, ausreichende Kenntnisse der Zugriff auf "fill in the blanks" und keine Angst vor basic-code oder SQL.
Die grundlegende Struktur besteht aus drei Tabellen: 1) Primäre Tabelle, 2) "value list" - Tabelle 3) Zuordnungstabelle verwendet, um zu definieren, viele-zu-viele-Beziehung.
CustomerID: AutoWert, Primärschlüssel
Kundenname: kurzer text
- Code: Kurztext, Länge 5, primary key
Beschreibung: kurzer text
CustomerID: lang
- Code: Kurztext
Erstellen von Beziehungen zwischen Tabellen. Dies erfordert entsprechende Indizes in den Tabellen (hier nicht beschrieben).
CustomerID -> Feldern CustomerID, (mit Integrität erzwingen aktiviert)
Code> Code-Felder (mit Integrität erzwingen aktiviert)
(Eine separate ID-Feld könnte auch erstellt werden, für die Werte der Tabelle [z.B. Codes Tabelle] Tabelle, aber das erschwert später Abfragen und Kontrollen, etc. In einem solchen Fall, der Zuordnungstabelle enthalten würde andere ID-Feld und nicht den Wert direkt ein.)
In eine standard-VBA-Modul erstellen Sie eine Funktion wie
Nützliche Abfragen der primären Tabelle ohne doppelte Zeilen erfordert die Schaffung irgendeiner Art von Aggregat-Abfragen (z.B. Group By, Count, etc.). Einfache Auswahl kann getan werden, in einer einzigen Abfrage beispielsweise
Komplizierter Auswahl erfordert möglicherweise mehrere Abfragen, die man zuerst wählen Sie die richtigen Datensätze, dann ein weiterer join mit der Haupttabelle zur ersten Abfrage. Aber ehrlich gesagt, diese Art von Abfragen sind nicht komplizierter als das, was verlangt werden können, wählen Sie auf mehrwertige Felder. In der Tat, die query-syntax für die MVF ist nicht-standard und kann ziemlich kompliziert und verwirrend, sogar mehr als mit einer junction-Tabelle und viele-zu-viele-Beziehungen. Hinter den kulissen-Zugang ist im wesentlichen das gleiche tun wie ich umrissen habe, sondern weil es blendet so sehr ins detail, es machen einige Abfragen noch schwieriger.
Bezüglich der multi-Wert-Darstellung und Auswahl auf eine form, imitiert die mehrwertiges Kombinationsfeld genau das ist nicht möglich--vor allem, weil die basic Access Kombinationsfeld nicht mit einem multi-Auswahl-option mit der Möglichkeit zum anzeigen von Kontrollkästchen. Allerdings kann man das Auffüllen nicht-gebundenes Listenfeld mit der Eigenschaft [Multi-Select] - = Einfach. Auf der Form_Load-Ereignis, fügen Sie der verfügbaren Werte (z.B. Code aus der Beispiel-Tabelle) der listbox die ListBox mit.AddItem-Methode. Dann in die Form_Current, Form_AfterUpdate, Form_Undo Ereignisse, können fügen Sie code zum anzeigen und/oder speichern der ausgewählten Werte. Dies erfordert mehr code, das übersteigt wohl den Rahmen hier.
Technisch ist die gestellte Frage über "verschieben" MVF zu einer anderen Umsetzung. Die Kernaussage ist, zum füllen der Werte-Tabelle (z.B. Code-Tabelle im Beispiel) mit den gleichen Werten in die MVF-Liste. Könnte dies ein manueller Prozess ist, sondern hängt davon ab, wie der MVF ComboBox gefüllt wird. Dann schreiben Sie eine Abfrage, die Kopien jedes MFV in der Zuordnungstabelle (z.B. [Kunden-Code]) für die gleichen primären Datensatz, so etwas wie
Eine vollständige Umsetzung ist definitiv keine einfache Aufgabe insgesamt, aber wenn Sie zu viele Probleme mit MVFs-oder wenn Sie wollen, um die Migration zu einer anderen Datenbank, die diese Art der Veränderung wird notwendig sein, um zu verstehen.
InformationsquelleAutor C Perkins