Neuigkeiten:

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

Mobiles Hauptmenü

Verknüpfung mehrer Tabellen zu einem Fremdschlüssel

Begonnen von martin1991, Juni 13, 2019, 11:19:19

⏪ vorheriges - nächstes ⏩

martin1991

Hallo zusammen,

ich würde gerne bei meiner Projektverwaltung die Möglichkeit haben, Anhange anzufügen.
Dazu habe ich eine Tabelle tblProjekte, eine Tabelle tblKunden und eine Tabelle tblAnhaenge.

Mein Problem besteht jetzt darin, das es beim Projekt sowie beim Kunden Anhänge gibt.
Ich will aber nicht für jede Tabelle eine eigene "Anhangtabelle" erstellen. Gibt es eine Möglichkeit wo etwas mit nur einer "Anhangtabelle" zu realisieren?

Übrigens handelt es sich bei der Tabelle Anhänge nur um "Hyperlinksammlung" es wird nicht das Anlage-Feld verwendet!!!

Ich hoffe ich habe mein Problem genau genug erklärt =)

Vielen Dank im Vorraus für eure Hilfe!

Mfg
Martin

EDIT
Ich habe noch einen Anhang hinzugefügt, wo man vielleicht ein wenig besser sieht, wo mein Problem liegt.

Wenn ich in tblKunden / tblProjekt ein Feld mit der ID von tblAnhang verknüpfe kann ich pro Kunde / Projekt nur ein Anhang verlinken. Wenn ich in tblAnhang ein Feld mit der ID von tblKunden und tblProjekt verknüpfe ist die ID ja nicht eindeutig, da die ID ja nur pro Tabelle eindeutig ist. Somit könnte es einen Kunden 1 und ein Projekt 1 geben...

PhilS

Erstelle in der Anhang-Tabelle doch einfach zwei Spalten. Eine für ProjetkId eine für KundeId. Nur die jeweils benötigte wird gefüllt. Dazu solltest du eine Gültigkeitsregel ergänzen, dass immer eine der beiden Spalten gefüllt ist.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

martin1991

War auch meine erste Idee.
Beim angehängten Bsp handelt es sich aber nur um eine Testdatenbank. Ich würde die Tabelle gerne für unsere "große" Betriebsdatenbank verwenden. Dabei handelt es sich um eine Datenbank mit ca. 35 verschiedenen Tabellen (Kunden, Projekte, Mitarbeiter, Artikel, etc....) So gut wie jede Tabelle verwendet momentan das Anlagefeld. (ein Kollege von mir meinte, das wäre eine gute Idee =)) Ich muss jetzt diese Anlagefelder rausnehmen und mit einer alternative versehen. Ich glaube aber nicht, das es eine Sinnvolle Lösung ist, in der Tabelle Anhänge für jede Tabelle ein Feld zu erstellen. Muss doch anders funktionieren.


Tally

Hallo Martin
Du hast erwähnt, dass Du die Anhänge für Kunden und Projekte benötigst. Davon ausgehend, dass Du sowohl eine Kunden-ID wie auch eine Projekt-ID hast, reichen doch in der Anhang-Tabelle die Felder
ID (Autowert)
Kunden-Nr
Projekt-Nr
Anhang
Anschliessend kannst Du diese ja jeweils in dem Adress- und Projektformularen als UF einfügen und zwar bei den Kunden nur jene, welche eine Kunden-Nr enthalten und bei den Projekten jene mit einer Projekt-Nr. Eine vorgängige Bereinigung der übrigen Tabellen wird Dir aber vermutlich nicht erspart bleiben weil Du die dortigen Anhänge einem dieser beiden Bereiche zuweisen musst.
Gruss René

martin1991

Hallo Tally,

ist eigentlich der gleiche Lösungsansatz wie phil gepostet hat.
Ich hätte die Bsp-Datenbank doch nicht so klein halten sollen =)

Diese Lösung fände ich bei 2 Tabellen mit Anhängen noch vertretbar bzw. könnte ich mir da auch vorstellen jeweils eine Tabelle AnhangProjekt und AnhangKunde zu erstellen. Das aber für ca. 35 Tabellen anzulegen ist doch recht mühsam. Zumal dahinter ja auch eine VBA Programmierung steckt die ich dann auch 35 ändern müsste.

