Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: TomT am August 28, 2014, 09:48:58

Titel: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 09:48:58
Hallo zusammen,
ich bin auf dem Wege mich in Access ein zu arbeiten und lese hier schon seit geraume Zeit als Gast mit.
Da ich mehr der Typ "learning by doing" bin versuche ich für unseren Verein eine kleine Verwaltung zu erstellen (gibts zwar massenhaft schon fertig, aber für mich eine gute Übung).
Nun bin ich jedoch mit einem Problem konfrontiert bei dem ich mir von Euch etwas Hilfe erhoffe (über die Suche finde ich leider nichts, wahrscheinlich fehlen mir die richtigen Ausdrücke):

Das angehangene Beziehungen-Bild (vereinfacht) macht mein Problem ersichtlich.
Ich habe eine tblMitglieder (für Namen etc) mit dem dazugehörigen Formular frmMitglieder. Des weiteren gibt es eine tblMitgliedstyp (aktiv, passiv etc). Beide sind jeweils über 1:n Beziehung an tblMitgliedschaft gebunden. Zur tblMitgliedschaft gibt es ein frmMitgliedschaft, welches als ufo in frmMitglieder eingebunden ist. Das funktioniert soweit. Ich kann im frmMitglieder einen Namen auswählen und diesem für einen Zeitraum einen Mitgliedschaftstyp zuweisen.
Nun habe ich eine weitere Tabelle tblBeitragssatz in der für die aktiven und passiven Mitglieder für einen Zeitraum ein Beitragssatz zugewiesen werden soll. z.B., jemand ist von 2010 bis 2011 passives Mitglied, diesem soll nun aus tblBeitragssatz der entsprechende Betrag automatisch zugeordnet werden und dieser dann auch im ufoMitgliedschaft zusätzlich angezeigt werden.
Und genau diese Funktionalität bekomm ich nicht in den Griff.
Ich hoffe ich habe mein Problem anschaulich beschrieben und sag schon mal danke für jeden der sich meiner annimmt!
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: MaggieMay am August 28, 2014, 16:00:52
Hallo,

für die Zuordnung des Beitrags zur Mitgliedschaft kannst du eine Abfrage einsetzen, in der der Gültigkeitszeitraum mit dem Zeitraum der Mitgliedschaft verglichen wird.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 17:09:59
Hallo Maggie,

vielen Dank für Deine Antwort.
Leider verstehe ich nicht wie ich das mit dieser Anforderung (ich zitiere mich mal selbst): "diesem soll nun aus tblBeitragssatz der entsprechende Betrag automatisch zugeordnet werden und dieser dann auch im ufoMitgliedschaft zusätzlich angezeigt werden"
und einer Abfrage machen könnte.

Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 28, 2014, 17:22:14
Hallo,

vermutlich solltest Du an diese Problematik anders herangehen.. (falls ich es richtig verstehe).

Zuerst muss geklärt werden, was Du überhaupt machen/haben willst:

Willst Du nur den akt. Beitragsatz eines Mitgliedes in Abhängigkeit seines Status (aktiv, passiv) und dem aktuellen (!) Jahr wissen oder soll auch eine Historie über die gesamte Mitgliedschaft geführt werden. (neben der Jahresänderung kann sich ja auch der Status (vermutlich) irgendwann innerhalb eines Jahres ändern).

Im ersten Fall braucht es lediglich eine Beitragstabelle, die neben dem Status das Beitragsjahr und den Beitragswert enthält. Dadurch lässt sich der akt. gültige Beitragssatz für jedes Mitglied auslesen.

Weiterer Gesichtspunkt wäre die evtl. Anpassung des Beitrages in Abhängigkeit der Mitgliedsschaft-Dauer.

Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 17:54:43
Hallo DF6GL,

auch Dir erstmal danke für die Antwort!

"Willst Du nur den akt. Beitragsatz eines Mitgliedes in Abhängigkeit seines Status (aktiv, passiv) und dem aktuellen (!) Jahr wissen" - Ja genau, und der Betrag soll im ufotblMitgliedschaft ersichtlich sein. Ich habe dazu noch ein Bild angehangen.

"oder soll auch eine Historie über die gesamte Mitgliedschaft geführt werden." - Genau das, da ich gerne für die Vorjahre den Status und den dazugehörigen Mitgliedsbeitrag nachschlagen können möchte.

