Zusammengesetzten Schlüssel verwenden
Binden Sie eine Struktur an Datensätze, deren Schlüssel aus mehreren Feldern besteht, zum Beispiel Bestellpositionen mit Bestellnummer und Positionsnummer als Schlüssel – Access selbst kann diese nur in einem flachen Unterformular anzeigen.
Voraussetzungen: WKL Forms Object Library 1.23 oder höher.
Lösungsüberblick
KeyField und ParentField nehmen mehrere durch Semikolons getrennte Feldnamen auf, in gleicher Anzahl und gleicher
Reihenfolge. In VBA ist ein zusammengesetzter Schlüssel überall, wo ein Schlüssel vorkommt, ein Array mit einem Wert je
Feld: in Eigenschaften, Methodenargumenten, Rückgabewerten und Ereignisparametern. KeyCriteria bildet die
WHERE-Bedingung für einen Schlüssel. Ein einzelnes Feld funktioniert wie bisher: Sein Schlüssel bleibt ein einzelner
Wert.
Umsetzung
Binden Sie die Struktur (Eigenschaftenblatt, Registerkarte Andere, oder die Designerseite Datenherkunft):
| Eigenschaft | Wert |
|---|---|
RecordSource | tblPositionen |
KeyField | BestellNr;PosNr |
ParentField | BestellNr;UebergeordnetePosNr |
TextField | Beschreibung |
Arbeiten Sie im Formularmodul mit den Schlüsseln:
Private Sub List1_NodeSelect(ByVal Key As Variant)
' Key is Array(BestellNr, PosNr)
Me!txtPosition = Key(1)
Me!sfmDetails.Form.Filter = Me!List1.Object.KeyCriteria(Key) ' [BestellNr] = 4711 AND [PosNr] = 2
Me!sfmDetails.Form.FilterOn = True
End Sub
Private Sub cmdPositionNeu_Click()
Dim newKey As Variant
newKey = Me!List1.Object.AddNode(Array(4711, 1), "Neue Position") ' below line 1 of order 4711
Debug.Print newKey(0), newKey(1) ' 4711, next free line number
End Sub
Hinweise
- Ein zusammengesetzter Schlüssel hat keinen AutoWert. Für einen neuen Knoten schlägt das Steuerelement einen Schlüssel vor: Der letzte Teil wird ab dem höchsten Wert innerhalb derselben vorderen Teile fortgezählt.
BeforeNodeAddundBeforeNodeCopykönnen mitNewKey = Array(…)einen eigenen Schlüssel setzen. - Ein Datensatz wird zum Stammknoten, wenn sein übergeordneter Schlüssel einen Null-Teil hat oder zu keinem Datensatz passt.
- Das Verschieben eines Knotens schreibt jeden Teil von
ParentField. - Ein Array der falschen Länge löst
wkeInvalidValueaus. Teile werden nach den Regeln von Access verglichen: Zahlen nach Wert, Text ohne Beachtung der Groß-/Kleinschreibung. - Von
SaveToFileundSaveToStringgeschriebene Dateien und Texte speichern einen zusammengesetzten Schlüssel als JSON-Array; inFindNodesist@.Keydieses Array und@.Key[1]ein Teil davon. - Indizieren Sie alle Schlüsselfelder in der Tabelle gemeinsam; jede Abfrage vergleicht alle Teile.