Zum Inhalt wechseln


Foto

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


  • Bitte melde dich an um zu Antworten
24 Antworten in diesem Thema

#1 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 03. September 2008 - 11:27

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

#2 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 03. September 2008 - 11:30

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


Also mit deutsch und englisch komm ich wunderbar klar... Aber muss es unbedingt Französisch sein? Kann mal bitte irgendwer die Fehlermeldung übersetzen?
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#3 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 03. September 2008 - 13:52

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

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#4 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 06:19

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

#5 NilsK

NilsK

    Expert Member

  • 12.334 Beiträge

 

Geschrieben 04. September 2008 - 07:05

Moin,

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

Gruß, Nils

Nils Kaczenski

MVP Cloud and Datacenter Management
... der beste Schritt zur Problemlösung: Anforderungen definieren!

Kostenlosen Support gibt es nur im Forum, nicht privat!


#6 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 08:23

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

#7 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 04. September 2008 - 08:26

Darf ich mal kurz völlig untechnisch dazwischenschießen und nach dem Sinn des ganzen fragen?
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#8 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 08:46

den sinn der applikation?

#9 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 04. September 2008 - 08:49

Nein, mich würde eher interessieren was ihr mit dem Linked Server erreichen wollt. Dann kann man vielleicht daran eine mögliche andere Lösung oder Umsetzung des bestehenden Lösung herbeiführen.
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#10 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 08:53

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

#11 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 04. September 2008 - 09:01

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.
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#12 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 09:18

Und das macht er eh nicht...aber meine Frage ist warum passiert der Fehler nur bei 4 Datensätzen....

#13 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 04. September 2008 - 09:26

Reproduzierbar bei 4 Datensätzen?
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB

#14 TheRealGollom

TheRealGollom

    Junior Member

  • 105 Beiträge

 

Geschrieben 04. September 2008 - 09:29

Ja es waren immer die gleichen 4, einer dieser 4 ist im ersten post

#15 phoenixcp

phoenixcp

    Expert Member

  • 5.481 Beiträge

 

Geschrieben 04. September 2008 - 09:31

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.
MfG

Carsten Paul
MCSEBoard.de SQL Blog
Kein Support per PN, dafür ist das Forum da!

In Memory of LukasB