Color scheme: Dark
You are here: start » de » Dokumentation » Werkzeuge für Microsoft Access » WKL Forms Object Library » how-to » Datensatz als Eigenschaftenliste anzeigen

Datensatz als Eigenschaftenliste anzeigen

Zeigen Sie den aktuellen Datensatz eines Formulars oder den in einer Liste ausgewählten Datensatz als Zeilen „Beschriftung | Wert“ an, nach Kategorien gruppiert – zum Beispiel als Karte „Eigenschaften“ einer Seitenleiste.

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

Lösungsüberblick

WklPropertyGrid hat zwei Modi. Ohne RecordSource zeigt und schreibt es den aktuellen Datensatz seines eigenen Formulars. Mit RecordSource, KeyField und LinkMasterFields ist es die Detailansicht eines WklGrid oder einer WklTreeList auf demselben Formular. Seine Zeilen sind WklColumn-Objekte (Rows); das Band einer Zeile ist ihre Kategorie.

Umsetzung

Der aktuelle Datensatz des Formulars – ein an tblKunde gebundenes Formular, das Eigenschaftenraster ohne Datenherkunft:

Private Sub Form_Load()
    With Me!Props1.Object
        .Rows.Clear
        .Rows.Add "Name", "Name"
        .Rows.Add "Ort", "Ort", "Adresse"
        .Rows.Add "Aktiv", "Aktiv", "Status"
        .CategoryCollapsed("Adresse") = False
    End With
End Sub

Die Detailansicht einer Liste, deren Quelle eine Pass-Through-Abfrage ist: Das Eigenschaftenraster liest und schreibt seine eigene, beschreibbare Quelle; die Liste liefert nur den Schlüssel.

Private Sub Form_Load()
    With Me!Props1.Object
        .RecordSource = "tblKunde"
        .KeyField = "ID"
        .LinkMasterFields = "Grid1"
        .LinkChildFields = "ID"
    End With
End Sub
 
Private Sub cmdOrtSetzen_Click()
    With Me!Props1.Object
        If .FieldEditable("Ort") Then .Value("Ort") = "Bonn"
    End With
End Sub

Hinweise

  • Im Formularmodus macht ein geänderter Wert den Datensatz des Formulars „dirty“. Access speichert ihn beim Verlassen des Datensatzes oder mit Me.Dirty = False, mit der Gültigkeitsprüfung und BeforeUpdate des Formulars. Das Raster folgt den Datensätzen des Formulars ohne Formularmodul.
  • Ohne Zeilen wird jedes Feld der Quelle zu einer Zeile, mit einem Editor für seinen Datentyp.
  • Mit einem per Code übergebenen Recordset (Set .Recordset = rs) fragt das Raster nichts über die Quelle ab: Jedes Feld gilt als bearbeitbar, und ein geänderter Wert geht in dieses Recordset – ob er die Datenbank erreicht, ist Sache des Recordsets. Ein statisches oder schreibgeschütztes ADO-Recordset behält die Änderung ohne Fehler im Speicher: Jedes Feld wird als bearbeitbar angezeigt, der eingegebene Wert steht im Recordset, und die Datenbank bleibt unverändert. Setzen Sie in diesem Modus ReadOnly an den Zeilen selbst.
  • Zeilen benennen Felder. Bevor das Raster eine Quelle ohne diese Felder erhält, leeren Sie die Zeilen mit Rows.Clear. Fehlt der neuen Quelle das Feld einer Zeile, weist das Raster sie mit wkeSourceError ab („Das Recordset hat kein Feld …“).
  • Ohne Einstellungen schreibgeschützt sind: eine Pass-Through- oder Union-Abfrage, ein berechnetes Feld, ein AutoWert-Feld, eine Spalte, die eine verknüpfte ODBC-Tabelle als nicht aktualisierbar meldet; im Formularmodus auch ein Formular mit „Bearbeitungen zulassen“ = Nein. Das Schreiben eines solchen Felds per Code löst wkeInvalidValue aus.
  • So wird eine verknüpfte ODBC-Tabelle geprüft: Access selbst meldet DataUpdatable = True für fast jede Spalte einer verknüpften ODBC-Tabelle, daher verlässt sich das Raster nicht darauf. Es öffnet mit der Verbindungszeichenfolge der Tabelle eine eigene Verbindung und fragt den Treiber für jede Spalte ab (SQLColAttribute: aktualisierbar und automatischer Wert). Eine Spalte, die der Treiber als schreibgeschützt oder automatischen Wert meldet, wird schreibgeschützt. Die Regel, damit ein Treiberautor einen Treiber ohne Messung prüfen kann: Eine Spalte ist schreibgeschützt, wenn SQL_DESC_UPDATABLE (Feld 10, in ODBC 2 SQL_COLUMN_UPDATABLE genannt) SQL_ATTR_READONLY (0) liefert oder SQL_DESC_AUTO_UNIQUE_VALUE (Feld 11) einen anderen Wert als 0 liefert. SQL_ATTR_WRITE (1) und SQL_ATTR_READWRITE_UNKNOWN (2) ohne automatischen Wert lassen die Spalte aus Sicht des Rasters beschreibbar. Ein Treiber, der für eine Spalte „unbekannt“ antwortet, gibt dem Raster keine Entscheidungsgrundlage; das Speichern scheitert dann am Server. Mit ODBC Driver 18 for SQL Server sind eine IDENTITY-Spalte, eine berechnete Spalte und eine rowversion-Spalte schreibgeschützt. Spalten einer verknüpften SQL-Server-Sicht, die aus einem Ausdruck oder einer skalaren Unterabfrage stammen, werden für die Bearbeitung nicht unterstützt – ob sie erkannt werden, hängt davon ab, was der Treiber für sie meldet. Bis Sie eine solche Sicht geprüft haben, setzen Sie ReadOnly für diese Zeilen selbst. Ein Speichervorgang, der eine Spalte enthält, die der Server nicht aktualisieren kann, scheitert als Ganzes, und auch die andere Änderung des Benutzers geht verloren.
  • Ein nur für einen Datensatz gesperrtes Feld (nicht für jeden Datensatz wie mit ReadOnly der Zeile): Setzen Sie in BeforeFieldEdit für diesen Schlüssel und dieses Feld Cancel = True; es öffnet sich kein Editor.
  • Die Anzahl der Zeilen begrenzt das Steuerelement nicht; Listen mit 100 Zeilen und mehr werden nicht unterstützt.
  • WklGrid wählt beim Öffnen des Formulars keinen Datensatz aus: Die Detailansicht bleibt bis zur ersten Auswahl leer.
  • In der Entwurfsansicht zugeklappte Kategorien (CategoryCollapsed) werden mit dem Formular gespeichert; was der Benutzer zuklappt, gilt bis zum Schließen des Formulars.

Verwandte Themen

de/wiki/msaccess/comctl/how-to/show-a-record-as-a-property-list.txt · Last modified: by Wolfgang van der Stille