OleDBException wurde nicht behandelt.

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von VB1963.

    OleDBException wurde nicht behandelt.

    Hallo Community

    OleDBException wurde nicht behandelt.
    "Die von Ihnen vorgenommenen Änderungen an der Tabelle konnten nicht vorgenommen werden,
    da der Index, Primärschlüssel oder die Beziehung mehrfach vorkommende Werte enthalten würde.
    Ändern Sie die Daten in den Feldern, die gleiche Daten enthalten, entfernen Sie den Index,
    oder definieren Sie den Index neu, damit doppelte Einträge möglich sind, und versuchen Sie es erneut."

    Bei mir kommt beim Abspeichern meiner Daten im Dataset (siehe angehängtes Bild) oben genannter Fehler.
    Ich verwende zum Datenhalten Access 2007 und benutze die DBExtension von @ErfinderDesRades.
    Der Fehler tritt immer auf, wenn ich versucht habe, die Werte der Gruppe 2 untereinander auszutauschen.
    Siehe z.B. nachfolgende 4 Schritte...

    1.Schritt
    Zeile / PM / Grp1 / Grp2
    1 3 0 0
    2 3 0 1

    2.Schritt
    Zeile / PM / Grp1 / Grp2
    1 3 0 2
    2 3 0 1

    3.Schritt
    Zeile / PM / Grp1 / Grp2
    1 3 0 2
    2 3 0 0

    4.Schritt
    Zeile / PM / Grp1 / Grp2
    1 3 0 1
    2 3 0 0

    Ich kann aber keine mehrfach vorkommende Werte im Primärschlüssel feststellen - oder was wird da sonnst noch gemeint? :whistling:
    Bilder
    • _Dataset.PNG

      16,75 kB, 610×213, 130 mal angesehen
    Dateien
    • TestDB00.zip

      (123,2 kB, 135 mal heruntergeladen, zuletzt: )
    • _Form.bmp

      (978,7 kB, 164 mal heruntergeladen, zuletzt: )
    naja, Primärschlüssel ändert man halt nicht.
    Da versucht er, die erste Zeile abzuspeichern, aber - potzblitz! - die einzuspeichernde Änderung ist ja identisch mit einem Datensatz, dens schon gibt!

    also um das zu handeln müsstest du auch auf DB-Ebene so umständlich mehrschrittig vorgehen, wie dus im Gui machst.

    Oder du speicherst halt aus dem Gui heraus, wenn du den Zwischenschritt machst.
    wird es doch gar nicht. Dataset hat doch eine Änderungs-Verfolgung - schon vergessen?
    Allerdings - wenn du Primärschlüssel änderst, werden auch die verknüpften ChildRows geändert - aufgrund von UpdateRule.Cascade.
    Also es werden schon mehr Rows geupdated als nur die konkret manipulierten.
    Aber längst nicht alle.

    Aber trotzdem ist son Zwischenschritt natürlich keine wirkliche Schönheit.
    Wenns wirklich ums Tauschen von ParentRows geht könnte man an eine Methode denken, die die ParentRows unangetastet lässt, und stattdessen an den Foreignkeys der ChildRows ansetzt. Solch ließe sich auch ohne Zwischenschritt umsetzen - zunächst mal im Dataset, aber auch abzuspeichern.
    Eben was ich sag: PrimaryKeys ändert man nicht ;)
    Das mit der Änderungsverfolgung ist mir schon klar - da habe ich oben Quatsch geschrieben - da meine ich, dass das nicht optimal ist, nach jeder einzelnen Änderung gleich wieder zu speichern...
    PrimaryKeys ändert man nicht
    Genau - deswegen werde ich nochmals das Datenmodell ändern müssen :) :S und mir diese Regel groß hinter's Ohr schreiben...