"kann sich ja auch der Status (vermutlich) irgendwann innerhalb eines Jahres ändern" - Nein, der kann sich immer nur zum Jahresbeginn ändern (ebenso wie der Mitgliedsbetrag an sich). Und da kann sich ja dann auch der Beitrag an sich ändern, deshalb auch die Historie.

"Weiterer Gesichtspunkt wäre die evtl. Anpassung des Beitrages in Abhängigkeit der Mitgliedsschaft-Dauer" - Diese Anforderung ist nicht gegeben.

Im Grunde genommen gehts mir auch erstmal darum zu lernen wie ich zwei Abhängigkeiten in einem Formular unterbringe. Also; Mitglieder in tblMitglieder bekommen für einen Zeitraum von tblMitgliedschaft, diese tblMitgliedschaft wiederum einen Status (aktiv, passiv) von tblMitgliedstyp und tblMitgliedstyp bekommt abhängig vom Jahr die Höhe des Jahresbeitrags aus tblBeitragssatz.
Und Name, Historie der Mitgliedschaft und Jahresbeitrag soll dann in einem Formular angezeigt werden.
Siehe Bild...

Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 28, 2014, 19:25:03
Hallo,

die Darstellung im Formular passt nicht... Wenn ein Datensatz einen JahresBEREICH (von - bis) enthält, dann kann in einem Feld nicht der Jahresbeitrag (von welchem Jahr denn?) stehen.

Die Frage stellt sich, wozu die Kenntnis (Anzeige) eines solchen jahresspezifischen Beitrages benötigt wird.

Im einfachsten Fall könnte man die Anzeige so gestalten, als dass ein interessierendes Jahr per ungebundenem Kombifeld ausgewählt wird und mit Kombination des betreffenden Status der Beitrag(ssatz) aus der Beitragshistorien-Tabelle ausgelesen und temporär angezeigt wird.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 20:38:04
"Wenn ein Datensatz einen JahresBEREICH (von - bis) enthält, dann kann in einem Feld nicht der Jahresbeitrag (von welchem Jahr denn?) stehen."
Logisch, wie doof von mir...
Also dann wäre meine erste planerische Änderung eine Historie für die Mitglieder zu führen, die jährlich abgrenzt, klar, dann gäbe es zu jedem Mitglied ein Mitgliedsjahr, den in dem Jahr entsprechenden Status und den dazugehörigen Beitragssatz.
Das wiederum würde heißen, dass ich Mitgliedsart mit Jahreszahl in Beziehung zu Beitragsjahr und Betrag setzen muss.
Meine Tabellen würden demnach so wie auf dem angefügten Bild aussehen.
Aber abgesehen davon, dass ich nun nicht mehr mehrere Jahre anzeige, sondern nur noch Jahresweise, bleibt meine ursprüngliches Problem (bzw. Frage) doch bestehen: Wie setze ich die Beziehung zur tblBeitragssatz und wie bekomme ich die zum Mitglied und zur Jahreszahl passenden Euros in das ufo?
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: MaggieMay am August 28, 2014, 22:20:53
Sorry, aber
Zitat von: DF6GL am August 28, 2014, 19:25:03Wenn ein Datensatz einen JahresBEREICH (von - bis) enthält, dann kann in einem Feld nicht der Jahresbeitrag (von welchem Jahr denn?) stehen.
natürlich von dem jeweiligen Beitrag aus dem passenden Zeitraum - hast du dir die Tabellenbeziehungen nicht angeschaut?

Nachtrag:
Beispiel-Abfrage:Select m.*, b.Betrag
From tblMitgliedschaft As m INNER JOIN tblBeitragssatz As b
ON m.Mitgliedertyp_ID_F = b.Mitgliedstyp_ID_F
WHERE
b.bsatz_vonjahr >= m.mschaft_vonjahr AND
b.bsatz_bisjahr <= m.mschaft_bisjahr
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 22:25:32
Hab meinen Denkfehler ja eingesehen, siehe letzter Post.
Oder versteh ich Dich jetzt falsch?
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: MaggieMay am August 28, 2014, 22:33:20
Ich sehe da keinen Denkfehler, wenn Mitgliedschaft und Beiträge jeweils einem Zeitraum zugeordnet werden können.

Bitte schau dir meinen Nachtrag im letzten Beitrag noch einmal an.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 22:39:12
Hi,
es geht mir aber nicht um eine Abfrage! Ich zitiere mich aus meinem ersten Post nochmals:
"diesem soll nun aus tblBeitragssatz der entsprechende Betrag automatisch zugeordnet werden und dieser dann auch im ufoMitgliedschaft zusätzlich angezeigt werden"

Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: MaggieMay am August 28, 2014, 22:45:25
Sorry, aber die Lösung liegt in einer geeigneten Abfrage, ob du das nun willst oder nicht.

