Office: (Office 2010) Sperrverletzung

Helfe beim Thema Sperrverletzung in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Profis, ich habe eine Anwendug bei der ich als BE eine mysql Datenbank auf dem Server laufen habe. Auf einem Client will ich über eine... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Gabi-u-Martin, 9. März 2015.

  1. Sperrverletzung


    Hallo Profis, ich habe eine Anwendug bei der ich als BE eine mysql Datenbank auf dem Server laufen habe. Auf einem Client will ich über eine Aktualisierungsabfrage Daten verschieben.
    Die Abfrage dazu sieht so aus:


    PHP:
             sql "UPDATE rechnpos INNER JOIN containerdisposition ON rechnpos.VORGID = containerdisposition.DispoID "
    sql sql "SET containerdisposition.RECHNR = [rechnpos.rechnr], containerdisposition.RECHNUNG_DATUM = [rechnpos.rechdatum] "
    sql sql "WHERE (((containerdisposition.RECHNR) Is Null) AND ((rechnpos.POSID)>=87300));"
    :)
     
    Gabi-u-Martin, 9. März 2015
    #1
  2. Kann mir jemand auf meine Anfrage eine Antwort geben? Das Problem ist nich nicht gelöst.

    Martin
     
    Gabi-u-Martin, 19. Februar 2016
    #2
  3. Scheint ja ein super dringends Problem zu sein, wenn du fast ein Jahr damit leben konntest ...

    welche Tabelle willst du denn nun updaten, die "rechpos" oder die "containerdisposition"?

    Und mit diesen Where-Bedingungen hast du vermutlich mehrfach Treffer - Absicht?
     
  4. Sperrverletzung

    Marsu65, 19. Februar 2016
    #4
  5. Ja, das Thema ist etwas in den Hintergrund geraten weil ich mich um dieses Problem nicht gekümmert habe und der Kunde sich nicht gemeldet hat.

    JA, in der Where Klausel habe ich (beabsichtigt) mehrere Treffer, da auf einer Rechnung mehrere Positionen stehen und nicht unbedingt nur ein Vorgang.

    Ja, den Link zum alten Thema kenne ich und habe auch dort schon eine dumme Antwort auf die Frage nach der damaligen Lösung erhalten. Da die Lösung damals nicht "veröffentlicht" wurde habe ich nach so langer Zeit danach gefragt.
    Der Henker steht bereit um mich für diese Nachfrage zu hängen.

    Aus den bisherigen Antworten (Damals wie huete) kann ich erkennen, dass von den "Profis" keine Lösung zu erwarten ist. Suche mal an anderer Stelle.

    Martin
     
    Gabi-u-Martin, 19. Februar 2016
    #5
  6. OT: Nimm mal lieber Gas weg, sonst kannst du zukünftige Fragen hier vergessen. *rolleyes.gif*

    Zum Thema: Generell kann es solche Meldungen geben, wenn die Felder von bestimmten Datentypen sind, die Access und MySQL (Beispiel: int und tinyint bei MySQL, Bit-Felder bei MSSQL) anders behandeln. Es spielt dann auch keine Rolle, ob gerade die Felder aktualisiert werden, oder nicht. Andere Felder samt Datentypen also bitte auch checken. Neben Timestamp sind Primärschlüssel auch von Vorteil (z.B. mal testweise einen solchen anlegen).

    Jean gab dir übrigens auch einen Hinweis, den du verfolgen solltest. Unter Umständen wäre es besser, wenn "UPDATE containerdisposition" geschrieben wird - im SET-Bereich ist ja auch nur von "containerdisposition" die Schreibe.

    Genaues Zitat der Fehlermeldung ist sicherlich auch von Vorteil, wenn du Hilfe suchst. Sinngemäße Wiedergaben bringen hier nicht viel.
     
    Arne Dieckmann, 19. Februar 2016
    #6
  7. Hallo,
    der genaue Wortlaut könnte hilfreich sein. Allerdings fehlen auch Informationen dazu, in welchem Kontext der Code überhaupt zum Einsatz kommt.

    Die Frage von Jean bzgl. der zu aktualisierenden Tabelle beantwortet sich durch den von dir geposteten SQL-Code.
    Ein "verfolgenswerter Hinweis" ist in seinem Beitrag also nicht enthalten, denn
    warum sollte man mit einer Aktualisierungsabfrage nicht mehrere Datensätze ändern wollen?!
     
    MaggieMay, 20. Februar 2016
    #7
  8. Sperrverletzung

    Ok, die beiden Tabellen verfügen über Autokeys und ein Time-Stamp. Die Abfrage muss in der Lage sein, mehrere Datensätze zu aktualisieren.


    PHP:
             UPDATE rechnpos INNER JOIN containerdisposition ON rechnpos.VORGID containerdisposition.DispoID SET containerdisposition.RECHNUMM = [rechnpos.rechnr], containerdisposition.RECHNUNG_DATUM = [rechnpos.rechdatum]
    WHERE (((containerdisposition.rechnummIs Null) AND ((rechnpos.POSID)>=87300));
     
    Gabi-u-Martin, 20. Februar 2016
    #8
  9. Du bist sicher, dass Du nebenher nichts anderes laufen hast, was eine Sperrung von Datensätzen verursachen kann? Bei mehreren Datensätzen müsste das schon eine Transaktion sein (auch durch eigenen Rechner in Verwendung).

    Bezüglich Syntax stören mich die eckigen Klammern, die Tabellen- und Feldnamen zu einem Begriff zusammenfassen. Die gleiche Abfrage würde bei mir etwa so aussehen (Aliase, Klammerbereinigung):
    Code:
    Gleiche Bezeichnungen mal groß, mal klein zu schreiben ist wohl ein eigener Stil? Der Übersicht dient es nicht.
     
  10. Moin,

    bei komplexen Queries hilft manchmal die Zerlegung in Teile. Schreib mal 2 Abfragen, die eine gemäß dem Join, die andere wie die WHERE-Klausel und leg die Ergebnisse nebeneinander. Vielleicht hilft's.

    Gruß
    Ralf
     
    drambeldier, 20. Februar 2016
    #10
  11. \@Ralf: so komplex ist die ja nun auch nicht ...

    @Martin
    was mich immer noch stört: der Update wird an sich auf der Tabelle containerdisposition gemacht, du fängst aber mit der rechnpos an ...
    An sich sollte das kein Problem sein, aber du schmeisst das ganze ja gegen MySQL und da weiss ich nicht, wie sich das verhält.

    Hast du das ganze mal umgekehrt laufen lassen?
    Code:
     
  12. \@Jean: Das ist total unerheblich.
    Ein (INNER) JOIN ist nichts anderes als ein Kriterium zum Verknüpfen. Anders formuliert lautet die gleiche Abfrage (mit gleicher Ausführung):
    Code:
    Die Richtung des Aktualisierens wird im SET-Teil vorgegeben, und die ist eindeutig und korrekt.

    In welcher Reihenfolge die Kriterien verarbeitet werden, bestimmt der SQL-Optimierer für sich.

    Vom Stil her (Lesbarkeit der Abfrage) würde ich natürlich auch die zu aktualisierende Tabelle als erste nach dem UPDATE-Schlüsselwort verwenden.
     
  13. Sperrverletzung

    Hat du schon versucht die Verknüpfungen zu löschen und neu zu erstellen?
    LG Markus
     
    markusxy, 21. Februar 2016
    #13
Thema:

Sperrverletzung

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden