Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

MS Access: mehrere Werte in einem Feld?





Frage

Hallo, Ich moechte eine eigene Datenbank anlegen und ich moechte fuer ein Feld verschiedene Werte aus einer Liste eingeben. In der Entwurfsansicht des Formulars kann man bei den Einstellungen fuer eine Liste vorgeben, dass mehrere Werte waehlbar sind ("MultiSelect"), allerdings wird dies nicht in der Datenbank gespeichert. Beispiel: Meine Datenbank besteht z.B. aus den Feldern Personen und Sprachen. Da eine Person mehrere Sprachen sprechen kann, moechte ich verschiedene Sprachen (Spanisch, Englisch, Franzoesisch etc.) als Werte aus einer Liste auswaehlen koennen und in der Datenbanktabelle speichern. Leider kann ich beispielsweise nicht gleichzeitig Spanisch und Englisch in der Liste markieren, sondern immer nur genau eine Sprache. Gibt es hierfuer eine Abhilfe? Philip.

Antwort 1 von philip

Hat jemand eine Antwort hierzu?

Antwort 2 von 14071

Hi Philip,
das Problem liegt darin, daß deine Datenbank nicht sauber aufgebaut wurde. Die (beherrschten)Sprachen sollten in einer eigenen Tabellen gespeichert werden, die n:1 zur Person verknüpt wurde. Beispiele dazu findest u.a. in der Nordwind.mdb, die jedem Access beiliegt.

Gruß
Jürgen

Antwort 3 von Kasi

Also meinem Verständnis nach ist das ein allgemeines Problem von Relationalen Datenbanken. Die können in einem Feld auch nur einen Wert speichern. Man könnte das Problem umgehen indem man für jede Kombination einen Auswahlwert anlegt. Aber das kann recht umständlich werden.


Antwort 4 von Knubbel

Hi Philip,

Kasi hat Recht: In einem „Steuerelement“ kann nur ein Wert gespeichert werden.

Wenn bei Deinem Problem nur 3-4 verschiedene Sprachen zu berücksichtigen sind, kannst Du, wie Jürgen bzw. Kasi angedeutet haben, die einzelnen Sprachkombinationen in einer separaten Tabelle ablegen, und anschliessend die Auswahl über ein Kombinationsfeld vornehmen. Das ist dann noch überschaubar: z.B. bei 4 zu berücksichtigenden Sprachen gibt es 14 Kombinationsmöglichkeiten.

Bei einer grösseren Anzahl der zu berücksichtigenden Sprachen wird es dann schon unübersichtlich (z.B. bei 5 Sprachen gibt es schon 29 Kombinationsmöglichkeiten).

Bei einer grösseren Anzahl der zu berücksichtigenden Sprachen würde ich dies „Sprachen-Kenntnis-Feld“ als normales Text-Eingabefeld definieren und manuell nur Kennbuchstaben bzw. Buchstabenkombinationen eingeben.
Z.B:
D steht für deutsch
D,F steht für deutsch und französisch
D,I,Gr,P,R,Ch steht für deutsch, italienisch, griechisch, polnisch, russisch und chinesisch
usw.

Damit bei der Eingabe auch die richtigen Kennbuchstaben verwendet werden, kannst Du ja in der Nähe des Eingabefeldes eine Erklärungstabelle anordnen (nur anzeigen). Auch hierfür ist eine separate Tabelle „Sprachen“ sinnvoll, in der die Zuordnung der Kürzel zur Sprache festgelegt ist. Hiermit können dann später diverse Auswertungen vorgenommen werden.

mfg Knubbel



Antwort 5 von MickK

Hallo Philip, die Aussage von 14071 ist der sauberste Weg. Wenn man mehrere Werte in einem Feld speichert, wird man Schwierigkeiten bekommen bei Auswertungen, wie z.B. wer hat Deutsch und Französisch.

Gruss
Mick

Antwort 6 von Teddy7

Also ich würde auch eine eigene Tabelle für die Sprachen machen - ABER es geht auch in einem Feld.
Du müßtest nur das Listfeld (multiselect) abarbeiten und die markierten Sprachen in einem Textfeld zusammenfassen. Grob formuliert:
für alle Listeinträge
wenn selected dann
Sprachen = Sprachen & "," & SelektierteSprache
......
bin jetzt zu faul die genaue Syntax rauszusuchen.
Allerding hat Mick völlig Recht damit, daß eine solche Konstruktion etwas schwieriger auszuwerten ist.
Deshalb auch meine Empfehlung eine eigene Tabelle anzulegen:
PersonNr
Sprache
die dann mit der Personenstammtabelle über die PersonNr verknüpft werden kann.
Gruß
Teddy

Antwort 7 von Stefan

Hallo Philip, die beste Lösung für Dein Problem ist eine m:n-Beziehung, die über drei Tabellen abgebildet wird, z. B. tblPerson, tblPersonSprache, tblSprache. Die tblPersonSprache steht in Beziehung zu den beiden anderen Tabellen und speichert nur deren Primärschlüssel, mehr nicht. Um das alles in einem Formular abzubilden, wird tblPerson an ein Hauptformular gebunden, tblPersonSprache an ein Endlos-Unterformular, das mit dem Person-Hauptformular verknüpft ist und tblSprache ist die Datensatzherkunft des Kombinationsfeldes im Unterformular. Mit nem Löschbutton im Unterformular kannst Du dann beliebig Sprachkombinationen hinzufügen und wieder löschen.
Gruß
Stefan

Antwort 8 von Knubbel

@Stefan

Dein Lösungsvorschlag ist gut und funktioniert auch!

Hat m.E. nur den Nachteil, dass wenn z.B. Klaus 4 Sprachen spricht, auch 4 Datensätze vorhanden sind.
Wie kann man es anstellen, dass aus diesen 4 Datensätzen (für Klaus) nur 1 Datensatz erzeugt wird, der alle 4 Sprachen beinhaltet? (ohne VB)

mfg Knubbel