Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Tabellenfeld Gültigkeit von anderem Feld abhängig machen

Begonnen von relznak, Juni 27, 2017, 11:33:09

⏪ vorheriges - nächstes ⏩

relznak

Hallo erst mal, ich beschäftige mich für meinen Beruf grade mit Access und baue eine Datenbank auf. Ich mach so ein bissel Learning by doing und stoße daher hin- und wieder an Grenzen.

Daher habe ich mich hier mal angemeldet.

Zu meinem konkreten "Problem":

Ich habe drei Tabellen
personalakteT
gesellschaftT
abteilungT

In Personalakte habe ich mit Hilfe des Nachschlage Assistenten zwei Felder eingefügt, die "Gesellschaft" und "Abteilung" heißen. Diese werden durch die gleichnamigen Tabellen bestückt.

In der Tabelle abteilungenT gibt es eine Verknüpfung auf die Gesellschaft. Jede Abteilung kann entweder zur Gesellschaft 1 oder 2 gehören.

Ich möchte jetzt aber folgendes haben:
Wenn in einem Personalakteneintrag im Feld "Gesellschaft" die Gesellschaft Nr. 1 ausgewählt ist, sollten im Feld "Abteilung" nur diejenigen Abteilungen ausgewählt werden dürfen, die in der Ursprungstabelle "abteilungenT" mit der entsprechenden Gesellschaft in verbunden sind.

Alternativ, falls einfacher, sollte in der Tabelle personalakteT automatisch die Gesellschaft 1 bzw. 2 in ein Feld geschrieben werden, die zur ausgewählten Abteilung gehört.

Es können aber auch gleichnamige Abteilungen in Gesellschaft 1 und 2 auftauchen.

Danke schon mal!

MzKlMu

Hallo,
in der Personalakte genügt eine Feld für den Fremdschlüssel zur Abteilung. Die Gesellschaft wird da nicht benötigt, da über die Beziehungen automatisch auch die Gesellschaft zugeordnet ist.
Die Abhängigkeit der Abteilung von der Gesellschaft kannst Du in einem Formular dann trotzdem realisieren. Auf Tabellenebene geht das sowieso nicht.
Und noch ein dringender Rat: Verzichte unbedingt auf Nachschlagefelder in den Tabellen, die sind nur scheinbar vorteilhaft und ein typischer Anfängerfehler. In Wirklichkeit machen die nur Probleme.
In Formularen als Kombifelder kannst Du diese problemlos verwenden (mit der gleichen Funktionalität) nur nicht in Tabellen direkt.

Zu den Nachschlagefeldern:
http://dbwiki.net/wiki/Access_Anf%C3%A4nger:_Die_Nachteile_von_Nachschlagefeldern


Zeige mal ein Bild des Beziehungsfensters.
Gruß Klaus

relznak

Hallo,

danke für die schnelle Antwort.

Dann müsste ich die Einschränkung also im Formular setzen, nicht in der Tabelle. Ist ok für mich. Wie gehe ich da vor?

Zu den Nachschlagefeldern werde ich mir den Link mal ansehen. Ich fand die halt praktisch. Ich versuche es aber alternativ mal mit einem Kombifeld.

Anbei das Bild der Beziehungen.

MzKlMu

Hallo,
warum so ein Riesenbild mit so großen Abständen. Und so großen Feldern für die Tabellen. Das geht auch kleiner. Und die Tabelle für die Gesellschaft ist auch nicht zu sehen.
Beziehungen sind grundsätzlich mit referentieller Integrität einzurichten.

Und nenn die ID Felder nicht einfach ID, wie willst Du die auseinander halten.
ID Felder immer mit Bezug zur Tabelle. AbteilungID, das dazu gehöhrende Fremdschlüsselfeld nennt man dann AbteilungID_F. Sinngemäß auch die anderen Felder.
Mache mal die Änderungen und zeige noch mal das Bild.

Das Kombi auf dem Formular ist uneingeschränkt genau so praktisch.


Gruß Klaus

relznak

Ok danke.

Anbei nochmal mit Änderungen.

Zu den Kombifeldern: Ich spiele die Felder der Tabelle personalstammT halt auch nach Excel aus, habe daher die Auswahlfelder dort und nicht erst im Formular gemacht.
Aber ich denke man könnte auch von einer Abfrage aus nach Excel ausspielen, die dann alle Informationen die ich benötige gesammelt enthalt, oder? Weil wenn ich erst im Formular die Auswahl in Drop-Down-Feldern per Kombinationsfeld zulasse, habe ich sie ja nicht im personalstamT enthalten. Oder?


Weil

MzKlMu

