Ein Datendienst lehnt eine Änderung ab
Das Bearbeiten einer Zelle oder das Speichern eines neuen Datensatzes in einem WklGrid, das an eine über ODBC
verknüpfte Tabelle gebunden ist (zum Beispiel an einen Wkl-OData-Dienst), scheitert: Die Zeile erhält am linken Rand
einen roten Balken, DataError wird ausgelöst, und aus VBA löst CellValue einen Fehler aus wie
Die Änderung (Zellwert) am Knoten 1 konnte nicht in "tblOData" gespeichert werden: [Wkl][OData]Der Dienst hat mit 422 geantwortet: Der Vorgang wurde von der Datenbank abgelehnt. (ODBC: Aktualisierung in einer verknüpften Tabelle 'tblOData' fehlgeschlagen.)
Umgebung
WKL Forms Object Library ab 1.15; jede über ODBC verknüpfte Tabelle.
Ursache
Das Raster schreibt über Access (DAO), und Access gibt die Änderung an den ODBC-Treiber weiter, der sie an den Dienst sendet. Der Dienst – oder die Datenbank dahinter – hat sie abgelehnt: eine Check-Einschränkung, eine fehlende Berechtigung (403), ein Wert, den der Dienst nicht annimmt (422). Die Meldung nennt zuerst den Grund des Treibers und des Dienstes und in Klammern die allgemeine Meldung von Access; die Änderung wird nicht gespeichert, und die Werte bleiben in der Zeile stehen.
Lösung
- Lesen Sie den ersten Teil der Meldung: Er ist der Grund des Dienstes. Ein 422 mit „von der Datenbank abgelehnt“ weist auf eine Regel der Datenbank hin (Check-Einschränkung, Fremdschlüssel, Pflichtspalte), ein 403 auf die Rechte des Aufrufers.
- Korrigieren Sie den Wert in der Zeile, oder verwerfen Sie ihn mit Esc; in einer neuen Zeile verwerfen Esc oder Entf den Datensatz.
- Um den Grund in einer eigenen Meldung anzuzeigen, behandeln Sie
DataErrorund setzen SieResponseaufacDataErrContinue. - Um die Regel zu prüfen, bevor der Dienst es tut, prüfen Sie in
BeforeUpdatedes Rasters oder legen Sie für die Spalte eine Gültigkeitsregel fest (Zelleingaben prüfen).