martin1991

so habe jetzt meine DB auch noch hochgeladen, vielleicht weckt ja das das Interesse.

Wie gesagt ich brauche eine Lösung die auch mit einer größeren Anzahl an Tabellen funktioniert.

unter frm Kunde bzw. frmProjekt könnt ihr den Buttton klicken und seht wo mein problem liegt.

PhilS

Zitat von: martin1991 am Juni 13, 2019, 16:34:07
Wie gesagt ich brauche eine Lösung die auch mit einer größeren Anzahl an Tabellen funktioniert.
Du könntest es mit einer Zwischentabelle lösen, die nur eine einzige AutoWert-Spalte als PK enthält. Diese wird dann 1:1 zu den verschiedenen Tabellen verknüpft und 1:N zu der Tabellen mit den tatsächlichen Anhängen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

martin1991

Hallo Phil,

danke für die Antwort.
Ich verstehe aber immer noch nicht wie das mein Problem löst.
Ich habe ja pro Datensatz in Projekt oder Kunde mehrere Anhänge.
mit deiner Zwischentabellenlösung  kann ich doch wieder nur ein Anhang pro Datensatz verlinken. Ich denke langsam, das ich nicht darum herum komme pro Tabelle in der es Anhänge gibt eine "Anhangtabelle" zu erstellen.
oder ist es möglich, 2 Verbindungen zu kombinieren? Dann könnte ich bei tblAnhang noch ein Feld mit "Tabellentyp" als FS anlegen und diesen mit zB tblProjekte.Tabellentyp verknüpfen.
Somit wüsste ich ja wenn es zwei Datensätze mit tblAnhang.ID_FS = 1 gibt ob es zur tblProjekt oder tblAnhang gehört.

Kann mir jemand sagen, wie man so etwas lösen könnte?

MzKlMu

Hallo,
ich habe mir mal die DB angesehen, da gibt es noch Klärungsbedarf.

- Warum sind keine Beziehungen mit referentieller Integrität angelegt ?
- Ist ein Projekt nicht Kundenbezogen (Das Bad wird doch für einen bestimmten Kunden gemacht) ?
Gruß Klaus

martin1991

Guten Morgen MzKlMu,

-muss ich vergessen haben =) sollte zum testen aber nicht ein riesen Problem sein.
-natürlich stehen Projekt und Kunde in einer Beziehung.
Ist aber für diese Aufgabenstellung irrelevant.
Die Anhänge bei Kunde haben nichts mit dem Projekt zu tun und umgekehrt.
Beim Kunde könnten z.B. Verträge mit diesem angehängt werden und beim Projekt Angebote etc.
Wie oben erwähnt gibt es ja in der eigentlichen DB noch viel mehr Tabellen die auch nicht immer in einer direkten Verbindung stehen.

PhilS

Zitat von: martin1991 am Juni 14, 2019, 07:51:45
Ich habe ja pro Datensatz in Projekt oder Kunde mehrere Anhänge.
mit deiner Zwischentabellenlösung  kann ich doch wieder nur ein Anhang pro Datensatz verlinken.
Nein.

Die erste Hälfte deiner Aussage ist korrekt. Du kannst jeweils nur einen Datensatz aus der von mir genannten Zwischentabelle verlinken. Diese enthält aber noch nicht die Anhänge!

Zu jedem Datensatz der Zwischentabelle kannst du nun N Anhang-Datensätze verlinken. - Somit ist dein Problem gelöst.

Die Schwierigkeit besteht bei dem Ansatz darin, dass du jeweils den Datensatz in der Zwischentabelle per Code erstellen und zuweisen musst. - Eine simplere Lösung fällt mir jedoch nicht ein.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

martin1991

Super jetzt hats geklappt!  ;D

im Anhang nochmal die Lösung als Screenshot.
Jetzt muss ich das nur noch in VBA erstellt bekommen =)
Wenn ihr möchtet kann ich die Lösung meiner BspDB hier wieder posten wenn das VBA-Tool dazu fertig ist.