Acc02: Problem mit 1:1 Beziehungen

Hallo,
ich habe ein Problem mit 1:1 Beziehungen…

Eine „Haupt“-Tabelle wurde aus Berechtigungs-Gründen (Zugriffe) in mehrere Tabellen aufgeteilt und 1:1 verknüpft.
Der eindeutige Index (AutoWert) aus der Haupttabelle wurde dann mit dem jeweils eindeutigen Index (LongInteger) aus den Nebentabellen verknüpft.

Um in einem Formular die Daten aus allen Tabellen zur Verfügung zu haben, wurde dem Formular eine Abrage zugrunde gelegt, die alle Tabellen beinhaltet. Diese wurden auch hier 1:1 miteinander verknüpft, mit dem Unterschied, dass die Abrage alle Daten aus der Haupttabelle und nur die Datensätze aus den Nebentabellen beinhaltet, bei denen die Inhalte der verknüpften Felder der betr. Tabellen gleich sind. (So erhalte ich alle Datensätze aus der Haupttabelle, auch wenn in einer Nebentabelle kein Wert erfasst wurde; =Verknüpfungseigenschaften).

Nun zum Problem…

Ein Beispiel:
Im Formular werden in die Felder der Haupttabelle und in die Felder der 1. Nebentabelle Werte eingetragen. Die 1. Nebentabelle übernimmt hierbei automatisch den ID-Wert aus der Haupttabelle.
Wird der Datensatz dann zu einem späteren Zeitpunkt wieder aufgerufen, um Werte für die 2. Nebentabelle zu erfassen, passiert folgendes:
In der 2. Nebentabelle wird wieder die ID aus der Haupttabelle übernommen, gleichzeitig jedoch die ID der bereits erfassten Daten aus der 1. Nebentabelle auf 0 gesetzt. Beim speichern des DS erscheint dann logischerweise die Fehlermeldung:
„Der Datensatz kann nicht hinzugefügt oder geändert werden, da ein Datensatz in der Tabelle mit diesem Datensatz in Beziehung stehen muss.“

Kann mir jemand erklären, woran das liegt?

Danke schon mal.
Gruß
Uli

Hallo, Uli!

Ein Beispiel:
Im Formular werden in die Felder der Haupttabelle und in die
Felder der 1. Nebentabelle Werte eingetragen. Die 1.
Nebentabelle übernimmt hierbei automatisch den ID-Wert aus der
Haupttabelle.
Wird der Datensatz dann zu einem späteren Zeitpunkt wieder
aufgerufen, um Werte für die 2. Nebentabelle zu erfassen,
passiert folgendes:
In der 2. Nebentabelle wird wieder die ID aus der Haupttabelle
übernommen, gleichzeitig jedoch die ID der bereits erfassten
Daten aus der 1. Nebentabelle auf 0 gesetzt. Beim speichern
des DS erscheint dann logischerweise die Fehlermeldung:
„Der Datensatz kann nicht hinzugefügt oder geändert werden, da
ein Datensatz in der Tabelle mit
diesem Datensatz in Beziehung stehen muss.“
Kann mir jemand erklären, woran das liegt?

Aus der Ferne schwer, weil nicht ganz klar ist, wie genau die Formular-Datenquelle aussieht, an welche Felder die Steuerelemente gebunden sind, was für die Felder als Defaultwert vorgegeben ist und was Du möglicherweise für Ereignisse hast. Wenn Du im Formular einen neuen Datensatz (aus der zweiten Nebentabelle) anlegst, wird dann automatisch auch ein neuer Datensatz der ersten Nebentabelle erzeugt? Hier wird dann ggf. die ID auf den Defaultwert 0 gesetzt und nicht auf die ID des Master-Datensatzes. Könnte jedenfalls sein.

Ich würde ggf. nicht mit einem Formular arbeiten, sondern mit einem Unterformular für jede Nebentabelle, die über „Verknüpfen von/nach“ ans Hauptformular gebunden sind. Ggf. kannst Du noch im BeforeUpdate-Ereignis des Formulars und der Unterformulare bestimmte Prüfungen vornehmen und ggf. die ID gemäß dem aktuellen Hauptdatensatz setzen.

Oder vielleicht hilft es auch, eine strenge 1:1-Beziehung durchzusetzen und ggf. leere untergeordnete Datensätze mitzuziehen, in denen dann halt nur die Id gesetzt ist.

Gruß, Manfred

Hallo Manfred,
Danke für die Tipps.
Ich habe es mit dem BeforeUpdate-Ereignis gelöst, wo ich die ID der Haupttabelle in die entsprechenden ID-Felder der Detailtabellen schreiben lasse und somit die Datensätze anlege…

DoCmd.Echo False
If Me.NewRecord = False Then
Me.Detailtab1_ID = Me.Haupttab_ID
Me.Detailtab_ID = Me.Haupttab_ID
End If
DoCmd.Echo True

Gruß Uli