Ersatzweise für eine Abfrage käme der Einsatz der DLookUp-Methode in Frage.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 28, 2014, 22:55:44
"Ersatzweise für eine Abfrage käme der Einsatz der DLookUp-Methode in Frage."
Da hab ich gehört das es zu Performanceeinbrüchen kommt. Wäre mir aber aus Lehr- und Lernzwecken erstmal egal.
Leider weis ich aber immer noch nicht wie ich die tblBeitragssatz in Beziehung setzen muss, damit ich in meinem Formular einen Kontakt für ein bestimmtes Jahr anlegen, diesem einen Status für das entsprechende Jahr zuweisen und aus der vierten Tabelle automatisch die Summe die für die Kombination Name- Mitgliedsjahr-Mitgliedstyp zugewiesen wird.

Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 29, 2014, 15:48:09
Hallo,
zeig nochmal die akt. Beziehungen  als Screenshot.

Um den Beitragssatz im Formular anzuzeigen, nimmt Du die Dlookup()-Funktion (einzusetzen im Steuerelementinhalt eines Textfeldes), die den entspr. Beitragsatz mit Hilfe der Daten des akt. Datensatzes aus der Tabelle ausliest.  Die Beziehungen selber sind hier im Grunde gar nicht nötig. Wenn die Lieferung der Daten anstatt mit Dlookup  über eine (Formular-)Abfrage (---> Datensatzherkunft) erfolgen soll, dann verknüpf die Tabelle im Abfrageentwurf über die (angenommenen) Felder  "Mitgliedsjahr" und  "Mitgliedsstatus".
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 30, 2014, 17:31:09
Im Anhang nun der derzeitige Stand der Beziehungen.
Ich habe nun auch ein Textfeld ins ufoMitgliedschaft mit DLookup (DomWert, wer hat eigentlich die Idee gehabt, die engl. Begriffe ins Deutsche zu übersetzen?) eingefügt. Syntaktisch habe ich es hinbekommen, die entsprechende Tabelle (Beitragssatz) und dort das Feld bsatz_Betrag ein zu tragen. Da ich aber keine ID angegeben habe wird natürlich immer der erste Eintrag der Tabelle angezeigt.
Was mir da jetzt noch fehlt ist einen Zusammenhang zwischen mschaft_Jahr und bsatz_Jahr, da ja im Textfeld der Betrag für das Jahr angezeigt werden soll welches gerade für dieses Mitglied ausgewählt wurde.
Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 30, 2014, 18:50:43
Hallo,

verbinde tblBeitragssatz.bsatz_Jahr mit tblMitgliedschaft.mschaft_Jahr
lösche tblMitgliedstyp_ID -- tblBeitragssatz.Beitragstyp_ID_f
Benenne Beitragstyp_ID_f  um in Mitgliedertyp_ID_F
Verbinde tblMitgliedschaft.Mitgliedertyp_ID_F  mit tblBeitragssatz.Mitgliedertyp_ID_F

(bessere Benamsung wäre von Vorteil...)

Für das (Unter-) Formular könntest Du dann als Datenherkunft etwa eine solche Abfrage einsetzen:

Select * from tblMitgliedschaft, tblBeitragssatz inner join tblMitgliedschaft.Mitgliedertyp_ID_f tblBeitragssatz.Mitgliedertyp_ID_F  and  tblMitgliedschaft.mschaft_Jahr =tblBeitragssatz.bsatz_Jahr


Oder bei der Dlookup-Funktion:

