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
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.
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 ?
Hallo,
ja, so meine ich das.
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.
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 ...
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.
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?
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.
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
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!
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.
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
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?
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.
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
Hallo,
wie ich in #14 schon schrieb:
ZitatHafo und Ufo sind über die Schlüsselfelder zu verknüpfen.
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
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.
Weicht die Frage zu sehr vom ursprünglichen Thema ab?
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
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
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
Access2 = Beziehungsbild (dummerweise in dem Momment total verzerrt worden)
Access1 = Abfragebild
Die Art des Zugriffs ist nun wohl genau mein Problem?
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.
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!
Hallo,
ja, so ist es richtig. Solche Verknüpfungen müssen immer manuell nachgearbeitet werden.