Ok, es ist eine Nische. Aber wenn ich mit diesem Beitrag helfen kann, dann freue es mich. Wenn ich darüber hinaus helfen kann, dann nicht zögern, einfach eine Mail schreiben an [email protected]
Setting: Access Frontend, MySQL, MariaDB oder MSSQL Server Backend
Die Situation sieht wie folgt aus:
- Access Datenbank (Backend) irgendwann mal konvertiert in in eine MySQL Datenbank bzw. MariaDB oder auch Microsoft SQL Server Datenbank
- Access als Frontend beibehalten
Fehlermeldung: Schreibkonflikt, (angeblich) gleichzeitige Bearbeitung
Leider ist das so, dass beim Aktualisieren von Datensätzen also bei Aktualisierungsabfrage eine Fehlermeldung erscheint:
„Schreibkonflikt, Dieser Datensatz wurde seit Beginn der Bearbeitung von einem anderen Benutzer geändert.“
Ursache des Problems
Wenn Access als MDB verwendet wird, dann wird jeder Zugriff auf eine externe Datenbank von Access über die JET-Datenbank gesteuert. Access hat dann das letzte Wort. Teilweise werden auch Datentypen für die Zieldatenbank konvertiert.
Diese Konvertierung von Datentypen kann auch mal schief gehen und so kann es schon mal zu Konflikten zwischen dem mySQL Server (gleiches gilt auch für MariaDB) und dem Microsoft Access Frontend Client. Access versucht, die Felder eines Datensatzes einzeln mit dem vorherigen Zustand auf dem Server zu vergleichen und stellt dabei fest, ob der Datensatz in der Zwischenzeit geändert wurde.
Timestamp ist die Lösung
Die Lösung ist ganz einfach:
- Mach ein Backup von deiner Datenbank! (SQLBackupAndFTP ?)
- Prüfe dein Backup und speichere es so, dass du es wiederfindest
- Lege in der ursprünglichen MySQL / MSSQL / o.ä. Tabelle ein neues Feld names TIMESTAMP an, mit dem Datentyp TIMESTAMP und sorge dafür, dass der Defaultwert auf current_timestamp liegt und dass wenn ein Update stattfindet der `Wert current_timestamp ebenfalls gesetzt wird.
- Speichern
- Verknüpfte Tabelle oder Tabellen neu verknüpfen
Dann macht Access keinen Feld für Feld Vergleich und stellt stattdessen anhand dieses Feldes fest, dass sich dieser Datensatz nicht verändert hat.
Lösung im Detail:
Hier der Befehl in der mySQL Schreibweise:
ALTER TABLE `[Tabellenname]` ADD COLUMN `TimeStamp` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP() AFTER `[trigger]`;
Neuverknüpfung der Tabelle/n:
- im Ribbon (Menüband) Externe Daten / Neue Datenquelle (ganz links) anklicken / Aus anderen Quellen / ODBC-Datenbank
- Dann den untersten Menüpunkt: „Erstellen Sie eine Verknüpfung zur Datenquelle…“
- ODBC Datenquelle auswählen
- Tabelle auswählen
- Alte Verknüpfung entfernen
- Fertig!
Wenn ich darüber hinaus helfen kann, dann nicht zögern, einfach eine Mail schreiben an [email protected] |