Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Anfängerfrage zu Beziehungen

Begonnen von TomT, August 28, 2014, 09:48:58

⏪ vorheriges - nächstes ⏩

TomT

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!

MaggieMay

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.
Freundliche Grüße
MaggieMay

TomT

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

DF6GL

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.

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

TomT

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

DF6GL

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.
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

TomT

"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?

MaggieMay

#7
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
Freundliche Grüße
MaggieMay

TomT

Hab meinen Denkfehler ja eingesehen, siehe letzter Post.
Oder versteh ich Dich jetzt falsch?

MaggieMay

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.
Freundliche Grüße
MaggieMay

TomT

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

MaggieMay

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.
Freundliche Grüße
MaggieMay

TomT

"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

DF6GL

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".
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

TomT

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