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!
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.
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.
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.
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
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.
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.
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.
Hallo,
weiterhin:
Auf Sonder- und Leerzeichen in Name DRINGEND verzichten!!
Der "Kreisverkehr" um "abteilungT", "gesellschaftT" und "personalstammT" ist fehlerhaftes Design.
Ok, danke euch. Ich werde morgen früh Zeit haben das umzubauen.
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.
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.
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?
Hallo,
ja, so ist es richtig.
Was heißt wie geht es weiter ?
Wo hapert es denn noch ?
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?
Hallo,
das Kombifeld entspricht exakt dem Nachschlagefeld wie es in der Tabelle war.
Das Kombi muss natürlich mit der Tabelle verbunden werden aus denen Du die Werte beziehst. Und das ist in diesem Fall die Tabelle "tarifhauptgruppeT".
Kombis die der Auswahl dienen, beziehen ihre Daten immer aus einer n-Tabelle.
Über die Spaltenbreiten kann man einstelle welche Spalte das Kombi anzeigt. Das Kombi muss an das Fremdschlüsselfeld gebunden werden.
Ok das probiere ich morgen, Danke.
"Das Kombi muss an das Fremdschlüsselfeld gebunden werden." bedeutet das, dass ich es mit dem Feld in der personalstammT verknüpfen muss, damit dort die Daten eingelflegt werden? Ich werde es versuchen.
Hallo,
da musst Du nichts verknüpfen. Die Beziehungen hast Du ja (hoffentlich) angelegt.
Ich kann auch deine Probleme nicht ganz nachvollziehen, in der Tabelle hattest Du das ja schon. Genau so wird es auch auf dem Formular gemacht.
Ok, ich versuche es morgen mal und falls es nicht klappt, liefere ich eine bebilderte Beschreibung. Danke soweit.
Hallo,
Zitatdass ich es mit dem Feld in der personalstammT verknüpfen muss
So ähnlich, - der Name des Feldes kommt in die Eigenschaft
"Steuerelementinhalt" des Kombis.
gruss ekkehard
Sodele,
hat geklappt. Jetzt habe ich die Auswahl für die Tarifgruppe und die Abteilung als Kombifeld drin. Weitere folgen.
Nun noch mal zu meinem Anliegen von zu Beginn:
Ich kann jetzt im Formular die Abteilung auswählen. Da die Gesellschaft (sagen wir mal ABC oder XYZ) aber nur als Nummer auftaucht, kann ich im Formular dann schlecht erkennen, welcher Mitarbeiter bei welcher Gesellschaft angestellt ist.
Anbei ein Bild, was ich meine.
Ich möchte das gerne so gestalten, dass im Formular die Gesellschaft im Klarnamen sichtbar ist. Kriege ich das hin? Am besten in einem eigenen, uneditierbaren "Infofeld".
(Gleiches später bei Auswertungen, aber um die soll es erst mal nicht gehen.)
Hallo,
nimm in die Abfrage für das Formular auch die Gesellschaft mit auf, dann hast Du auch deren Klarname zur Anzeige im Formular zur Verfügung.
Also erstelle ich eine Abfrage und hole mir von dort dann den Klarnamen in das Formular?
Weil, wenn im Formular jemand eine Abteilung aussucht, sollte er ja sehen, zu welcher Gesellschaft diese gehört.
Hallo,
ja, genau so hatte ich es doch geschrieben.
Und das Formular braucht dann als Datenquelle/Datenherkunft diese Abfrage.
Ok, dachte vielleicht geht's als Infofeld im Formular selbst. Aber dann werde ich mich hierfür nun in die Abfragen reinarbeiten. Hab mir inzwischen auch ein Buch gekauft für Access-Anfänger. ;D
Hallo,
Datenherkunft eines Formulars ist im Regelfall ohnehin immer eine Abfrage und nicht eine Tabelle direkt.
Ach so :) Dann baue ich es entsprechend um. Danke!