Neuigkeiten:

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

Mobiles Hauptmenü

VBA Mehrfachbeziehungen erstellen

Begonnen von bungev, April 30, 2020, 22:16:18

⏪ vorheriges - nächstes ⏩

bungev

Hallo zusammen,

ich möchte gerne per VBA eine "Mehrfachbeziehung" erstellen.

Bsp.

Tabelle1 Farben
Farbe1ID
Farbe2ID
Farbe3ID
Farbe4ID

Tabelle2 Farben_Einzelwerte (hier stehen die einzelnen RGB - Werte pro Farbe drin)
ID
FarbeBezeichnung
RGBWert

Die Tabelle 1 soll sich jetzt mit Farbe1-4ID auf Tabelle 2 ID beziehen

Mit AddRelation "Bezeichnung", "Farben", "Farben_Einzelfarben", "Farbe1ID", "ID", 7 bekomme ich zwar die erste Beziehung hin, aber bei den folgenden fügt er Tabelle 2 immer mit Farben_Einzelfarben_1, Farben_Einzelfarben_2 usw. ein.

Mache ich dies manuelle, kann man ja in der Eingabemaske mehrere Beziehungspunkte eintragen.

Wie geht so etwas per VBA?

Vielen Dank

Volker

MzKlMu

#1
Hallo,
Zitataber bei den folgenden fügt er Tabelle 2 immer mit Farben_Einzelfarben_1, Farben_Einzelfarben_2 usw. ein.
Das ist auch richtig so. Zur Unterscheidung der 4 Felder die sich ja alle auf eine Tabelle beziehen, vergibt Access Aliasnamen indem die Zahl hinten angehängt wird.
Wenn Du Dich später auf ein solches Feld beziehst muss dieser Aliasname dem Feldname voran gestellt werden, damit der Inhalt richtig idendifiziert wird. Also so:
Farben_Einzelfarben!Farbe1ID
Farben_Einzelfarben_1!Farbe2ID
Farben_Einzelfarben_2!Farbe3ID
Farben_Einzelfarben_3!Farbe4ID

Wenn Du es manuell machst, so musst Du das genau so machen. Die Tabelle Farben_Einzelfarben wird 4x in das Beziehungsfenster gezogen, dann entsteht das gleiche Bild.

Mir scheint aber, dass das Konzept eher falsch ist, zu was (Gegenstand ect.) willst Du die 4 Farben zuordnen.
Hier würde man eher eine n:m Beziehung mit 3 Tabellen vorziehen. Hier werden in einer Zuordnungstabelle die Farben in je einem Datensatz zugeordnet und nicht in 4 Feldern.

Gruß Klaus

bungev

Hallo Klaus,

vielen Dank erst einmal für die schnelle Antwort.

Das ganze ist für eine Modelleisenbahndatenbank und die FarbenID's stehen für die einzelnen Farben der Modelle und daher dieser Tabellenaufbau.

Klar könnte ich die Farben auch für einen Artikel untereinander bringen, aber die Tabelle hat auch noch ein Bezeichnungsfeld, welches die Farbennamen aller gewählten Farben aufnimmt und dieses Bezeichnungsfeld soll später in einem Bericht angezeigt werden.

Wenn ich doch manuell eine Beziehung einstelle, dann habe ich bei Access 2019 doch die Möglichkeit, in einer Einstellung die vier Beziehungen einzutragen
Farben1ID, ID
Farben2ID, ID
Farben3ID, ID
Farben4ID, ID

so dass sich folgendes Bild ergibt.
Farben1ID ----|
Farben2ID ----|__> ID
Farben3ID ----|
Farben4ID ----|

Sollte dies falsch sein, dann ist es doch aber schon von Access (Microsoft) falsch, solch eine Möglichkeit anzubieten.

Daher würde mein Bauchgefühl sagen, dass die o. g. Beziehung schon richtig ist, sich diese aber ggf. per VBA nicht so realisieren lässt.

Oder gibt es doch noch eine Möglichkeit?

Gruß
Volker

DF6GL

Hallo,

ich pflichte Dir nicht bei...

ZitatDas ganze ist für eine Modelleisenbahndatenbank und die FarbenID's stehen für die einzelnen Farben der Modelle und daher dieser Tabellenaufbau