=Domwert("bsatz_Betrag";"tblBeitragssatz";"bsatz_Jahr=" & [mschaft_Jahr] & " and Mitgliedertyp_ID_F = " & [Mitgliedertyp_ID_F]")


sofern die im UFO stehenden Felder für das Jahr und den Typ so lauten: "mschaft_Jahr" und "Mitgliedertyp_ID_F"
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 30, 2014, 19:27:14
Hi,
erstmal vielen Dank für Deine Mühe!
Das ich aber nicht einfach nur "nachbauen" sondern auch verstehen möchte hätte ich zunächst zwei Fragen:

Was bewirkt die Beziehung zwischen bsatz_Jahr und mschaft_Jahr; es ist ja keine 1:n Beziehung?

Ein Problem ergibt sich aber für mich auch beim letzten Schritt:
"Verbinde tblMitgliedschaft.Mitgliedertyp_ID_F  mit tblBeitragssatz.Mitgliedertyp_ID_F"
Da tblMitgliedschaft.Mitgliedertyp_ID_F ja mit tblMitgliedstyp_ID verbunden ist fragt Access ob ich die Verbindung bearbeiten will.
Sollen da wirklich zwei Fremdschlüssel miteinander verbunden werden? Da fehlt mir das Verständnis.

Gruß Thomas
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 30, 2014, 20:45:04
Hallo,


Beziehungen müssen zwangsläufig nicht 1:n-Beziehungen sein.
Siehe meinen Hinweis im vorletzten Post.

Die beiden Verbindungen stellen eine Verknüpfung über einen zusammengesetzten Schlüssel dar (Jahr und Typ), der einen eindeutigen Beitragssatz definiert.

Access meckert deswegen, weil es sich "wundert" , eine weitere Beziehung zu einer vorhandenen aufstellen zu müssen.  Lass Access sich ruhig wundern... ;)
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 31, 2014, 11:25:57
Ok, dann sieht es jetzt so aus !?
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 31, 2014, 11:33:41
Hallo,

ja..., versuch es halt mal so mit einer Abfrage für das Ufo, bzw. der Dlookup-Funktion wie beschrieben.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 31, 2014, 13:51:20
Ja da bin ich doch einen Schritt weiter....
Zunächst gab es noch einen Fehler, in der Formel für den DomWert fehlte ein " nach dem letzten &.
Im Ergebnis gibt es aber jetzt doch noch einen Fehler. Ich hab das mal als Bild angehangen.

Das Mitglied Thomas Kuntze ist im Jahr 2010 aktives Mitglied und dementsprechend wird der Betrag von 100 € angezeigt. Im Jahr 2011 ist er aber passiv und da wird aber auch der Betrag für aktive Mitglieder angezeigt.

Jetzt suche ich ob es an einer Beziehung liegt oder an der Formel des DomWertes?

Gruß Tom
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am August 31, 2014, 13:59:02
Hi,

was hast Du denn nun gemacht?

Hat das UFO eine verknüpfende Abfrage und das Beitragsfeld ist an das entspr. Tabellenfeld gebunden  oder zeigst Du das Ergebnis einer Dlookup-Funktion mit dem Formular-Textfeld an?

Zeige mal den SQL-String der Abfrage (wenn zutreffend) und den Ausdruck für die Dlookup-Funktion (der im Steuerelement des Textfeldes stehen muss).
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 31, 2014, 19:13:56
Hi,
keine Abfrage, und Inhalte hab ich mal ins Bild eingeschrieben.
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am August 31, 2014, 19:15:03
Hier im Anhang mal die db in einem .zip
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am September 01, 2014, 08:06:08
Hallo,

benenn die Textfelder (bzw. Steuerelemente) genau so wie die daran gebundenen Tabellenfelder. Mit zusätzlich korrigierter Syntax lautet der Ausdruck so:

=DomWert("[bsatz_Betrag]";"tblBeitragssatz";"bsatz_Jahr=" & [mschaft_Jahr] & " and Mitgliedertyp_ID_F = " & [Mitgliedertyp_ID_F])

Soll die Anzeige "#Fehler"  im einem neuen Datensatz vermieden werden, kann der Ausdruck so aussehen:

=DomWert("[bsatz_Betrag]";"tblBeitragssatz";"bsatz_Jahr=" & Nz([mschaft_Jahr];0) & " and Mitgliedertyp_ID_F = " & Nz([Mitgliedertyp_ID_F];0))
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: TomT am September 01, 2014, 09:38:10
Ah, es war also ein " zuviel und nicht zuwenig!
Jetzt klappt es so wie ich es mir dachte.
Vielen Dank für Deine Hilfe, als nächste werde ich mich jetzt erstmal damit auseinandersetzen, wie und warum es so funktioniert, ich will es ja auch verstehen.

Nochmals, vielen Dank!
Titel: Re: Anfängerfrage zu Beziehungen
Beitrag von: DF6GL am September 01, 2014, 10:21:38
Hallo,

nicht nur das...  es waren falsche Feldnamen angegeben, die zudem Schreibfehler hatten und die Syntax war strukturell falsch. Sieh Dir das Formular genau an und vollständig an...