Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Manu am März 20, 2017, 19:52:11

Titel: Doppelte Beziehung
Beitrag von: Manu am März 20, 2017, 19:52:11
Hallo zusammen. Mein Name ist Manuel, ich bin ein 30 jähriger Maschinenbau-Ingenieur und hatte bislang relativ wenig mit Access am Hut. Nun baue ich für meine Frau eine Datenbank zur Kundenverwaltung auf und habe mir schon einige Tutorials & Co. zu Gemüte geführt. Das grobe Grundgerüst steht auch schon soweit (ohne zu wissen ob alles auch wirklich richtig ist), allerdings habe ich ein Problem mit einer Beziehung. Und zwar:

Ich habe eine tblAnsprechpartner in der unter Anderem das Feld ansprHundeIDRef vorkommt, welches eine Beziehung mit referentieller Integrität zu der tblHunde mit dem Primärschlüssel hundID hat. in der tblHunde gibt es auch noch ein Feld, in dem des Hundes Tierarzt angegeben wird.
Jetzt wollte ich für die Tierärzte nichts extra basteln, sondern diese wiederum als Firmen/Ansprechpartner anlegen. Dafür bräuchte ich dann aber wieder eine Beziehung von dem Tierarztfeld zur tblAnsprechpartner, bzw. ansprID (Primärschlüssel). Funktionieren 2 Beziehungen irgendwie an einer Tabelle, macht das Sinn, oder wie könnte man das lösen?

Ich bedanke mich schon einmal im Voraus für Eure Hilfe!


Gruß
Manuel
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am März 20, 2017, 19:58:21
Hallo,
die Tabelle Firmen/Ansprechpartner 2x in das Beziehungsbild aufnehmen. Access ergänzt automatisch mit einer _1 hinten. Zu der 2. (virtuellen) Tabelle ebenfalls eine Beziehung anlegen.
Achtung, Abfragen die auf diesen Tabellen beruhen werden von Access falsch angelegt und müssen manuell gem. dem Beziehungsbild angepasst werden.

Das ist eine normale Vorgehensweise. Die Felder werden unterschieden in dem man dem Feldnamen den Tabellennamen (auch den virtuellen ..._1) getrennt durch einen Punkt voranstellt.

Zeige dann mal ein Bild des Beziehungsfensters auf dem man alle Tabelle mit allen Feldern sieht.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am März 20, 2017, 21:28:29
Das Hinzufügen der 2. (virtuellen) Tabelle mit entsprechender Beziehung hat soweit geklappt.

Zitat von: MzKlMu am März 20, 2017, 19:58:21
Die Felder werden unterschieden in dem man dem Feldnamen den Tabellennamen (auch den virtuellen ..._1) getrennt durch einen Punkt voranstellt.

