Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Struktur mit einem Masterdatensatz verknüpfen

Struktur mit einem Masterdatensatz verknüpfen

Zeigen Sie nur die Datensätze an, die zum aktuellen Datensatz eines Formulars oder eines anderen Recordsets gehören, so wie ein Access-Unterformular – zum Beispiel die Positionen der Bestellung, die das Formular zeigt.

Voraussetzungen: WKL Forms Object Library 1.23 oder höher.

Lösungsüberblick

LinkChildFields nennt die Felder der Datenherkunft der Struktur und LinkMasterFields die passenden Felder des Masters, in derselben Reihenfolge. Beide werden mit dem Formular gespeichert. Der Master ist der aktuelle Datensatz des Formulars, auf dem das Steuerelement liegt. Zur Laufzeit können Sie stattdessen ein Recordset zum Master machen (MasterRecordset) oder die Werte direkt übergeben (MasterValues); Letzteres funktioniert auch auf UserForms von Excel, Word und Outlook. BeforeMasterChange und AfterMasterChange treten ein, wenn sich der Masterdatensatz ändert. Nach welchen Regeln welche Quelle gilt, beschreibt `LinkMasterFields` (API-Referenz, Englisch).

Umsetzung

Fügen Sie auf der Designerseite Verknüpfung (Zeile Benutzerdefiniert [...] des Steuerelements) je Verknüpfungsfeld ein Feldpaar hinzu. Gleichnamige vorschlagen schlägt Paare von Feldern vor, die in beiden Datenherkünften denselben Namen haben, wie der Unterformular-Assistent. Steuerelementinhalt setzen setzt ControlSource des Steuerelements auf die Masterfelder, sodass Access jeden Datensatzwechsel sofort meldet. Ohne diese Einstellung prüft das Steuerelement den Masterdatensatz alle 250 ms.

Dieselben Einstellungen im Eigenschaftenblatt (Registerkarten Andere und Daten), für eine Liste von Bestellpositionen im Bestellformular frmBestellungen:

EigenschaftWert
RecordSourcetblPositionen
KeyFieldBestellNr;PosNr
ParentFieldBestellNr;UebergeordnetePosNr
LinkChildFieldsBestellNr
LinkMasterFieldsID
ControlSource (Registerkarte Daten)ID

Im Formularmodul auf einen Wechsel des Masterdatensatzes reagieren:

Private Sub List1_AfterMasterChange(ByVal Values As Variant)
    Me!lblPositionen.Caption = Me!List1.Object.NodeCount & " Positionen"
End Sub

Den Master statt aus dem Formular selbst aus einem anderen Unterformular nehmen:

Private Sub Form_Load()
    Set Me!List1.Object.MasterRecordset = Me!sfmBestellungen.Form.Recordset
End Sub

Auf einer UserForm, die kein Formular-Recordset hat, die Werte aus dem Code übergeben:

Private Sub cboBestellung_Change()
    Me.List1.MasterValues = Me.cboBestellung.Value ' Array(...) for several link fields
End Sub

Hinweise

  • Ohne Masterdatensatz (ein neuer oder leerer Master) ist die Struktur leer, und das Hinzufügen oder Kopieren von Knoten löst wkeInvalidValue aus.
  • Neue Datensätze erhalten die Masterwerte in ihren Verknüpfungsfeldern.
  • Das Setzen von MasterValues aus dem Code löst keine Ereignisse aus; das Setzen auf Null kehrt zu MasterRecordset oder zum Formular zurück.
  • LinkMasterFields darf statt eines Felds ein Steuerelement des Formulars nennen, wie bei einem Unterformular.
  • Für eine Pass-Through-Abfrage oder eine langsame verknüpfte Tabelle als Datenherkunft setzen Sie MasterFilterMode auf wmfLocal (Designer: Einmal laden, im Speicher filtern): Die Struktur liest die Quelle einmal und filtert sie bei jedem Masterwechsel im Speicher, statt die Abfrage erneut auszuführen.
  • In der Entwurfsansicht mit LivePreview und in der Vorschau des Designers zeigt die Struktur die Datensätze des ersten Datensatzes des Formulars, weil die Entwurfsansicht keinen aktuellen Datensatz hat.
  • Auf einer UserForm wird das Steuerelement ohne .Object angesprochen (Me.List1), weil MSForms seine eigenen Eigenschaften mit denen des Steuerelements zusammenführt. Meldet VBA dort einen Member als nicht gefunden, siehe „Methode oder Datenobjekt nicht gefunden“ für ein Steuerelement auf einer UserForm.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/link-to-a-master-record.txt · Last modified: by Wolfgang van der Stille