Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Microsoft Access Unterformular - nur einen Datensatz anfügen





Frage

Hallo, ich habe eine Tabelle mit Personen, die sehr sehr viele Eigenschaften haben. Nu habe ich die Tabelle aufgeteilt in mehrere und mit 1:1 Beziehungen über die PersonalNr verknüpft, wegen der Übersichtlichkeit. Tabelle1 hat also z.B. eine verwandte Tabelle2 . In Tabelle2 gibt es nicht alle Datensätze z.B. nur die bei denen schon eine Privatadresse eingetragen ist. ( Also es sind weniger Datensätze als in Tabelle1) Nun habe ich ein Formular mit den Eigenschaften der Person aus Tabelle1 und ein Unterformular mit den Eigenschaften aus Tabelle2. Eigentlich sind wohl Unterformulare für 1:n Beziehungen gedacht ? --- Im Unterformular habe ich "Anfügen zulassen" mit Ja beantwortet und so kann man zusätzliche Datensätze eingeben und Tabelle2 erweitert sich. -- Nur eben auch einen zweiten Datensatz pro Person und dann kommt eine Fehlermeldung - weil ja die 1:1 Beziehung dann verletzt ist. Wie kann ich verhindern, dass der Anwender einen zweiten Datensatz pro Person eingeben kann ? , einen ersten soll er ja eingeben können. Hat jemand einen Tipp?? Gudrun Jedenfalls klappt es ganz gut - Ich habe

Antwort 1 von Gudrun11

Entschuldigung, die letzte Zeile ist aus Versehen hineingeraten.

Antwort 2 von erik

Du kannst die "Anfügen zulassen"-Eigenschaft bei jeder Datensatznavigation neu einstellen. Dazu brauchst du nur den aktuellen Primärschlüssel des Hauptformulars und eine Datensatzzählung per DCount(). Ist die Anzahl der vorhandenen Datensätze >= 1, dann wird das Anfügen unterbunden, ansonsten wieder freigegeben.

Private Sub Form_Change()
	Dim lngCount As Long

	If Not IsNull(Parent!<Primärschlüssel Hauptformular>) Then
		lngCount = DCount("*", "<Tabelle Unterformular>","[<Fremdschlüssel Unterformular>]=" & Parent!<Primärschlüssel Hauptformular>)
		Me.AllowAdditions = CBool(lngCount)
	End If
End Sub


Antwort 3 von erik

Warum einfach, wenn es auch kompliziert geht...
Es geht sogar noch kürzer. :-)

Private Sub Form_Change()
	Me.AllowAdditions = Me.NewRecord
End Sub


Antwort 4 von erik

... und wenn das dann noch im Ereignis "Beim Anzeigen" eingefügt wird, wäre das sogar noch viel besser. *hmpf*

Antwort 5 von Gudrun11

Hallo Erik, Danke für die Antworten.

Mein Unterformular im Hauptformular reagiert gerade nur auf das Ereignis AfterUpdate und sonst nichts.

Das erste Record will ich ja anfügen,

So versuche ich nun zu zählen ob es schon eins gibt zu der PersonalNr

Private Sub Befehl26_Click()

MsgBox Me.PersNrPPKW
Debug.Print [PersNrPPKW]

longCount = DCount("*", "tblPrivatPKW")
longCount = DCount("PersNrPPKW", "tblPrivatPKW", [PersNrPPKW] = Me.PersNrPPKW])

End Sub

Die Funktion habe ich erst mal an einen Knopf im Unterfotrmular gebunden. Die MsgBox und das Debug.Print funktionieren gut obwohl der Datensatz in der Untertabelle tblPrivatPKW gar nicht da ist . Nur bei dem Kriterium habe ich meine Schwierigkeiten. longCount zeigt mir alle Datensätze aus tblPrivatPKW an.

PersNrPPKW ist der Schlüssel, der auch zum Hauptformular verknüpft ist.

Hast du einen Tipp wie das Kriterium in DCount syntaktisch aussehen muss ??

Gudrun





Antwort 6 von Gudrun11

Hallo,

Nun habe ich wieder das Ereignis

Private Sub Form_Current()
Rem Damit zeigt es erst mal mein Unterformular an, auch wenn kein Datensatz zu der PersNr existiert
Me.AllowAdditions = True

If Me.Recordset.RecordCount > 0 Then
Me.AllowAdditions = False
End If

EndSub

Nur eigentlich soll ja wie schon geasgt der erste Datensatz angefügt werden dürfen. Und wenn ich Me.AllowAdditions = False setze muss ich es danach bei irgendeinem Ereignis wieder wahr setzten wenn ich in einen Neuen Datensatz komme der noch keinen Datensatz im Unterformular hat.

Form_Current Ereignis kommt nämlich nicht wenn Me.AllowAdditions = False und RecordCount=0 ??? Dann wird das Formular gar nicht angezeigt.

So bin ich wieder beim selben Problem, als wenn ich gleich die Eigenschaft Nicht Anfügen" in den Formulareigenschaften gesetzt hätte.


Gudrun