Meinst Du damit die Unterscheidung im weiteren Verlauf bei Abfragen, Berichten, etc. ?
Ein Beispiel wäre dann für das Feld anspID in tblAnsprechpartner_1:
tblAnsprechpartner.anspID ?
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am März 20, 2017, 22:08:23
Hallo,
ja, so meine ich das.
Titel: Re: Doppelte Beziehung
Beitrag von: PhilS am März 21, 2017, 10:25:03
Zitat von: Manu am März 20, 2017, 21:28:29Meinst Du damit die Unterscheidung im weiteren Verlauf bei Abfragen, Berichten, etc. ?
Du musst in Abfragen die verschiedenen Beziehungen besonders dann beachten, wenn du beide Ansprechpartner-Relationen in deiner Abfrage verwendest. Die Tabelle existiert nur einmal, aber du fügst sie zweimal zur Abfrage hinzu und unterscheidest die beiden verschiedenen Instanzen über eindeutige Aliase in deinem SQL-Statement (http://codekabinett.com/rdumps.php?Lang=1&targetDoc=sql-as-alias#aliase-tabellennamen) bzw. der Abfrage. - In dem verlinkten Artikel behandelt der Absatz Erforderliche Aliase genau deine Situation. - Auch wenn du deine Abfrage nicht in SQL, sondern im grafischen Abfragedesigner erstellst, ist es sicherlich gut zu verstehen, was im Hintergrund passiert.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am März 29, 2017, 14:41:37
Vielen Dank für Eure Hinweise.
Der prinzipielle Aufbau hat auch soweit geklappt (denke ich) -> siehe Bericht-Ansprechpartner.pdf

Allerdings wird die Beziehung zu der virtuellen Tabelle bei jedem Schließen/Öffnen gelöscht und es entsteht eine weitere virtuelle Tabelle mit anderen Beziehungen. -> siehe Bericht-Ansprechpartner-Fehler.pdf

Wenn ich dieses Problem umgehe und für die Tierärzte nicht auf die Ansprechpartner zurück greife, sondern eine eigene Tierarzt-Tabelle erstelle scheint alles zu funktionieren. -> siehe Bericht-extra-TA.pdf

Sehr spannend ...
Titel: Re: Doppelte Beziehung
Beitrag von: Beaker s.a. am März 29, 2017, 17:07:56
Hallo Manuel,
Von der tblAerzte ist bei dir nichts zu sehen.
Wenn ich es mit mehreren Personengruppen in einer DB zu tun habe, verwende
ich gerne einen Konstrukt mit 1:1 Beziehungen, da habe ich den Hassle mit
mehrfachen Beziehungen nicht (s. Anlage)
gruss ekkehard

P.S. Das Beispiel habe ich aus einer sehr! frühen DB von mir schnell zusammengestellt.
Deshalb die suboptimale Benamsung der Schlüsselfelder; - aber das hast
du bei dir ja schon richtig gemacht.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am März 29, 2017, 17:37:33
Die Version mit der "Tierarzt-Tabelle" ist in der Datei "Bericht-extra-TA.pdf" unten links zu sehen. Da umgehe ich die doppelte Beziehung indem ich erst die Tierärzte anlege und dann bei den Hunden einfach auswähle.

Dein Beispiel mit den 1:1 Beziehungen verstehe ich nicht ganz.
Ich habe einen Kunden. Dieser Kunde hat einen (oder mehrere) Ansprechpartner und der Ansprechpartner hat einen (oder mehrere) Hund(e). Der Hund hat wiederum einen Tierarzt. Für diesen Tierarzt wollte ich einen Ansprechpartner (den Tierarzt) anlegen.
Also habe ich ja eine Beziehung von tblAnsprechpartner zu tblHund und für das Feld Tierarzt in der tblHund eine Beziehung zurück zu tblAnsprechpartner (das ist dann der Tierarzt).

Was ändert eine 1:1 Beziehung daran, bzw. wie muss ich diese dann richtig anlegen?
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am März 29, 2017, 18:08:53
Hallo,
wenn das mit der virtuellen Tabelle richtig gemacht wird, funktioniert das auch, garantiert. Das ist ein ganz normales Vorgehen bei einer Datenbank. Da wird auch nichts gelöscht.
Wie ich weiter oben schon schrieb, müssen Abfragen die mit diesen Tabellen erstellt werden manuell geändert werden und gespeichert.
Zitat von: MzKlMu « am: März 20, 2017, 19:58:21Achtung, Abfragen die auf diesen Tabellen beruhen werden von Access falsch angelegt und müssen manuell gem. dem Beziehungsbild angepasst werden.
Titel: Re: Doppelte Beziehung
Beitrag von: Beaker s.a. am März 29, 2017, 18:30:27
Hallo Manuel,
Mir ging es nur darum die einen Weg zu zeigen, die doppelten
Beziehungen bei den Ansprechpartnern zu vermeiden. Wobei
ich Klaus' letzter Anmerkung nicht widersprechen möchte. Mit
dem Rest habe ich mich nicht beschäftigt.
gruss ekkehard
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am März 29, 2017, 21:43:04
Hallo Klaus,
das mit den Abfragen und dem gezielten Verweis auf "*_1" habe ich verstanden. Das aktuelle Vorkommnis bezieht sich auch gar nicht auf Abfragen. Ich habe lediglich die Tabellen angelegt und mit Beziehungen verknüpft.
Sicherlich habe ich da an irgendeiner Stelle einen Fehler gemacht, aber ich finde diese Stelle nicht. Nach mehrmaligen Durchführen erscheint stets das gleiche Fehlerbild.
Wie geht man hier bei einer zielführenden Fehlersuche am besten vor?
Kannst Du mir da einen Tipp geben?
Ich weiß, das ist ähnlich wie Ferndiagnosen am Auto, aber vielleicht gibt es ja bewährte Methoden ...

Danke!
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am März 29, 2017, 22:01:52
Hallo,
als erstes zeigst Du bitte mal ein aktuelles Beziehungsbild mit der fragwürdigen Beziehung.

Und dann erklärst Du bitte mal genau den Fehler und unter welchen Bedingungen er auftritt. Ich habe das nämlich nicht richtig verstanden.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am März 30, 2017, 16:13:01
Hallo zusammen

Ich habe die Datenbank noch einmal komplett neu aufgebaut und im Zuge dessen etwas umstrukturiert. Es ist noch das selbe Thema enthalten, also ein Kunde (tblKunde) hat einen Hund (tblHund) und bei dem Hund wird ein Tierarzt angegeben. Dieser Tierarzt soll aber keine extra Tabelle sein, sondern aus der tblKunden entnommen werden. In der tblKunden habe ich ein Ja/Nein Feld für IstVet und über eine qry lasse ich mir nun im dem Kombinationsfeld der tblHunde werden so nur die Tierärzte angezeigt. Anscheinend funktioniert jetzt auch die virtuelle Tabelle (tblKunden_1).
Anbei noch das Beziehungsbild. Über Kommentare und Verbesserungsvorschläge diesbezüglich bin ich nach wie vor sehr interessiert, da es die erste Datenbank diesen Umfangs für mich ist...

Gruß
Manuel
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am April 04, 2017, 16:52:08
Wie in den Beziehungen zu sehen, habe ich für einen Kunden nicht je eine Spalte für Telefon-/Fax-/Handynummer oder E-Mail erstellt, sondern eine gesonderte tblKontaktdaten. Dort wähle ich den Kontaktdatentyp, z.B. Handynummer, aus und trage den entsprechenden Inhalt ein. Jetzt stehe ich nur vor dem Problem, dass ich im Formular zur Dateneingabe mehrere Kontaktdaten eingeben muss. Muss ich dafür auch virtuelle Tabellen (tblKontaktdaten_1, tblKontaktdaten_2, etc.) anlegen und davon dann je die entsprechenden Felder für Typ und Inhalt?
Wie löst man das am elegantesten?
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am April 04, 2017, 17:00:40
Hallo,
nein, da braucht es keine virtuellen Tabellen. Du brauchst im Kundenformular ein Unterformular zur Eingabe der Kontakteinträge.
Hafo und Ufo sind über die Schlüsselfelder zu verknüpfen.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am April 05, 2017, 17:12:10
Super, danke.
Der erste Versuch hat auch schon ganz gut geklappt.
Als Problem habe ich allerdings noch, dass in dem Unterformular dann alle Kontaktdaten drin stehen, also eben von alllen Kunden, die in der tblKontaktdaten drin stehen.
Macht man dann das Unterformular irgendwie von einer gesonderten Abfrage?

Gruß
Manuel
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am April 05, 2017, 18:25:31
Hallo,
wie ich in #14 schon schrieb:
ZitatHafo und Ufo sind über die Schlüsselfelder zu verknüpfen.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am April 06, 2017, 13:43:52
Ah, jetzt hab ich gefunden, was das bedeutet und es klappt auch.
Danke Dir!

Wenn ich im Kundenformular auswählen möchte, welche Produkte der Kunde gebucht hat verwende ich dann auch ein Unterformular, richtig?

Hierzu:
Ich habe Produkte (z.B. Kurse), welche einen Starttermin haben. Ich möchte also in einem Feld den Kursnamen auswählen (aus der Liste aller Kurse) und dann, zur vollständigen Definition um welchen Kurs es sich genau handelt, aus einem Feld den entsprechenden Starttermin. Wie lasse ich über das Namensfeld eine Vorauswahl treffen, also eine Eingrenzung der zur Auswahl stehenden Starttermin (nämlich nur die, welche zu dem ausgewählten Kurs gehören)?

Ich hoffe man kann ungefähr erahnen was ich meine, ich tue mich schwer dies zu formulieren ...

Gruß
Manuel
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am April 07, 2017, 12:24:04
Ich habe mal versucht mit einem Unterformular anzufangen, aber leider bekomme ich eine Fehlermeldung, die ich nicht nachvollziehen kann.

"Das aktuelle Feld muss dem Verknüpfungsschlüssel 'prdktID' in der Tabelle auf der 1-Seite einer 1:n-Beziehung entsprechen. Geben Sie einen Datensatz mit dem gewünschten Schlüsselwert auf der 1-Seite ein, und nehmen Sie anschließend den Eintrag mit dem gewünschten Verknüpfungsschlüssel auf der n-Seite der Tabelle vor."

Siehe angehängtes Bild.
Titel: Re: Doppelte Beziehung
Beitrag von: Manu am April 13, 2017, 12:50:34
Weicht die Frage zu sehr vom ursprünglichen Thema ab?
Titel: Re: Doppelte Beziehung
Beitrag von: Beaker s.a. am April 13, 2017, 14:55:40
Hallo Manuel,
ZitatWenn ich im Kundenformular auswählen möchte, welche Produkte
der Kunde gebucht hat verwende ich dann auch ein Unterformular, richtig?

Ja, aber du musst über die KundenID in tblProdukte verknüpfen.
Das Ufo bekommt als DS-Herkunft eine Abfrage mit tblProdukte und tblProduktTermine.

gruss ekkehard
Titel: Re: Doppelte Beziehung
Beitrag von: Wurschtel am Juli 13, 2017, 11:52:49
Hallo ...

ich habe ein ähnliches Problem:
Eine Beziehung zu der virtuellen, zweiten Tabelle (tblXXXX_1) besteht, beim Versuch im Rahmen einer Abfrage darauf zuzugreifen sagt mir Access jedoch, daß sie nicht existent sei.

Könnte mir bitte jemand helfen?

Gruß
Thomas
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am Juli 13, 2017, 12:00:25
Hallo,
zeige ein Bild des Beziehungsfensters und ein Bild des Abfrageentwurfs.
Und erkläre wie Du darauf zugreifst.

Das automatisch erstellte Verknüpfungsbild der Abfrage kann nicht unverändert übernommen werden. Das muss manuell an das Beziehungsbild angepasst werden.

Beziehungsfenster > Beziehungsbild
Abfrageentwurf > Verknüpfungsbild
Titel: Re: Doppelte Beziehung
Beitrag von: Wurschtel am Juli 13, 2017, 12:28:27
Access2 = Beziehungsbild (dummerweise in dem Momment total verzerrt worden)
Access1 = Abfragebild

Die Art des Zugriffs ist nun wohl genau mein Problem?
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am Juli 13, 2017, 12:38:41
Hallo,
auch in die Abfrage muss die Tabelle 2x aufgenommen werden. Und dann ist die Verknüpfung auch falsch und muss an Hand des Beziehungsbildes manuell angepasst werden. Eine Verknüpfung löschen und die 2. dann manuell wie die Beziehung anlegen. Die 2. manuelle Beziehung wird dann ohne RI angezeigt.
Titel: Re: Doppelte Beziehung
Beitrag von: Wurschtel am Juli 13, 2017, 12:58:29
Aaaaaaaaaaaaah ......... du meinst sicherlich so?
(Zumindest sieht das Abfrageergbnis richtig aus - muß aber noch genau checken)

"Die 2. manuelle Beziehung wird dann ohne RI angezeigt." bedeutet, daß ich im Entwurf nur die dünne Linie sehe?

Du glaubst gar nicht, wie sehr du mir jetzt damit geholfen hast - super herzlichen Dank!
Titel: Re: Doppelte Beziehung
Beitrag von: MzKlMu am Juli 13, 2017, 14:22:10
Hallo,
ja, so ist es richtig. Solche Verknüpfungen müssen immer manuell nachgearbeitet werden.