#5
Hallo,
was soll das "..Feld" in manschen Feldnamen (den Fremdschlüsseln), ich sagt eine ein _F für Fremdschlüssel. Das Feld "ID_Gesellschaftfeld" ist überflüssig, wie ich weiter oben schon schrieb.

Warum ist keine referentielle Integrität eingestellt ?
Das die erforderlich ist, habe ich weiter oben auch schon geschrieben.

Und bei Auswahl per Kombi (Drop-Down) im Formular sind die Daten natürlich auch in der Tabelle.

Exportiert wird ohnehin immer eine Abfrage und da kann man die Felder aus allen beteiligten Tabellen heranziehen.

Und noch ein dringender Rat, verzichte auf Leer und Sonderzeichen jeglicher Art in den Feldnamen. "KFZ 1% Abzug vom Brutto" sind eher eine Kataastrophe als ein Feldname. Auch Klammern in Feldnamen tragen eher zur Verwirrung bei. Außerdem solltest Du die Feldnamen sinnvoll einkürzen.
In den Feldbeschriftungen kannst Du Dich dann beliebig austoben.
Gruß Klaus

relznak

Ok, referentielle Integrität. Das verhindert Eingaben außerhalb des durch die Beziehung zugelassenen Bereichs gell? Werde ich rein machen und das Feld in F ändern (dachte halt, weil ich F schon bei Formularen hinten dran hänge) sowie die Feldnamen kürzen und ID_Gesellschaftfeld raus nehmen.

Ich würde mich dann morgen nach Umsetzung noch mal melden, hoffe das ist ok?

Auf jeden Fall ein großes Danke für die Hilfe bis hierhin.

MzKlMu

Hallo,
ich habe oben noch was ergänzt, bitte noch mal lesen. Und hier noch ein Bild.
Und wenn Du kein _F verwenden willst, dann verwende _FS.
Gruß Klaus

DF6GL

Hallo,

weiterhin:

Auf Sonder- und Leerzeichen in Name DRINGEND verzichten!!

Der "Kreisverkehr" um "abteilungT", "gesellschaftT" und "personalstammT" ist fehlerhaftes Design.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

relznak

#9
Ok, danke euch. Ich werde morgen früh Zeit haben das umzubauen.

relznak

Hallo,

ich sitze grade dran. Ich komme mit den Kombifeldern in meinem Formular nicht klar.

Dort soll ja z.B. die Tarifgruppe für jeden Mitarbeiter ausgewählt werden.

Vorher hatte ich in meiner Tabelle personalstammT ja ein Nachschlagefeld. Dieses bezog seine Daten aus der Tabelle tarifhauptgruppeT.

Die Alternative kriege ich nicht hin.
Wenn ich in meinem Formular ein Kombifeld erstelle, kann ich natürlich die Datenherkunft auf die Tabelle tarifhauptgruppeT beziehen, aber es speichert die Daten die ich dort auswähle, dann nicht in die Datensätze der Tabelle personalstammT.

Wenn ich in personalstammT ein Feld ID_Tariflistehaupt anlege und dieses mit dem gleichnamigen Primärschlüsselfeld der Tabelle tarifhauptgruppeT verknüpfe, dann lässt Access mir als Feldtyp nur "Zahl" zu, meine Tarifgruppen sind aber Text.

Eine Verknüpfung des Feldes ID_Tariflistehaupt mit einem anderen Feld als dem Primärschlüsselfeld der Tabelle tarifhauptgruppeT, wird nicht zugelassen.

Kurz: Ich benötige einen Hinweis, wie ich vorgehen muss. Google war leider nicht sehr ergiebig.

Danke!

Anbei die aktuellen Beziehungen.

MzKlMu

Hallo,
welcher Datentyp ist dieses Feld: "ID_Tariflistehaupt" ?
Ist das ein Autowert ?

In der Tabelle "personalstammT" darf das Feld kein Text sein, der Text darf an der Stelle auch nicht zu sehen sein. Da steht die Zahl und die wird auch gespeichert, nicht der Klartext.
Du hast immer noch die Nachschlagefelder im Kopf.
Gruß Klaus

relznak

Hallo,

Bild anbei.

Das Schlüsselfeld ID_Tariflistehaupt ist ein AutoWert und das in Beziehung stehende Feld in personalstammT ist Zahl.

Ist das richtig so? Und wenn ja, wie geht's jetzt weiter?

MzKlMu

Hallo,
ja, so ist es richtig.
Was heißt wie geht es weiter ?
Wo hapert es denn noch ?
Gruß Klaus

relznak

Ich kann jetzt in der Tabelle ja keine Daten mehr eingeben, bzw. eben nur noch die Zahlen, also die ID-Nummern der Tarifgruppen.

Wenn ich im Formular jetzt ein Kombifeld anlege, mit welcher der beiden Tabellen verbinde ich es als Datenquelle?