Announcement

Collapse
No announcement yet.

Access / SQL-Server - Timestamp Frage

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Access / SQL-Server - Timestamp Frage

    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

  • #2
    Hallo,

    &gt;..im SQL-Server wird folgendes angezeigt: <Binär> ...

    dann funktioniert der "Zeitstempel" auch in der MS SQL Server-Datenbank. Hinter einem Timestamp steckt kein echtes Datum/Zeit-Feld, sondern der interne Aufbau spielt keine Rolle, da nur der (binäre) Wert an sich benötigt wird.

    Um die Mehrbenutzerfähigkeit sicherzustellen, reicht das Vorhandensein einer TIMESTAMP-Spalte allein nicht aus, die eigene Anwendung muss diese Spalte auch in der WHERE-Einschränkung verwenden:
    <pre>
    UPDATE
    dbo.Testtabelle
    SET
    Feld1 = @NeuerWert
    WHERE
    PrimaryKeyField = @PKWert AND
    TimeStampFeld = @AlterTimeStampWert
    </pre>
    Wird nur der Primärschlüsselwert des Datensatzes als WHERE-Einschränkung verwendet, gilt das Prinzip "Der Letzte gewinnt immer!". Wird der TIMESTAMP-Wert mit in die WHERE-Einschränkung aufgenommen, so aktualisiert der UPDATE-Aufruf nur dann den Datensatz mit dem neuen Wert, wenn sich der TIMESTAMP-Wert in der Zwischenzeit nicht geändert hat (d.h. diesen Datensatz hat kein anderen Anwender geändert)

    Comment

    Working...
    X