GUID-Schlüssel verwenden
Binden Sie WklGrid, WklTreeList, WklTreeView und WklGantt an Tabellen, deren Schlüssel und übergeordneter
Schlüssel GUIDs sind (SQL Server uniqueidentifier, Access Replikations-ID), auch wenn sie über ODBC verknüpft
sind.
Voraussetzungen: WKL Forms Object Library 1.38.1 oder höher.
Lösungsüberblick
- Nichts zu konfigurieren.
KeyField,ParentField,LinkChildFieldsundEditKeyFieldsnennen GUID-Felder wie jedes andere Feld; die Steuerelemente erkennen ein GUID-Feld an seinem Datentyp. - Schlüssel sind in VBA Text. VBA hat keinen GUID-Datentyp. Ein Schlüssel, den das Steuerelement zurückgibt (
SelectedKey, einKey-Argument eines Ereignisses), ist der Text, den Access selbst für eine GUID verwendet,{guid {11111111-1111-1111-1111-111111111111}}– derselbe Text, den DAO für das Feld liefert. Er lässt sich mit einem Feldwert vergleichen und unverändert in eine Kriterienzeichenfolge einsetzen. - Schlüssel aus VBA in jeder üblichen Form.
SelectedKey,NodeText(Key)und die anderen Member, die einen Schlüssel annehmen, akzeptieren{guid {…}},{…}und die reinen Ziffern im Muster 8-4-4-4-12. DLookupist die Ausnahme. Bei einem GUID-Feld liefertDLookupdie 16 Rohbytes als Zeichenfolge aus 8 Zeichen.StringFromGUIDwandelt nur einByte()-Array um und gibt eine solche Zeichenfolge unverändert zurück; lassen Sie stattdessen die Datenbank umwandeln:DLookup("StringFromGUID([Id])", ...).
Umsetzung
Einen Kunden auswählen, dessen Schlüssel eine GUID ist, gelesen mit DLookup:
Dim key As String
key = DLookup("StringFromGUID([Id])", "tblKunde", "Name = 'Konrad'") ' {guid {33333333-...}}
Me!Grid1.Object.SelectedKey = key
Den ausgewählten Schlüssel in einer Kriterienzeichenfolge verwenden, zum Beispiel um ein Unterformular zu filtern:
Private Sub Grid1_RowSelect(ByVal Key As Variant)
Me!sfBestellungen.Form.Filter = "KundeId = " & Key ' Key is {guid {...}}
Me!sfBestellungen.Form.FilterOn = True
End Sub
Eine Struktur über einer Tabelle mit GUID-Schlüssel und übergeordnetem GUID-Schlüssel:
With Me!Tree1.Object
.RecordSource = "tblOrdner"
.KeyField = "Id"
.ParentField = "ElternId" ' Null for a root
.TextField = "Name"
End With
Hinweise
- Bei SQL-Server-Tabellen, die über ODBC Driver 18 oder über den Wkl-OData-Treiber verknüpft sind, liefert DAO ein GUID-Feld als
{guid {…}}(Feldtyp 15, dbGUID);DLookupliefert die Rohbytes als Zeichenfolge. - Wkl OData: Ein Filter auf eine GUID-Spalte erfordert einen Datendienst, der das GUID-Literal von OData v4 liest. Ein Dienst, der das nicht tut, antwortet mit einem Fehler wie „Die Filterangabe ist ungueltig“. Der Wkl-OData-Treiber selbst sendet das richtige Literal.
- Strukturen über Wkl OData: Die Anweisung, die die Stammknoten findet, vergleicht zwei Spalten (übergeordneten Schlüssel und Schlüssel). Das unterstützt der Wkl-OData-Treiber nicht; die Struktur liest deshalb alle Datensätze einmal und findet die Stammknoten selbst (bei jedem Schlüsseltyp). Große Strukturen über Wkl OData werden daher bei der ersten Anzeige vollständig geladen.
- Schreiben über Wkl OData: Die Tabelle braucht bei jedem Schlüsseltyp eine Zeilenversion. Ohne sie wird das Schreiben abgewiesen; siehe Bearbeiten und Speichern: Voraussetzungen.
- Kopien: Ein in einer Struktur kopierter Datensatz (Ziehen mit gedrückter Strg-Taste) erhält eine neue GUID als Schlüssel.
Verwandte Themen
de/wiki/msaccess/comctl/how-to/use-guid-keys.txt · Last modified: by Wolfgang van der Stille