{"id":55001629,"date":"2026-12-01T00:00:00","date_gmt":"2026-11-09T18:55:10","guid":{"rendered":"http:\/\/access-im-unternehmen.aix-dev.de\/aiu\/?p=1629"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Vereinsverwaltung_Datenmodell","status":"publish","type":"post","link":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/","title":{"rendered":"Vereinsverwaltung: Datenmodell"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a\" width=\"1\" height=\"1\" alt=\"\"><b>Eine Vereinsverwaltung, die nur Mitglieder und Beitr&auml;ge kennt, ist schnell gebaut. Soll der Verein die Beitr&auml;ge per Lastschrift einziehen, fehlen ihr jedoch Angaben, die sich sp&auml;ter nur mit M&uuml;he erg&auml;nzen lassen: Bankverbindungen, Mandate mit Referenz und Unterschriftsdatum, Forderungen und die L&auml;ufe, in denen wir Lastschriften einreichen. Wie wir aus den Angaben der Datei &#8222;pain.008&#8220; ein passendes Datenmodell ableiten und mit Beispieldaten f&uuml;llen, zeigt der vorliegende Beitrag.<\/b><\/p>\n<h2>Was die Datei vom Modell verlangt<\/h2>\n<p>Die Datei aus dem Beitrag <b>SEPA-Lastschrift: Das Format &#8222;pain.008&#8220; (www.access-im-unternehmen.de\/1628)<\/b> verlangt f&uuml;r jeden Einzug Angaben, die ein Datenmodell liefern muss.<\/p>\n<p>Wir ordnen sie den Tabellen zu, die wir in diesem Beitrag anlegen:<\/p>\n<ul>\n<li><b>MsgId, CreDtTm, ReqdColltnDt:<\/b> Kennung, Erstellungszeitpunkt und F&auml;lligkeit stehen in den Feldern <b>MsgId<\/b>, <b>Erstellt<\/b> und <b>Faelligkeit<\/b> der Tabelle <b>tblLastschriftlaeufe<\/b>.<\/li>\n<li><b>NbOfTxs, CtrlSum:<\/b> Anzahl und Summe berechnen wir aus den Positionen eines Laufs. Wir speichern sie nicht.<\/li>\n<li><b>Cdtr, CdtrAcct, CdtrSchmeId:<\/b> Name, IBAN und Gl&auml;ubiger-Identifikationsnummer des Vereins stehen in den Feldern <b>Vereinsname<\/b>, <b>VereinsIBAN<\/b> und <b>GlaeubigerID<\/b> der Tabelle <b>tblOptionen<\/b>.<\/li>\n<li><b>MndtId, DtOfSgntr:<\/b> Mandatsreferenz und Unterschriftsdatum stehen in den Feldern <b>Mandatsreferenz<\/b> und <b>Unterschriftsdatum<\/b> der Tabelle <b>tblMandate<\/b>.<\/li>\n<li><b>SeqTp:<\/b> Den Folgetyp leiten wir aus den bisherigen Lastschriften eines Mandats ab.<\/li>\n<li><b>Dbtr, DbtrAcct:<\/b> Kontoinhaber und IBAN stehen in den Feldern <b>Kontoinhaber<\/b> und <b>IBAN<\/b> der Tabelle <b>tblBankverbindungen<\/b>.<\/li>\n<li><b>InstdAmt:<\/b> Der Betrag steht im Feld <b>Betrag<\/b> der Tabelle <b>tblLastschriftpositionen<\/b>.<\/li>\n<li><b>EndToEndId, Ustrd:<\/b> Referenz und Verwendungszweck bilden wir beim Erzeugen der Datei aus dem Beitragsjahr, der Beitragsart und der Nummer der Forderung.<\/li>\n<\/ul>\n<p>Die Vereinsverwaltung aus den Beitr&auml;gen <b>Vereinsverwaltung: Von Excel zum Datenmodell (www.access-im-unternehmen.de\/1106)<\/b>, <b>Vereinsverwaltung: Migration (www.access-im-unternehmen.de\/1107)<\/b> und <b>Vereinsverwaltung: Formulare (www.access-im-unternehmen.de\/1134)<\/b> endet bei den Formularen.<\/p>\n<p>Sie enth&auml;lt weder Bankverbindungen noch Mandate, Forderungen oder L&auml;ufe. Wir legen daher ein neues Modell an. Sie finden es in der Datenbank <b>VereinsverwaltungDatenmodell.accdb<\/b>.<\/p>\n<h2>Personen und Familien<\/h2>\n<p>Die Tabelle <b>tblPersonen<\/b> enth&auml;lt die Stammdaten: <b>Anrede<\/b>, <b>Vorname<\/b>, <b>Nachname<\/b>, <b>Geburtsdatum<\/b>, <b>Strasse<\/b>, <b>PLZ<\/b>, <b>Ort<\/b> und <b>EMail<\/b> (siehe Bild 1).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_001.png\" alt=\"Entwurf der Tabelle tblPersonen\" width=\"574,559\" height=\"242,3628\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 1: Entwurf der Tabelle tblPersonen<\/span><\/b><\/p>\n<p>Die Mitgliedschaft steht in der eigenen Tabelle <b>tblMitgliedschaften<\/b>, damit eine Person nach einem Austritt wieder eintreten kann.<\/p>\n<p>Sie referenziert die Person, zu der die Mitgliedschaft geh&ouml;rt, sowie die Beitragsart &uuml;ber entsprechende Fremdschl&uuml;sselfelder. Au&szlig;erdem speichert sie das Eintritts- und das Austrittsdatum (siehe Bild 2).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_002.png\" alt=\"Entwurf der Tabelle tblMitgliedschaften\" width=\"574,559\" height=\"161,0574\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 2: Entwurf der Tabelle tblMitgliedschaften<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblFamilien<\/b> besteht nur aus dem Prim&auml;rschl&uuml;sselfeld <b>FamilieID<\/b> und dem Feld <b>Familienname<\/b>. Die Tabelle <b>tblPersonen<\/b> verweist &uuml;ber das Feld <b>FamilieID<\/b> darauf (siehe Bild 3). Das Feld ist optional, denn nicht jedes Mitglied geh&ouml;rt zu einer Familie. Die referenzielle Integrit&auml;t l&auml;sst sich trotzdem erzwingen, weil Access f&uuml;r den Wert <b>NULL<\/b> keinen Verweis pr&uuml;ft. Wir nutzen die Familie sp&auml;ter, um einen Familienbeitrag zu berechnen.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_003.png\" alt=\"Entwurf der Tabelle tblFamilien\" width=\"574,559\" height=\"123,1197\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 3: Entwurf der Tabelle tblFamilien<\/span><\/b><\/p>\n<h2>Mitgliedschaften und Beitragsarten<\/h2>\n<p>Die Tabelle <b>tblMitgliedschaften<\/b> verkn&uuml;pft eine Person mit einer Beitragsart und enth&auml;lt die Felder <b>Eintritt<\/b> und <b>Austritt<\/b>. Solange das Feld <b>Austritt<\/b> den Wert <b>NULL<\/b> hat, ist die Person Mitglied. Ein Wiedereintritt erzeugt eine zweite Mitgliedschaft derselben Person.<\/p>\n<p>Die Tabelle <b>tblBeitragsarten<\/b> enth&auml;lt die vier Arten <b>Kinder<\/b>, <b>Jugendliche<\/b>, <b>Erwachsene<\/b> und <b>Senioren<\/b>. Die Betr&auml;ge stehen nicht dort, sondern in der Tabelle <b>tblBeitragssaetze<\/b> mit den Feldern <b>GueltigAb<\/b>, <b>GueltigBis<\/b> und <b>Jahresbeitrag<\/b>. Warum? Ganz einfach: So behalten wir bei einer Beitrags&auml;nderung den bisherigen Satz f&uuml;r zur&uuml;ckliegende Jahre und k&ouml;nnen f&uuml;r jeden Stichtag den g&uuml;ltigen Beitrag ermitteln. In den Beispieldaten kostet die Beitragsart <b>Erwachsene<\/b> bis zum <b>31.12.2025<\/b> <b>55,00<\/b> Euro und ab dem <b>01.01.2026<\/b> <b>60,00<\/b> Euro im Jahr (siehe Bild 4).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_004.png\" alt=\"Daten der Tabellen tblBeitragsarten und tblBeitragssaetze\" width=\"574,559\" height=\"359,5813\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 4: Daten der Tabellen tblBeitragsarten und tblBeitragssaetze<\/span><\/b><\/p>\n<p>Den Satz, der an einem Stichtag gilt, liefert die Abfrage <b>qryBeitragssaetzeAmStichtag<\/b>:<\/p>\n<pre>PARAMETERS Stichtag DateTime;\r\nSELECT a.Beitragsart, s.GueltigAb, s.GueltigBis, s.Jahresbeitrag\r\nFROM tblBeitragssaetze AS s INNER JOIN tblBeitragsarten AS a\r\nON s.BeitragsartID = a.BeitragsartID\r\nWHERE s.GueltigAb &lt;= [Stichtag]\r\nAND (s.GueltigBis &gt;= [Stichtag] OR s.GueltigBis IS NULL)\r\nORDER BY a.Beitragsart;<\/pre>\n<p>Die Abfrage erwartet den Parameter <b>Stichtag<\/b>. Sie w&auml;hlt alle S&auml;tze, die an diesem Tag bereits g&uuml;ltig und noch nicht abgelaufen sind. Ein offener Satz hat im Feld <b>GueltigBis<\/b> den Wert <b>NULL<\/b>.<\/p>\n<p>Ein Vergleich mit <b>NULL<\/b> ergibt <b>NULL<\/b> statt <b>Wahr<\/b>. Daher pr&uuml;fen wir das Feld zus&auml;tzlich mit <b>IS NULL<\/b>. F&uuml;r den <b>30.06.2025<\/b> liefert die Abfrage bei der Beitragsart <b>Erwachsene<\/b> den Betrag <b>55,00<\/b>, f&uuml;r den <b>01.01.2026<\/b> den Betrag <b>60,00<\/b> (siehe Bild 5).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_005.png\" alt=\"Beitragss&auml;tze am 1.1.2026\" width=\"424,5589\" height=\"251,7217\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 5: Beitragss&auml;tze am 1.1.2026<\/span><\/b><\/p>\n<h2>Bankverbindungen und Mandate<\/h2>\n<p>Die Tabelle <b>tblBankverbindungen<\/b> geh&ouml;rt zu einer Person und enth&auml;lt die Felder <b>Kontoinhaber<\/b>, <b>IBAN<\/b> und <b>BIC<\/b>.<\/p>\n<p>Der Kontoinhaber ist ein Textfeld, denn der Name auf dem Konto muss nicht der des Mitglieds sein: Bei einem Kind zahlt in der Regel ein Elternteil. Das Feld <b>BIC<\/b> bleibt optional, weil die Datei ohne BIC auskommt (siehe Bild 6).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_006.png\" alt=\"Tabelle zum Speichern der Bankverbindung einer Person\" width=\"549,559\" height=\"157,1422\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 6: Tabelle zum Speichern der Bankverbindung einer Person<\/span><\/b><\/p>\n<p>Das Mandat steht in der Tabelle <b>tblMandate<\/b> (siehe Bild 7).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_007.png\" alt=\"Tabelle zum Speichern der Mandate\" width=\"599,559\" height=\"175,8237\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 7: Tabelle zum Speichern der Mandate<\/span><\/b><\/p>\n<p>Sie enth&auml;lt diese Felder:<\/p>\n<ul>\n<li><b>BankverbindungID:<\/b> Das Konto, von dem eingezogen wird.<\/li>\n<li><b>Mandatsreferenz:<\/b> Die Kennung des Mandats mit h&ouml;chstens 35 Zeichen. Der eindeutige Index <b>idxMandatsreferenz<\/b> l&auml;sst jede Referenz nur einmal zu.<\/li>\n<li><b>Unterschriftsdatum:<\/b> Das Datum der Unterschrift auf dem Mandat.<\/li>\n<li><b>Mandatsart:<\/b> Der Standardwert ist <b>Wiederkehrend<\/b>. F&uuml;r ein Mandat, das nur f&uuml;r eine Lastschrift gilt, steht dort <b>Einmalig<\/b>.<\/li>\n<li><b>Status:<\/b> Der Standardwert ist <b>Aktiv<\/b>. Weitere Werte, etwa f&uuml;r gesperrte Mandate, erg&auml;nzen wir im Beitrag zur Erfassung der Mandate.<\/li>\n<\/ul>\n<p>In den Beispieldaten gibt es zu jedem Mitglied eine Bankverbindung und ein Mandat. Die vier Mitglieder der Familie Mueller teilen sich ein Konto, haben aber jeweils ein eigenes Mandat (siehe Bild 8).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_008.png\" alt=\"Personen mit Mandaten und Bankdaten\" width=\"700\" height=\"217,3308\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 8: Personen mit Mandaten und Bankdaten<\/span><\/b><\/p>\n<p>Den Folgetyp speichern wir nicht. Er ergibt sich aus den Lastschriften, die ein Mandat bereits hatte: Hat das Mandat die Mandatsart <b>Einmalig<\/b>, gilt <b>OOFF<\/b>. Gibt es noch keine Lastschrift in einem eingereichten Lauf, gilt <b>FRST<\/b>, andernfalls <b>RCUR<\/b>. Ein gespeicherter Wert k&ouml;nnte dem tats&auml;chlichen Verlauf widersprechen. Wie wir diese Ableitung per VBA umsetzen, zeigt der Beitrag <b>Vereinsverwaltung: Mitglieder, Bankverbindungen und Mandate (www.access-im-unternehmen.de\/1630)<\/b>.<\/p>\n<h2>Forderungen, L&auml;ufe und Positionen<\/h2>\n<p>Die Tabelle <b>tblBeitragsforderungen<\/b> enth&auml;lt je Mitgliedschaft und Beitragsjahr eine Forderung mit den Feldern <b>MitgliedschaftID<\/b>, <b>Beitragsjahr<\/b>, <b>Betrag<\/b> und <b>Status<\/b>. Der Standardwert des Feldes <b>Status<\/b> ist <b>Offen<\/b>. Den Betrag speichern wir, statt ihn aus dem Beitragssatz zu berechnen, denn bei einem Eintritt im Laufe des Jahres oder bei einem Rabatt weicht er vom Jahresbeitrag ab (siehe Bild 9).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_009.png\" alt=\"Tabelle zum Speichern der Beitragsforderungen\" width=\"549,559\" height=\"144,7064\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 9: Tabelle zum Speichern der Beitragsforderungen<\/span><\/b><\/p>\n<p>Ein Einzug entspricht einer Datei und damit einem Datensatz der Tabelle <b>tblLastschriftlaeufe<\/b>. Die Felder <b>Erstellt<\/b>, <b>Faelligkeit<\/b> und <b>MsgId<\/b> &uuml;bernehmen wir sp&auml;ter in den Kopf der Datei. Das Feld <b>Status<\/b> hat den Standardwert <b>Angelegt<\/b>. Sobald wir den Lauf bei der Bank eingereicht haben, &auml;ndern wir den Wert des Feldes <b>Status<\/b> (siehe Bild 10).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_010.png\" alt=\"Tabelle zum Speichern der Lastschriftl&auml;ufe\" width=\"549,559\" height=\"144,1871\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 10: Tabelle zum Speichern der Lastschriftl&auml;ufe<\/span><\/b><\/p>\n<p>Die Tabelle <b>tblLastschriftpositionen<\/b> verbindet je eine Forderung mit einem Mandat und einem Lauf. Das Feld <b>Betrag<\/b> kopiert den Betrag der Forderung. &Auml;ndert sich die Forderung sp&auml;ter, bleibt die eingereichte Position unver&auml;ndert (siehe Bild 11).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_011.png\" alt=\"Tabelle zum Speichern der Lastschriftpositionen\" width=\"549,559\" height=\"149,5792\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 11: Tabelle zum Speichern der Lastschriftpositionen<\/span><\/b><\/p>\n<p>Anzahl und Summe eines Laufs berechnen wir mit einer Abfrage. F&uuml;r den Lauf mit dem Wert <b>1<\/b> im Feld <b>LaufID<\/b> ermitteln wir die Werte f&uuml;r <b>NbOfTxs<\/b> und <b>CtrlSum<\/b> mit dieser Abfrage:<\/p>\n<pre>SELECT Count(*) AS NbOfTxs, Sum(Betrag) AS CtrlSum\r\nFROM tblLastschriftpositionen WHERE LaufID = 1;<\/pre>\n<p>Solange die Beispieldatenbank keine Positionen enth&auml;lt, liefert die Abfrage f&uuml;r <b>NbOfTxs<\/b> den Wert <b>0<\/b> und f&uuml;r <b>CtrlSum<\/b> den Wert <b>NULL<\/b>.<\/p>\n<h2>Optionen des Vereins<\/h2>\n<p>Die Tabelle <b>tblOptionen<\/b> enth&auml;lt einen Datensatz mit den Angaben des Vereins: <b>Vereinsname<\/b>, <b>VereinsIBAN<\/b>, <b>GlaeubigerID<\/b> und <b>Altersstichtag<\/b>. Die Gl&auml;ubiger-Identifikationsnummer steht hier und nicht beim Mandat, denn sie gilt f&uuml;r den ganzen Verein. Die Beispieldaten enthalten die Test-ID <b>DE98ZZZ09999999999<\/b>. Den Altersstichtag <b>31.12.2026<\/b> nutzen wir sp&auml;ter, um aus dem Alter die Beitragsart zu bestimmen (siehe Bild 12).<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_012.png\" alt=\"Tabelle zum Speichern der Optionen der Anwendungen\" width=\"549,559\" height=\"152,1721\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 12: Tabelle zum Speichern der Optionen der Anwendungen<\/span><\/b><\/p>\n<h2>Beziehungen und Integrit&auml;t<\/h2>\n<p>Zehn Beziehungen verbinden die Tabellen, darunter <b>relFamilienPersonen<\/b> und <b>relPersonenMitgliedschaften<\/b>. Jede davon erzwingt die referenzielle Integrit&auml;t (siehe Bild 13). Ein Mandat zu einer nicht vorhandenen Bankverbindung lehnt Access deshalb ab. Warum diese Einstellung sinnvoll ist, erl&auml;utert der Beitrag <b>Warum Beziehungen mit referenzieller Integrit&auml;t? (www.access-im-unternehmen.de\/1586)<\/b>.<\/p>\n<p class=\"image\"><img decoding=\"async\" src=\"..\/fileadmin\/_temp_\/2026_06\/pic_1629_013.png\" alt=\"&Uuml;bersicht &uuml;ber das Datenmodell der Anwendung\" width=\"700\" height=\"278,1885\" \/><\/p>\n<p><b><span style=\"color:darkgrey;\">Bild 13: &Uuml;bersicht &uuml;ber das Datenmodell der Anwendung<\/span><\/b><\/p>\n<h2>Beispieldaten erzeugen<\/h2>\n<p>F&uuml;r die folgenden Beitr&auml;ge ben&ouml;tigen wir Daten. Wir erzeugen sie im Modul <b>mdlBeispieldaten<\/b> per VBA-Prozedur: 40 Personen, davon drei Familien mit zusammen zehn Mitgliedern und 30 Einzelpersonen, dazu je Person eine Mitgliedschaft, eine Bankverbindung und ein Mandat.<\/p>\n<p>Damit Sie dieselben Daten erhalten wie wir, setzen wir den Zufallsgenerator mit <b>Rnd -1<\/b> zur&uuml;ck und starten ihn mit <b>Randomize 42<\/b>. Die Zufallswerte folgen dann derselben Reihenfolge.<\/p>\n<p>Die Funktion <b>PersonAnlegen<\/b> legt eine einzelne Person an (siehe Listing 1). Als Parameter &uuml;bergeben wir die <b>FamilieID<\/b>, den Nachnamen und die Angabe, ob die Person erwachsen ist.<\/p>\n<pre><span style=\"color:blue;\">Private Function <\/span>PersonAnlegen(ByVal lngFamilieID<span style=\"color:blue;\"> As Long<\/span>, ByVal strNachname<span style=\"color:blue;\"> As String<\/span>, ByVal blnErwachsen<span style=\"color:blue;\"> As <\/span>_\r\n        Boolean)<span style=\"color:blue;\"> As Long<\/span>\r\n    ' Legt eine Person mit zufaelligen Daten an, liefert die PersonID\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>blnMaennlich<span style=\"color:blue;\"> As Boolean<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strVorname<span style=\"color:blue;\"> As String<\/span>\r\n    blnMaennlich = (Rnd &lt; 0.5)\r\n    <span style=\"color:blue;\">If <\/span>blnMaennlich<span style=\"color:blue;\"> Then<\/span>\r\n        strVorname = ZufallsWert(cstrVornamenMaennlich)\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        strVorname = ZufallsWert(cstrVornamenWeiblich)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span>strNachname = \"\"<span style=\"color:blue;\"> Then<\/span> strNachname = ZufallsWert(cstrNachnamen)\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"tblPersonen\", dbOpenDynaset)\r\n    rst.Add<span style=\"color:blue;\">New<\/span>\r\n    <span style=\"color:blue;\">If <\/span>lngFamilieID &gt; 0<span style=\"color:blue;\"> Then<\/span> rst!FamilieID = lngFamilieID\r\n    rst!Anrede = IIf(blnMaennlich, \"Herr\", \"Frau\")\r\n    rst!Vorname = strVorname\r\n    rst!Nachname = strNachname\r\n    rst!Geburtsdatum = IIf(blnErwachsen, ZufallsDatum(1955, 2002), ZufallsDatum(2008, 2018))\r\n    rst!Strasse = ZufallsWert(cstrStrassen) & \" \" & (1 + Int(Rnd * 60))\r\n    rst!PLZ = \"12345\"\r\n    rst!Ort = \"Beispielstadt\"\r\n    rst!EMail = LCase(strVorname & \".\" & strNachname) & \"@example.org\"\r\n    rst.Update\r\n    rst.Bookmark = rst.LastModified\r\n    PersonAnlegen = rst!PersonID\r\n    rst.Close\r\n<span style=\"color:blue;\">End Function<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 1: Eine Person mit zuf&auml;lligen Daten anlegen<\/span><\/b><\/p>\n<p>Die Funktion w&auml;hlt Vornamen, Nachnamen und Stra&szlig;en mit der Hilfsfunktion <b>ZufallsWert<\/b> aus kommaseparierten Listen, die als Konstanten am Anfang des Moduls stehen. Das Geburtsdatum liefert die Hilfsfunktion <b>ZufallsDatum<\/b>. Die Funktion <b>IIf<\/b> wertet beide Zweige aus. Dadurch verbraucht sie mehr Zufallszahlen, was die Zufallsfolge ver&auml;ndert. Da der Startwert fest ist, bleibt das Ergebnis reproduzierbar. Nach dem Speichern setzt die Funktion das Lesezeichen mit der Eigenschaft <b>LastModified<\/b> auf den neuen Datensatz, liest dessen <b>PersonID<\/b> und gibt sie zur&uuml;ck.<\/p>\n<p>Die Mandate und Bankverbindungen legt die Prozedur <b>BankverbindungAnlegen<\/b> an (siehe Listing 2). Die Prozedur <b>BeispieldatenErzeugen<\/b> ruft sie f&uuml;r jede Person auf, nachdem die Mitgliedschaften angelegt sind.<\/p>\n<pre><span style=\"color:blue;\">Private Sub <\/span>BankverbindungAnlegen(ByVal lngPersonID<span style=\"color:blue;\"> As Long<\/span>)\r\n    <span style=\"color:blue;\">Dim <\/span>rst<span style=\"color:blue;\"> As <\/span>DAO.Recordset\r\n    <span style=\"color:blue;\">Dim <\/span>lngFamilieID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngKontoPerson<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>lngBankID<span style=\"color:blue;\"> As Long<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>strIban<span style=\"color:blue;\"> As String<\/span>\r\n    <span style=\"color:blue;\">Dim <\/span>datUnterschrift<span style=\"color:blue;\"> As Date<\/span>\r\n    lngFamilieID = Nz(DLookup(\"FamilieID\", \"tblPersonen\", \"PersonID=\" & lngPersonID), 0)\r\n    lngKontoPerson = lngPersonID\r\n    <span style=\"color:blue;\">If <\/span>lngFamilieID &gt; 0<span style=\"color:blue;\"> Then<\/span>\r\n        lngKontoPerson = DMin(\"PersonID\", \"tblPersonen\", \"FamilieID=\" & lngFamilieID)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">If <\/span>lngKontoPerson = lngPersonID<span style=\"color:blue;\"> Then<\/span>\r\n        strIban = IbanErzeugen(\"DE\", \"12345678\" & _\r\n            Format(CLng(Rnd * 89999999) + 10000000, \"0000000000\"))\r\n    <span style=\"color:blue;\">Else<\/span>\r\n        strIban = DLookup(\"IBAN\", \"tblBankverbindungen\", \"PersonID=\" & lngKontoPerson)\r\n    <span style=\"color:blue;\">End If<\/span>\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"tblBankverbindungen\", dbOpenDynaset)\r\n    rst.Add<span style=\"color:blue;\">New<\/span>\r\n    rst!PersonID = lngPersonID\r\n    rst!Kontoinhaber = DLookup(\"Vorname\", \"tblPersonen\", _\r\n        \"PersonID=\" & lngKontoPerson) & \" \" & _\r\n        DLookup(\"Nachname\", \"tblPersonen\", \"PersonID=\" & lngKontoPerson)\r\n    rst!IBAN = strIban\r\n    rst.Update\r\n    rst.Bookmark = rst.LastModified\r\n    lngBankID = rst!BankverbindungID\r\n    rst.Close\r\n    datUnterschrift = DLookup(\"Eintritt\", \"tblMitgliedschaften\", \"PersonID=\" & lngPersonID) + Int(Rnd * 14)\r\n    <span style=\"color:blue;\">Set<\/span> rst = CurrentDb.OpenRecordset(\"tblMandate\", dbOpenDynaset)\r\n    rst.Add<span style=\"color:blue;\">New<\/span>\r\n    rst!BankverbindungID = lngBankID\r\n    rst!Mandatsreferenz = \"M\" & Year(datUnterschrift) & \"-\" & Format(lngPersonID, \"0000\")\r\n    rst!Unterschriftsdatum = datUnterschrift\r\n    rst.Update\r\n    rst.Close\r\n<span style=\"color:blue;\">End Sub<\/span><\/pre>\n<p><b><span style=\"color:darkgrey;\">Listing 2: Bankverbindung und Mandat einer Person anlegen<\/span><\/b><\/p>\n<p>Die Prozedur bestimmt zuerst, wessen Konto die Person nutzt. Geh&ouml;rt sie zu einer Familie, nutzt sie das Konto des Familienmitglieds mit der kleinsten <b>PersonID<\/b>. Andernfalls nutzt sie ein eigenes Konto. Nur wer sein eigenes Konto nutzt, erh&auml;lt eine neue IBAN. Sie entsteht mit der Funktion <b>IbanErzeugen<\/b> aus dem Beitrag <b>Pr&uuml;fziffern per VBA berechnen und pr&uuml;fen (www.access-im-unternehmen.de\/1618)<\/b>, die wir mit den Modulen <b>mdlPruefziffern<\/b> und <b>mdlRegEx<\/b> &uuml;bernommen haben. Die <b>Mandatsreferenz<\/b> setzt sich aus dem Buchstaben <b>M<\/b>, dem Jahr der Unterschrift und der <b>PersonID<\/b> zusammen, etwa <b>M2019-0001<\/b>.<\/p>\n<p>Die Prozedur <b>BeispieldatenErzeugen<\/b> ruft die Prozeduren zum Anlegen der Tabellendaten nacheinander auf. Zuvor l&ouml;scht sie die vorhandenen Daten, zuerst in den Detailtabellen. Starten Sie <b>BeispieldatenErzeugen<\/b> im Direktbereich:<\/p>\n<pre>BeispieldatenErzeugen\r\n40 Personen, 40 Mandate<\/pre>\n<p>Beim L&ouml;schen der Daten setzt Access die Autowerte nicht zur&uuml;ck. Wer die Prozedur ein zweites Mal startet, erh&auml;lt daher neue Werte f&uuml;r <b>PersonID<\/b> und damit andere Mandatsreferenzen. Damit die Nummern wieder bei <b>1<\/b> beginnen, komprimieren und reparieren Sie die Datenbank, solange die Tabellen leer sind.<\/p>\n<p>Die Abfrage <b>qryMitgliederProBeitragsart<\/b> z&auml;hlt die Mitgliedschaften je Beitragsart. In den Beispieldaten sind es <b>32<\/b> Erwachsene, <b>3<\/b> Jugendliche, <b>2<\/b> Kinder und <b>3<\/b> Senioren. Bei drei Mitgliedschaften steht im Feld <b>Austritt<\/b> der Wert <b>30.06.2026<\/b>, damit wir sp&auml;ter auch anteilige Beitr&auml;ge berechnen k&ouml;nnen.<\/p>\n<p>Ob alle 40 IBANs g&uuml;ltig sind, pr&uuml;fen wir mit der Funktion <b>IstIban<\/b> aus dem Modul <b>mdlPruefziffern<\/b>:<\/p>\n<pre>SELECT Count(*) FROM tblBankverbindungen\r\nWHERE IstIban(IBAN) = False;<\/pre>\n<p>Die Abfrage liefert den Wert <b>0<\/b>.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Wir haben das Datenmodell aus den Anforderungen der Datei <b>pain.008 <\/b>abgeleitet und mit Beispieldaten gef&uuml;llt. Es enth&auml;lt Tabellen f&uuml;r Personen, Familien, Mitgliedschaften, zeitlich g&uuml;ltige Beitragss&auml;tze, Bankverbindungen, Mandate, Forderungen, L&auml;ufe und Positionen. Die Beispieldatenbank <b>VereinsverwaltungDatenmodell.accdb<\/b> ist der Ausgangspunkt f&uuml;r die weiteren Beitr&auml;ge der Reihe.<\/p>\n<p>Im n&auml;chsten Beitrag, <b>Vereinsverwaltung: Mitglieder, Bankverbindungen und Mandate (www.access-im-unternehmen.de\/1630)<\/b>, erfassen wir Mitglieder, Bankverbindungen und Mandate in Formularen. Wir pr&uuml;fen dabei die IBAN mit der Funktion <b>IstIban<\/b> und bestimmen den Folgetyp per VBA. Die Berechnung der Beitr&auml;ge, das Erzeugen der Datei und der Spendenbescheinigungen folgen in weiteren Beitr&auml;gen. Die Tabellen f&uuml;r Spenden erg&auml;nzen wir im Beitrag <b>Vereinsverwaltung: Spendenbescheinigungen (www.access-im-unternehmen.de\/1636)<\/b>.<\/p>\n<h2>Downloads zu diesem Beitrag<\/h2>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>VereinsverwaltungDatenmodell.accdb<\/p>\n<p><a href=\"..\/fileadmin\/beispiele\/EF9D2588-C188-4F97-ADCB-44389E043775\/aiu_1629.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Vereinsverwaltung, die nur Mitglieder und Beitr&auml;ge kennt, ist schnell gebaut. Soll der Verein die Beitr&auml;ge per Lastschrift einziehen, fehlen ihr jedoch Angaben, die sich sp&auml;ter nur mit M&uuml;he erg&auml;nzen lassen: Bankverbindungen, Mandate mit Referenz und Unterschriftsdatum, Forderungen und die L&auml;ufe, in denen wir Lastschriften einreichen. Wie wir aus den Angaben der Datei &#8222;pain.008&#8220; ein passendes Datenmodell ableiten und mit Beispieldaten f&uuml;llen, zeigt der vorliegende Beitrag.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"footnotes":""},"categories":[662026,66062026,44000027],"tags":[],"class_list":["post-55001629","post","type-post","status-publish","format-standard","hentry","category-662026","category-66062026","category-Loesungen"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Vereinsverwaltung: Datenmodell - Access im Unternehmen<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Vereinsverwaltung: Datenmodell - Access im Unternehmen\" \/>\n<meta property=\"og:description\" content=\"Eine Vereinsverwaltung, die nur Mitglieder und Beitr&auml;ge kennt, ist schnell gebaut. Soll der Verein die Beitr&auml;ge per Lastschrift einziehen, fehlen ihr jedoch Angaben, die sich sp&auml;ter nur mit M&uuml;he erg&auml;nzen lassen: Bankverbindungen, Mandate mit Referenz und Unterschriftsdatum, Forderungen und die L&auml;ufe, in denen wir Lastschriften einreichen. Wie wir aus den Angaben der Datei &quot;pain.008&quot; ein passendes Datenmodell ableiten und mit Beispieldaten f&uuml;llen, zeigt der vorliegende Beitrag.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/\" \/>\n<meta property=\"og:site_name\" content=\"Access im Unternehmen\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-09T18:55:10+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a\" \/>\n<meta name=\"author\" content=\"Andr\u00e9 Minhorst\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andr\u00e9 Minhorst\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"11\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/\"},\"author\":{\"name\":\"Andr\u00e9 Minhorst\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\"},\"headline\":\"Vereinsverwaltung: Datenmodell\",\"datePublished\":\"2026-11-09T18:55:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/\"},\"wordCount\":1971,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/4e18575a32e14bcdbd249cc11220335a\",\"articleSection\":[\"2026\",\"6\\\/2026\",\"L\u00f6sungen\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/\",\"name\":\"Vereinsverwaltung: Datenmodell - Access im Unternehmen\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#primaryimage\"},\"thumbnailUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/4e18575a32e14bcdbd249cc11220335a\",\"datePublished\":\"2026-11-09T18:55:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#primaryimage\",\"url\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/4e18575a32e14bcdbd249cc11220335a\",\"contentUrl\":\"http:\\\/\\\/vg01.met.vgwort.de\\\/na\\\/4e18575a32e14bcdbd249cc11220335a\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/Vereinsverwaltung_Datenmodell\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Vereinsverwaltung: Datenmodell\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#website\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"name\":\"Access im Unternehmen\",\"description\":\"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access\",\"publisher\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/access-im-unternehmen.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#organization\",\"name\":\"Andr\u00e9 Minhorst Verlag\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"contentUrl\":\"https:\\\/\\\/access-im-unternehmen.de\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/aiu_wp.png\",\"width\":370,\"height\":111,\"caption\":\"Andr\u00e9 Minhorst Verlag\"},\"image\":{\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/access-im-unternehmen.de\\\/#\\\/schema\\\/person\\\/5efd1af2265d5b82ecce8bdb2db6694d\",\"name\":\"Andr\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Vereinsverwaltung: Datenmodell - Access im Unternehmen","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/","og_locale":"de_DE","og_type":"article","og_title":"Vereinsverwaltung: Datenmodell - Access im Unternehmen","og_description":"Eine Vereinsverwaltung, die nur Mitglieder und Beitr&auml;ge kennt, ist schnell gebaut. Soll der Verein die Beitr&auml;ge per Lastschrift einziehen, fehlen ihr jedoch Angaben, die sich sp&auml;ter nur mit M&uuml;he erg&auml;nzen lassen: Bankverbindungen, Mandate mit Referenz und Unterschriftsdatum, Forderungen und die L&auml;ufe, in denen wir Lastschriften einreichen. Wie wir aus den Angaben der Datei \"pain.008\" ein passendes Datenmodell ableiten und mit Beispieldaten f&uuml;llen, zeigt der vorliegende Beitrag.","og_url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/","og_site_name":"Access im Unternehmen","article_published_time":"2026-11-09T18:55:10+00:00","og_image":[{"url":"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a","type":"","width":"","height":""}],"author":"Andr\u00e9 Minhorst","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Andr\u00e9 Minhorst","Gesch\u00e4tzte Lesezeit":"11\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#article","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/"},"author":{"name":"Andr\u00e9 Minhorst","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d"},"headline":"Vereinsverwaltung: Datenmodell","datePublished":"2026-11-09T18:55:10+00:00","mainEntityOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/"},"wordCount":1971,"commentCount":0,"publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a","articleSection":["2026","6\/2026","L\u00f6sungen"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/","url":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/","name":"Vereinsverwaltung: Datenmodell - Access im Unternehmen","isPartOf":{"@id":"https:\/\/access-im-unternehmen.de\/#website"},"primaryImageOfPage":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#primaryimage"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#primaryimage"},"thumbnailUrl":"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a","datePublished":"2026-11-09T18:55:10+00:00","breadcrumb":{"@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/"]}]},{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#primaryimage","url":"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a","contentUrl":"http:\/\/vg01.met.vgwort.de\/na\/4e18575a32e14bcdbd249cc11220335a"},{"@type":"BreadcrumbList","@id":"https:\/\/access-im-unternehmen.de\/Vereinsverwaltung_Datenmodell\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/access-im-unternehmen.de\/"},{"@type":"ListItem","position":2,"name":"Vereinsverwaltung: Datenmodell"}]},{"@type":"WebSite","@id":"https:\/\/access-im-unternehmen.de\/#website","url":"https:\/\/access-im-unternehmen.de\/","name":"Access im Unternehmen","description":"Das Magazin f\u00fcr Datenbankentwickler auf Basis von Microsoft Access","publisher":{"@id":"https:\/\/access-im-unternehmen.de\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/access-im-unternehmen.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Organization","@id":"https:\/\/access-im-unternehmen.de\/#organization","name":"Andr\u00e9 Minhorst Verlag","url":"https:\/\/access-im-unternehmen.de\/","logo":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/","url":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","contentUrl":"https:\/\/access-im-unternehmen.de\/wp-content\/uploads\/2019\/09\/aiu_wp.png","width":370,"height":111,"caption":"Andr\u00e9 Minhorst Verlag"},"image":{"@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/access-im-unternehmen.de\/#\/schema\/person\/5efd1af2265d5b82ecce8bdb2db6694d","name":"Andr\u00e9 Minhorst","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g","caption":"Andr\u00e9 Minhorst"}}]}},"_links":{"self":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001629","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/comments?post=55001629"}],"version-history":[{"count":0,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/posts\/55001629\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/media?parent=55001629"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/categories?post=55001629"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-im-unternehmen.de\/data\/wp\/v2\/tags?post=55001629"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}