Hi, ich hätte da mal eine kleine Frage zu einem Problem das sich bei mir gestellt hat:
Ich hatte den Auftrag, eine Anwendung mit Datenbank, die unter Access erstellt wurde (Access 2000), für einen Kunden anzupassen. Teil dieser Anpassung war die Portierung der Datenbanktabellen auf einen MS SQL Server 2000 (SP3). Hierbei hat sich nun das Problem gestellt, dass teilweise beim Ändern von Datensätzen ein Schreibkonflikt auftrat.
Daraufhin habe ich beim Forschen nach Lösungsmöglichkeiten dies gefunden:
"
B2.3. Schreibkonflikt bei verknüpften Tabellen
Problem:
Die SQL Server-Tabellen sind zu Access verknüpft. Bei Datenänderungen erscheint die Fehlermeldung "Schreibkonflikt: Dieser Datensatz wurde seit Beginn der Bearbeitung von einem anderen Benutzer geändert ... ". Der Button Eigene Änderungen verwerfen in der Fehlermeldung ist inaktiv. Der Benutzer arbeitet alleine an der Datenbank.
Lösung:
Der Schreibkonflikt wird durch Datentypen, deren Werte in Access und SQL Server nicht identisch sind, ausgelöst. Nach Änderung der Daten werden die Inhalte der Felder einzeln verglichen. Access behandelt Gleitkommazahlen mit einer anderen Genauigkeit als der SQL Server. Die dadurch entstehende Differenz wird als zwischenzeitige Ã?nderung des Datensatzes interpretiert und löst die Fehlermeldung aus.
Der Konflikt kann behoben werden, indem die Tabelle um ein Feld vom Datentyp Timestamp ergänzt wird. Nun wird bei einem Update nur noch der Primarykey und das Feld vom Typ Timestamp des Datensatzes verglichen.
In einem Timestamp-Feld wird kein Datum gespeichert. Als Inhalt wird ein eindeutiger Wert gespeichert, der den aktuellen Stand dieses Datensatzes darstellt.
"
(Quelle: http://www.berndjungbluth.de/sqlfaq/faqb2.htm )
Wenn ich lediglich eine neue Spalte mit dem Datentyp Timestamp in allen Tabellen erstelle, tritt der Fehler zwar nicht mehr auf; jedoch hat sich beim Testen herausgestellt, dass auch bei einem nachgestellten (echten) Schreibkonflikt die Fehlermeldung nicht mehr auftritt, und einfach die Daten vom neuesten Schreibzugriff genommen werden, vorherige werden Überschrieben.
Ich nehme an, dass das Timestamp-Feld einfach leer bleibt, und kein Wert erzeugt wird, also der Abgleich immer positiv ausfällt.
Wenn ich in den Tatentabellen nachsehe, bekomme ich unter Access einfach ein leeres Feld, im SQL-Server wird folgendes angezeigt: <Binär>
Muss man den Timestamp nochmal extra erzuegen, und wenn ja: wie mache ich das?
Vielen Dank fürs lesen, ich hoffe ihr könnt mir helfen ;o)
Andy
Ich hatte den Auftrag, eine Anwendung mit Datenbank, die unter Access erstellt wurde (Access 2000), für einen Kunden anzupassen. Teil dieser Anpassung war die Portierung der Datenbanktabellen auf einen MS SQL Server 2000 (SP3). Hierbei hat sich nun das Problem gestellt, dass teilweise beim Ändern von Datensätzen ein Schreibkonflikt auftrat.
Daraufhin habe ich beim Forschen nach Lösungsmöglichkeiten dies gefunden:
"
B2.3. Schreibkonflikt bei verknüpften Tabellen
Problem:
Die SQL Server-Tabellen sind zu Access verknüpft. Bei Datenänderungen erscheint die Fehlermeldung "Schreibkonflikt: Dieser Datensatz wurde seit Beginn der Bearbeitung von einem anderen Benutzer geändert ... ". Der Button Eigene Änderungen verwerfen in der Fehlermeldung ist inaktiv. Der Benutzer arbeitet alleine an der Datenbank.
Lösung:
Der Schreibkonflikt wird durch Datentypen, deren Werte in Access und SQL Server nicht identisch sind, ausgelöst. Nach Änderung der Daten werden die Inhalte der Felder einzeln verglichen. Access behandelt Gleitkommazahlen mit einer anderen Genauigkeit als der SQL Server. Die dadurch entstehende Differenz wird als zwischenzeitige Ã?nderung des Datensatzes interpretiert und löst die Fehlermeldung aus.
Der Konflikt kann behoben werden, indem die Tabelle um ein Feld vom Datentyp Timestamp ergänzt wird. Nun wird bei einem Update nur noch der Primarykey und das Feld vom Typ Timestamp des Datensatzes verglichen.
In einem Timestamp-Feld wird kein Datum gespeichert. Als Inhalt wird ein eindeutiger Wert gespeichert, der den aktuellen Stand dieses Datensatzes darstellt.
"
(Quelle: http://www.berndjungbluth.de/sqlfaq/faqb2.htm )
Wenn ich lediglich eine neue Spalte mit dem Datentyp Timestamp in allen Tabellen erstelle, tritt der Fehler zwar nicht mehr auf; jedoch hat sich beim Testen herausgestellt, dass auch bei einem nachgestellten (echten) Schreibkonflikt die Fehlermeldung nicht mehr auftritt, und einfach die Daten vom neuesten Schreibzugriff genommen werden, vorherige werden Überschrieben.
Ich nehme an, dass das Timestamp-Feld einfach leer bleibt, und kein Wert erzeugt wird, also der Abgleich immer positiv ausfällt.
Wenn ich in den Tatentabellen nachsehe, bekomme ich unter Access einfach ein leeres Feld, im SQL-Server wird folgendes angezeigt: <Binär>
Muss man den Timestamp nochmal extra erzuegen, und wenn ja: wie mache ich das?
Vielen Dank fürs lesen, ich hoffe ihr könnt mir helfen ;o)
Andy
Comment