none
Dateneingabe für 1:1-Beziehung nicht (immer möglich)

    Frage

  • Ich habe hier eine inzwischen sehr komplizierte und umfangreiche DB. Möglicherweise kommt das unheil davon, daß Frontend und Backend getrennt sind.

    Ich verwalte Aufträge und Untersuchungstermine in 2 Tabellen, da nicht jeder Auftrag mit einem Untersuchungstremin verbunden ist.

    Vor langer Zeit waren U-Termin und Auftrag in einer Tabelle, wurde dann aber aufgeteilt um nue Datensätze in U-termine anzulegen wenn auch tatsächlich ein Termin benötigt wird.

    Die Verknüpfung ist in der Backend-DB als 1:1 mit ref. Intgerität, Aktualisierungsweitergabe und Löschweitergabe definiert.

    Schlüssel ist auf der Auftragsseite ein Autowert, bei den U-Terminen ein Feld, dass auf den Autowert aus Aufträge verweist.

    Die Abfrage für das Formular hat sowohl Fleder aus Auftrage als auch aus U-Termine, das Formular auch.

    2 typische Szeanrios:

    1. ich gebe einen neuen DS im Formular ein und vergebe gleich einen Termin - funktioniert alles, es wird ein Datensatz in U-Termine angelegt und alles brav eingetragen.

    2. Ich lege einen neuen Auftrag an OHNE Vergabe eines Termins. Dann wird brav ein Datensatz in Auftraege angegelegt und KEIN datensatz in U-termine.

    Gehe ich jetzt später her und möchte nachträglich einen Termin vergeben, dann kommt die Meldung in der Statuszeile des Formulars:

    "Es können keine Daten eingefügt werden. Es gibt keinen übereinstimmenden Datensatz auf der '1'-Seite".

    Interessant sind vielleicht noch die Bezihungen der beiden Tabellen.

    Wie bereits geschildert auf der BE-Seite mit 1 : -> (alle Kästchen angekreuzt); in der FE-DB habe ich denselben Pfeil 1 : ->, aber die Kästchen sind ausgegraut und es ist NUR referentielle Integrität angekreuzt. Der Beziehungstyp wird als "1:1 (Extern) angegeben.

    Ändern kann ich nichts.

    Kann sich jemand dieses Phänomen erklären ? Gibt es Abhilfe ?

    Samstag, 23. Juni 2012 18:21

Alle Antworten

  • Du musst beim Anlegen des nachträglichen Termins den Schlüssel - deinen Auftragsautowert - in das Verweisfeld in den U-Terminen eintragen. Entweder manuell oder durch ein entsprechendes Haupt-/Unterformular.

    P.S. die Trennung in Front- und Back-end ist nicht die Ursache..

    Sonntag, 24. Juni 2012 12:07
    Moderator
  • Hallo NicoNi

    NicoNi wrote:

    Die Verknüpfung ist in der Backend-DB als 1:1 mit ref. Intgerität,
    Aktualisierungsweitergabe und Löschweitergabe definiert.

    Schlüssel ist auf der Auftragsseite ein Autowert, bei den U-Terminen ein
    Feld, dass auf den Autowert aus Aufträge verweist.

    "Es können keine Daten eingefügt werden. Es gibt keinen übereinstimmenden
    Datensatz auf der '1'-Seite".

    Hast Du sowohl den Primärschlüssel der Aftragsseite, als auch den Fremdschlüssel der Terminseite in der Datenherkunft drin?

    Gruss
    Henry

    Dienstag, 26. Juni 2012 04:17
  • Ja, auf alle Fälle sind diese beiden drin.

    Ich habe inzwischen eine weitere Test-DB gemacht, die nur 2 tabellen enthält und die o.g. verknüpfung .

    Allerdings kann ich dieses Verhalten dort nicht reproduzieren.

    Ich weiß allerdings auch nicht, an welcher Stelle ich den Tip, den AUtowert der Basistabelle Auftraege manuelle einzutragen, umsetzen könnte.

    Ich müsste dann praktisch für jedes Feld in der Eigenschaft beim Hingehen prüfen, ob bereits der Fremdschlüssel eingetragen ist.

    Das scheue ich schon wegen der Vielzahl an Feldern.

    Der Tip mit dem unterformular erscheint mir realistischer - allerdings wie verhindere ich , daß MEHR als ein termin eingetragen wird ?

    Dienstag, 26. Juni 2012 12:54
  • In dem du im Unterformular im Form_Current Ereignis AllowAdditions in Abhängigkeit der Anzahl Datensätze setzt.
    Dienstag, 26. Juni 2012 13:59
    Moderator
  • In diesem Fall würde ich mal ein bisschen am Datenmodell rütteln und versuchen, das besser auf Deine Bedürfnisse anzupassen.

    Primärtabelle wäre dann Termine. Diese hat einen Autowert als Primärschlüssel TerminID und steht dann als Foreign Key in Auftraege.TerminID. Dieser ist NULL, wenn es keinen Termin gibt.

    Damit wird sichergestellt, dass Du immer nur genau 1 Datensatz hast, egal woher die Daten eingefügt werden. Und Du hast zudem die Möglichkeit mehrere Aufträge einem einzelnen Termin zuzuteilen, falls das gewünscht ist. Allerdings verbaust Du Dir damit die Möglichkeit zu einem Auftrag mehrere Termine zu haben. Aber das scheint ja in Deinem Fall nicht der Fall zu sein.

    Gruss

    Henry

    Mittwoch, 27. Juni 2012 03:17