TheRealGollom 10 Geschrieben 3. September 2008 Melden Teilen Geschrieben 3. September 2008 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 Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 3. September 2008 Melden Teilen Geschrieben 3. September 2008 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? Zitieren Link zu diesem Kommentar
NilsK 2.969 Geschrieben 3. September 2008 Melden Teilen Geschrieben 3. September 2008 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 Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 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 Zitieren Link zu diesem Kommentar
NilsK 2.969 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 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 Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 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 Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 Darf ich mal kurz völlig untechnisch dazwischenschießen und nach dem Sinn des ganzen fragen? Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 den sinn der applikation? Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 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. Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 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 Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 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. Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 Und das macht er eh nicht...aber meine Frage ist warum passiert der Fehler nur bei 4 Datensätzen.... Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 Reproduzierbar bei 4 Datensätzen? Zitieren Link zu diesem Kommentar
TheRealGollom 10 Geschrieben 4. September 2008 Autor Melden Teilen Geschrieben 4. September 2008 Ja es waren immer die gleichen 4, einer dieser 4 ist im ersten post Zitieren Link zu diesem Kommentar
phoenixcp 10 Geschrieben 4. September 2008 Melden Teilen Geschrieben 4. September 2008 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. Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.