Laden...

Cannot add or update a child row

Erstellt von -Hades- vor 10 Jahren Letzter Beitrag vor 10 Jahren 1.292 Views
-
-Hades- Themenstarter:in
171 Beiträge seit 2007
vor 10 Jahren
Cannot add or update a child row

verwendetes Datenbanksystem: mySql 5.6.11

Hallo,

ich habe meine komplette Datenbank auf Guid für die Primärschlüssel umgestellt. Der Grund ist, dass ich den Schlüssel direkt selbst bestimmen möchte ohne den Umfang zum Datenbankserver. Dadurch kann ich dann mehrere Zeilen erstellen und die Fremdschlüssel zuweisen ohne vorher was committen zu müssen. Das hat auch alles wunderbar geklappt, bis jetzt.
Jetzt bekomme ich immer eine Exception: Cannot add or update a child row: a foreign key constraint fails

und zwar will er eine Zeile einfügen, die per Fremdschlüssel auf eine andere Zeile verweist, die aber noch nicht committed ist und demnach meint er das geht nicht.
Bis vorgestern wurde das allerdings problemlos committed.
Ich habe eine neue Xampp-Version installiert und damit auch eine neuere MySql-Version (denke ich). Ich denke es liegt daran aber vielleicht irre ich mich auch.
Weiß jemand wie ich das alte Verhalten wiederherstellen kann?
Ich benutze typed datasets, vielleicht kann man den TableManager ja auch etwas klüger machen, so dass er in der richtigen Reihenfolge einfügt??

Gruß -Hades-

F
115 Beiträge seit 2012
vor 10 Jahren

Hi,

könnte daran liegen, dass Du die beiden Inserts seit gestern in unterschiedlichen Transaktionen durchzuführen versuchst. Innnerhalb einer Transaktion sieht man auch nicht committete Daten, die außerhalb der Transaktion nicht zu sehen sind.

Wie man das im TableManager steuert habe ich aber keine Ahnung. Wenn Du den Code von gersten noch hast kannst Du ja mal ein diff machen und nach Transaktion oder dergl. suchen...

Gruß
f_igy

F
115 Beiträge seit 2012
vor 10 Jahren

Achja,

vielleicht hilft das ja?

How to: Set the Order When Performing a Hierarchical Update
How to: Set the Order When Performing a Hierarchical Update

Gruß
f_igy

-
-Hades- Themenstarter:in
171 Beiträge seit 2007
vor 10 Jahren

Hallo,

es sind keine unterschiedlichen Transaktionen. Ich füge völlig neue Datensätze ein. Ich habe auch nicht das Datenbankschema verändert.
Das mit dem TableManager habe ich schon ausprobiert. Er macht zunäcst Inserts, allerdings funktioniert das auch nicht, da er wohl erst die "falschen" Zeilen inserten will, die aber den Fremdschlüssel (den es noch nicht gibt) beinhalten...

F
115 Beiträge seit 2012
vor 10 Jahren

Ach,

dann schau doch mal hier:

Walkthrough: Saving Data from Related Data Tables (Hierarchical Update)

Ich hab's beim Überfliegen zwar nicht verstanden, aber vielleicht hilft es Dir. Alles in allem bin ich mir nicht so sicher, ob es für die Interaktion mit Datenbanken immer so hilfreich ist Table-Adapter oder EFs zu verwenden. Die versprechen zwar alles einfacher zu machen, bereiten aber auch oft Kopfzerbrechen...

Gruß
f_igy

Hinweis von gfoidl vor 10 Jahren

Bitte beachte [Hinweis] Wie poste ich richtig? Punkt 3.1.

-
-Hades- Themenstarter:in
171 Beiträge seit 2007
vor 10 Jahren

Hallo f_igy,

danke für den Link. Demzufolge müsste mein TableAdapterManager, den ich für die Updates nutze, ja schon das hierarchische Einfügen beherrschen. Allerdings bekomme ich trotzdem die exception (neuerdings).

Also was ich ganz konkret habe und mache:

Ich habe simpel ausgedrückt die Tabelle Partner mit einem selbst erstelllten Guid Primärschlüssel. Daneben eine Tabelle Adresse, die die Partner-Guid als Fremdschlüssel enthält. Ich erzeuge mit einem typisierten Dataset erst den Partner, erzeuge die guid, erzeuge dann eine Adresse, setze die fremdschlüssel guid vom Partner und möchte diese beiden Zeilen dann mit Hilfe des TableAdapterManager committen. Da kommt dann die Exception.

Vorher war es sogar so, dass ich erst die Adresse committen konnte, ohne den Partner mit hochzuladen, ich habe also nur die mir bekannte Guid als Fremdschlüssel gesetzt und MySql hat nicht gemeckert, also auch nicht wenn die Guid auf die verwiesen wird gar nicht existiert.
Darauf aufbauend habe ich meinen Code erstellt, und da müsste ch jetzt wirklich eine große Menge von abändern wenn das so jetzt nicht mehr funktioniert...

1.696 Beiträge seit 2006
vor 10 Jahren

Hallo Hades,

kann es sein dass du den CONSTRAINT nachträglich erstellt hast, denn sonst läßt sich das Phänomen für mich schwer nachvollziehbar.

Grüße

Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.

**:::