Es ist egal, ob  für eine  Modelleisenbahndatenbank oder eine Waschmaschinendatenbank, der Aufbau der mit solchen "Auflistungsfeldern" ist schlichtweg falsch und führt nur zu Frust und Tricksereien bis hin zum Wegkippen in die Tonne.

Die einzig vernünftige Methode ist eine n-m-Beziehung zwischen passenden Tabellen.


Zitatdann ist es doch aber schon von Access (Microsoft) falsch, solch eine Möglichkeit anzubieten.

MS bietet viele Sachen an, die ihren eigenen (Programm-) Logiken widerspricht..   ;)

ZitatDaher würde mein Bauchgefühl sagen..

Verlass Dich lieber auf Grundlagenmethoden von relationalen Datenbanken  (siehe u. st. Links 1, 1a und 1b).

btw:
Zitatich möchte gerne per VBA eine "Mehrfachbeziehung" erstellen

Welchen Hintergrund hat es, an dieser Stelle VBA verwenden zu wollen?

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

bungev

Hallo Klaus,

ok, dann werde ich meine Datenmodelle noch einmal überdenken und das Ganze umstellen.

Schönes Wochenende noch.

Gruß

Volker

MzKlMu

Hallo,
die letzte Antwort war von Franz. Aber macht ja nix, wir sind ja einer Meinung.
Zitatdann ist es doch aber schon von Access (Microsoft) falsch,
Das ist kein Kriterium.
Microsoft hat noch mehrere Sachen drin die man unbedingt vermeiden sollte:
- Nachschlagefelder (in Tabellen)
- Mehrwertfelder
- berechnete Tabellenfelder
- Anlagefelder (bei vielen Anlagen)

Noch mal zur Sache:
ZitatFarben1ID ----|
Farben2ID ----|__> ID
Farben3ID ----|
Farben4ID ----|
So wärst Du niemals in der Lage in den 4 Farbfeldern unterschiedliche Farben zu speichern.
Wenn Du bei den 4 Feldern bleiben willst, so muss zwingend der Aufbau mit den Aliastabellen (virtuelle Tabellen) verwendet werden.

Aber, dass dieses Konstrukt falsch erkennst Du auch daran, dass eine 5. Farbe (sag niemals nie) eine Änderung aller Objekte (Tabellen, Abfragen, Formulare, Berichte, VBA Code) erforderlich macht. Und das darf nicht sein.

ZitatWelchen Hintergrund hat es, an dieser Stelle VBA verwenden zu wollen?
Würde mich auch mal interessieren. Warum willst Du auf die komfortablen Möglichkeiten von Access verzichten ?
Gruß Klaus

bungev

Hallo Klaus, Hallo Franz,

@Klaus: Sorry für die falsche Anrede.

Zu Eurer Frage:
Welchen Hintergrund hat es, an dieser Stelle VBA verwenden zu wollen?

Na ich habe leider einige Tabellen (ca. 50), die sich fast alle auf die Haupttabelle Artikel beziehen (direkt oder indirekt). Da ich beim optischen Gestalten der Beziehungen leider schon drei mal das gleiche Problem hatte (https://www.access-o-mania.de/forum/index.php?topic=24789.0), habe ich mir gedacht, mach es Dir ein wenig einfacher und setze die Beziehungen mit schon einmal per VBA. (hätte so zu mindestens schnell die Beziehungen herstellen können)

Da leider auch der Beziehungsbericht bei meiner Übersicht "aufgibt", habe ich per Screenshots mir halt meine Übersichtenbericht selbst erstellt.

Ja, ich habe die einzelnen Tabellen auf das nötigste reduziert und auch alle ID-Felder an den Anfang gesetzt.

Erst einmal vielen Dank für Eure Hilfe. Werde jetzt mal das Datenmodell hier und da überdenken und es dann mit 1:n oder m:n Beziehungen lösen.

Schönes Wochenende noch.

Gruß

Volker

MzKlMu

Hallo,
das Erstellen der Beziehungen per VBA wird das Problem nicht lösen. Das kommt auch damit wieder.

50 Tabellen, da würde ich auch Zweifel am Datenmodell haben.
Gruß Klaus

DF6GL

Hallo,

ZitatWerde jetzt mal das Datenmodell hier und da überdenken

ich möchte das strenger formulieren:  Überdenke das Datenmodell komplett und konstruiere den Tabellenaufbau von Grund auf neu.
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