Laden...

Aktualisierung mit Fill führt zu doppelten Einträgen

Erstellt von Feinfinger vor 17 Jahren Letzter Beitrag vor 17 Jahren 1.946 Views
F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 17 Jahren
Aktualisierung mit Fill führt zu doppelten Einträgen

Hallo,

folgendes Problem tritt bei mir auf. Ich habe eine leere Tabelle bei der ich einen neuen Datensatz einfüge. Diesen schicke ich dann per "Update" des tableadapters runter zur Datenbank und aktualsiere die Tabelle danach mit "Fill" mit der eigenschaft "ClearBeforeFill" = false. Dabei aktualisiert er den neu angelegten datensatz nicht, sondern legt den aus der Datenbank gelesenen neu an so das ich 2 mal den gleichen hab! Das tritt nicht auf sobald vorher schon ein Datensatz vorhanden war. Dann aktualsiert er ihn schön brav.

Sinn der ganzen Geschichte war eigentlich das ich aus sämtlichen Insert Statements der Adapter den Primärschlüssel genommen hab und so beim aktualisieren mit der Datenbank den dort über den Generator erzeugten Schlüssel zurückbekomme.

Keine Weltherrschaft ohne manisches Lachen!

Gelöschter Account
vor 17 Jahren

ich behaupte mal das es an dem liegt:

"ClearBeforeFill" = false
F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 17 Jahren

die einstellung ist aber notwendig da ich aufgrund von fremdschlüsseln nicht einfach so eine Tabelle löschen kann 🙁
vs2005 ist leider nicht so intelligent diese für die Fill funktion ausser kraft zu setzen.

Keine Weltherrschaft ohne manisches Lachen!

Gelöschter Account
vor 17 Jahren

so wie ich das problem verstanden habe ist es so:

du erzeugst im code oder per hand einen neuen datensatz in der tabelle.
dieser hat keinen pk.
nun fügst du diesen datensatz in die datenbank ein.
jetzt bekommt der datensatz einen pk
jetzt startest du einen fill.
der fill schaut ob der gleiche datensatz bereits in der tabelle vorhanden ist
(original hat keinen pk und der in der datenbank hat einen pk)
der eingegebene datensatz ist der datenbank fremd.
ergo lässt er ihn drinne weil du clearebeforefill auf false hast und fügt die daten die er bekomm einfach an.

wenn ja dann lösch einfach direkt nach dem insert die zeile und starte im gleichen augenblick einen "refill"

F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 17 Jahren

die id wird per autoincr. des datasets erzeugt nach dem einfügen und quasi als zwischenlösung verwendet bis der datensatz über die Fill Methode mit der in der Datenbank vergebenen Id aktualisiert wird. Das Funktioniert ja auch komischerweise wenn clearbeforefill false ist aber nur wenn mind 2 datensätze vorhanden sind ! Folglich muss die Fill Methode den Datensatz irgendwie wiedererkennen können auch wenn sich der Primärschlüssel geändert hat.

Keine Weltherrschaft ohne manisches Lachen!

Gelöschter Account
vor 17 Jahren

hm... ist im dataset der erste vergebene pk zufällig die 0 und in der datenban der erste pk die 1?

F
Feinfinger Themenstarter:in
38 Beiträge seit 2007
vor 17 Jahren

den seed habe ich jeweils auch schonmal geändert, daran liegt es leider nicht. Man müsste die möglichkeit haben über den tableadapter einzelne Datensätze zuholen anstatt nur tabellenweise! Dann könnte ich den neu eingügten Datensatz nämlich zwischen Update und Fill löschen aber so wüsste ich danach nicht mehr welcher jetzt der neue war .

Keine Weltherrschaft ohne manisches Lachen!

F
10.010 Beiträge seit 2004
vor 17 Jahren

Dann mach es so, wie es alle machen.

Such mal nach "SELECT @@IDENTITY" und "onrowupdating"