none
Fehlermeldung bei 1:n-Verknüpfung in einem Formular

    Frage

  • Ich kämpfe wahrscheinlich mit einem banalen Probem, dass so immer wieder auftritt.

    Meine DB hat eine Tabelle Aufträge und eine Tabelle Personen. In Aufträge wird ein Verweis auf einen DS in Personen gespeichert (als 1:n-Verknüpfung), d.h. jeder DS in Aufträge hat einen Verweis auf Personen; jede Person kann mehrere AUfträge haben.

    Mein Hauptformular legt nun einen DS in Aufträge an und enthält auch über eine Abfrage nebst verknüpfung Felder für die Person (also GebDatum, Name und Vorname).

    Brav wird auch sofort ein neuer DS in Personen angelegt, wenn ich irgendwelceh Angaben in Gebdatum, name oder Vorname des Formulars mache. Die Verknüpfung passt auch .

     Soweit, so gut.

    Nun möchte ich aber unbedingt umgehen, dass eine Person zwaimal angelegt wird (um die 1:n-verknüpfung nutzen zu können)

    In der beforeUpdate-Event des Formularfeldes GebDatum_txt prüfe ich nun ob ein gültige Datum eingegeben wurde ( ...isdate(Formularfeld)) und teste danach mit Dcount ob in meiner Tabelle bereits eine Person mit diesem Geburtsdatum vorhanden ist.

    Falls ja wird eine weiteres Formular geöffnet un zwar mit diesem Code:

    DoCmd.OpenForm "frm_ Eingabe von Patientendaten_geteilt", acNormal, , "[Proband_Gebdatum]=" & _
          Format(Me.Proband_GebDatum_txt, "\#yyyy\-mm\-dd\#"), , acWindowNormal
    

    Nun öffnet sich das Formular, im geilten Bereich werden alle Personen mit dem gewünschten geburtsdatum aufgelistet.

    Wenn ich jetzt auf einen Eintrag doppelklicke, dann soll der Auto-Wert dieser Person im Hauptformular erfasst werden.

    Beep
      Debug.Print " Doppelklick auf vorhandene Person ausgelöst"
      
      Stop
      If CurrentProject.AllForms("Auftrag anlegen").IsLoaded Then
        Forms![Auftrag anlegen]![GA_Proband_Nr_txt] = Me.ID_Proband
      End If

    Leider löst dies einen Laufzeitfehler 3341 aus. "Aktuelles Feld muss dem Verknüpfungsschlüssel '?' in der Tabelle auf der 1-Seite einer 1:n-verknüpfung entsprechen.

    Es nützt übrigens auch nichts, wenn ich versuche das Tabellenfeld direkt anzusprechen  -der fehler ist der Gleiche.

     

     

    Samstag, 9. April 2011 09:49

Alle Antworten

  • Hallo,

    das Geburtsdatum als Kriterium ist denkbar ungeeignet, Fehler werden sich zwangsweise einschleichen. Ich würde die Personenerfassung sauber von der Auftragserfassung trennen, und bei der Auftragserfassung z.B. per Kombinationsfeld nur vorhandene Personen auswählen. Mach daneben einen Button für die Manuelle Personeneingabe. Aktualisiere nach Eingabe in einem neuen Formular die Datenherkunft des Kombinationsfeldes und setze den Value des Kombis auf den eben eingefügten Personen-ID (z.B. Autowert).

    Außerdem würde ich bei verknüpften Tabellen den Eintrag in der Master-Tabelle nicht automatisch anlegen lassen. Das ist unsauberer Stil und führt zu solchen Fehlern.

    Gruß Andreas

    Sonntag, 10. April 2011 06:35
  • Vielen Dank zunächst mal.

    Ich habe zwischenzeitlich etwas experimentiert.

    Das Haupt-(Auftrags)forumlar enthält ein Feld namens [PersonNr].

    Interessant ist zunächst das Verhalten zwischen BeforeUpdate und AfterUpdate:

    Zum Zeitpunkt der Auslösung von BeforeUpdate steht im Feld [PersonNr] noch keine Zahl, bei AfterUpdat dann schon, und zwar eine neu erzeugte - eigentlich logisch.

    meine Anwendung öffnet auch brav üer BefoeUpdate ein Auswahlfenster, sobald Personen mit identischem Geburtsdatum vorhanden sind.

    Jetzt kann ich einen VORHANDENEN Eintrag auswählen und erhlate dann auch dessen Schlüsselnummer.

    Aber warum kann ich diese Nummer nicht einfach im Auftragsformular eintragen ? Oder mache ich einen Fehler beim Zugriff vom Personen-Formular auf das Auftragsformular ?

     

     

    Sonntag, 10. April 2011 06:58