Jump to content

SQL Server 2008 Express - Datensatz lässt sich nicht updaten


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Hallo Leute,

 

Ich habe einen Linked Server zu meiner Mysql Datenbank erstellt, alles funktioniert auch soweit ohne probleme jedoch gibts ein problem an dem ich so langsam aber sicher verzweifle.

 

Ich möchte einen Datensatz updaten mit folgendem query:

 

UPDATE OPENQUERY(PDA2INVLOG, 'SELECT TS, ART, GEB, PDA, PREIS, BARCODE, UPDATED FROM pricelog;') SET TS='8/29/08 03:45:01 PM', PDA='WINDOWS', PREIS='1.65', ART='70006309', GEB='002', BARCODE='0', UPDATED=1 WHERE ART='70006309' AND GEB='002';

 

einmal funktioniert es und dann für eine unbestimmte zeit nicht, daraus kann ich dann mal schliessen dass es nicht am query liegt.

 

Die Fehlermeldung vom SQL Server ist folgende:

 

OLE DB provider "MSDASQL" for linked server "PDA2INVLOG" returned message "La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture.".

Msg 7343, Level 16, State 4, Line 1

The OLE DB provider "MSDASQL" for linked server "PDA2INVLOG" could not UPDATE table "[MSDASQL]". The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

 

select querys funzen, und wie gesagt updates auch, wenn ich jetzt zb. das query in mysql laufen lasse, klappts, danach teste ich meine query in mssql dann klappts auch! lasse ich das query nochmal in mssql laufen dann bekomm ich die fehlermeldung

 

Nach langer erfolgloser google suche ist die hier meine letzte hoffnung....auf google fand ich einen msdn forum beitrag von 2005, jedoch keine lösung dazu

 

mfg

Link zu diesem Kommentar

Moin,

 

wieso, der englische Text steht doch direkt drunter.

 

@TheRealGollum (...): Wie die Meldung ja deutlich sagt, gibt es ein Sperrproblem. Deine Applikation nutzt "Optimistic Locking", was auf deutsch heißt, dass sie den zu ändernden Datensatz gar nicht sperrt. Beim Update hat die Zeile dadurch einen anderen Wert als bei der Abfrage und daher verweigert SQL Server die Änderung. Das nennt man auch "Dirty Read", weil du Datensätze in einer Weise abfragst, die die Konsistenz nicht sicherstellt. Es handelt sich hier ja auch um eine Abfrage auf einen anderen Server (OPENQUERY).

 

Das kann man so ohne Weiteres nicht mal eben ändern, ohne das Design der Applikation zu kennen. Der Entwickler sollte jedenfalls sicherstellen, dass die Transaktion die zu ändernden Daten exklusiv sperrt.

 

Gruß, Nils

Link zu diesem Kommentar
La ligne n'a pas pu être trouvée pour la mise à jour. Certaines valeurs ont peut-être changé depuis leur dernière lecture.

 

bedeutet soviel wie:

 

Die zu aktualisierende Zeile konnte nicht gefunden werden. Seit dem letzten Lesenvorgang haben sich vllt. einige Werte verändert

 

Meine Applikation ist die einzige die auf dies Tabelle zugreift, hier eine kleine erklärung zu dem was sie macht:

 

Zuerst wird sie komplett mit einem Select query ausgelesen, und das wird der Preis des Artikels in der Zeile mit dem Preis in unserer Betriebssoftware verglichen, ist er nicht gleich soll das update query ausgeführt werden(klappt nur nicht immer...), wenn er gleich ist wird nur das Feld "UPDATED" auf einsgesetzt (dieses update query funktioniert komischerweise immer).

 

Die DB enthällt 1100 Zeilen und das Problem tritt nur bei 4 Zeilen auf....was äusserst komisch ist...

 

mfg

Link zu diesem Kommentar

Hi,

 

also ich hab ehrlich gesagt nicht viel ahnung vom SQL Server...mein Chef kam vor 2 Wochen mit der Idee den SQL Server Express zu installieren und ein linked Server zu erstellen (hat das wohl irgentwo im netz gelesen). mit ach und krach hab ichs dann hinbekommen über openquery auf meine mysql datenbank zuzugreifen....

 

mfg

Link zu diesem Kommentar

Also meines Wissens gibts keinen mysql-connector für pocketpc....deshalb kam mein chef auf diese gloreiche idee....vorher lief die datenbank in access, ging auch prima, nur will er all access db's abschaffen und alles auf mysql migrieren, ich würd lieben die dbs in msssql lagern aber er wills halt so und da gibts kein weg vorbei....er muss sich ja nicht mit den problemen rumschlagen...

 

das ist der sinn des ganzen...:S

Link zu diesem Kommentar

Ok. Wenn er sich auf technischer Ebene nicht für ne Überführung der DB's nach MS SQL überzeugen lässt, dann bliebt nur noch die Lösung von Nils:

Und warum definierst du den ganzen Vorgang nicht als Transaktion mit Repeatable Read, wenn du sonst in Konsistenzprobleme läufst?

Wenn dir dazu aber die notwendigen Kenntnisse fehlen und dein Chef die Daten aus MySQL über den "Umweg" MS SQL auf dem Pocket PC zugänglich haben will, dann muss er wohl oder übel ein paar Euro für die Einrichtung durch einen externen Experten locker machen.

Link zu diesem Kommentar
The OLE DB provider "MSDASQL" for linked server "PDA2INVLOG" could not UPDATE table "[MSDASQL]". The rowset was using optimistic concurrency and the value of a column has been changed after the containing row was last fetched or resynchronized.

Naja, die Fehlermeldung ist eigentlich recht sprechend:

Der Inhalt einer der Spalten wurde verändert, seitdem das Rowset zuletzt geladen wurde. Sprich, irgendjemand / irgendwas hat die Daten schon verändert, bevor du deine Veränderung in die DB bekommen hast.

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...