Seite 1 von 1

Fehler 515 im Grid

Verfasst: 20.09.2009, 18:52
von migo
Hallo Elmar,

seit einigen Tagen benimmt sich Baywotch etwas merkwürdig. Wenn ich eine größere Menge Artikel aufliste, kommt folgende Fehlermeldung:

Code: Alles auswählen

Unerwarteter Laufzeitfehler:

Modul: s_DisplayArticleDataInGrid
Zeile: 0
Code: -2147220989 (515)
Description: This key is already associated with an element of this collection.
Source: iGrid
Datenbank: D:\ebay\BayWotch4\baywotch.db5 (594,05 MB)
LastDLLError: 0
Zeit: 20.09.2009 18:25:44
App Version: 4.1.22 FINAL.16
DAO Version: 3.6
ADO Version: 2.8
wodHTTP.dll Version: 1.5.6.148
OS: Windows XP 2600 Service Pack 3
Zuerst dachte ich, die Datenbank wäre defekt, aber komprimieren und reparieren hat keinen Effekt. Die Fehlermeldung kommt trotzdem.

Michael

Verfasst: 21.09.2009, 21:23
von migo
Hallo Elmar,

schau dir das mal an. :O

Bild

In der Datenbank ist der Artikel nur einmal vorhanden. Dafür hat es Baywotch irgendwie geschafft, zwei Einträgen in der tblUser die selbe ID zu geben. Dadurch wurde anscheinend der Fehler verursacht.

Michael

Verfasst: 21.09.2009, 23:09
von Mash
Moin migo,

zwar weiss ich auch nicht, wie BW das geschafft hat, aber "Dein" Fehler entsteht meistens durch defekten Index.

Gruß
Mash

Verfasst: 22.09.2009, 09:06
von denkmann
Moin Michael,
migo hat geschrieben:In der Datenbank ist der Artikel nur einmal vorhanden. Dafür hat es Baywotch irgendwie geschafft, zwei Einträgen in der tblUser die selbe ID zu geben. Dadurch wurde anscheinend der Fehler verursacht.
dann ist definitiv Deine Datenbank beschädigt. :(

Die ID ist das eindeutige, unveränderliche und automatisch fortlaufende Merkmal in Tabelle "tblUser". Selbst wenn BayWotch wollte, könnte es die ID nicht doppelt vergeben.

Wenn hier Werte doppelt vorkommen, greift der "Primary Key" nicht.

Hast Du Access zur Hand? Dann könntest Du die Feld-Definitionen in den Tabellen anhand einer "jungfräulichen" Datenbank vergleichen.

Verfasst: 22.09.2009, 13:39
von Borkumer
Hallo!

Die "tblauction" ist per "inner Join" mit "tbluser" verknüpft. Das bedeutet, dass soviele Datensätze angezeigt werden wie in der "rechten" Tabelle der Verküpfungswert in der Spalte "ID" vorhanden ist. In diesem Fall zweimal!

Code: Alles auswählen

SELECT tblAuction.seller_id, tblUser.id
FROM tblUser INNER JOIN tblAuction ON tblUser.id = tblAuction.seller_id;
Werden zweimal die gleichen Datensätze angezeigt, jedoch mit zwei verschiedenen Verkäufern, so "müßte" in der "tbluser" die selbe "ID" zweimal vergeben worden sein. Das darf aber nicht sein weil ->"indiziert=Ja (Ohne Duplikate)" für dies Feld als Bedingung eingestellt ist.

Das nur als Erklärung für die Mitleser, die nicht in die DB reinschauen wollen/können.

migo hat geschrieben:Dafür hat es Baywotch irgendwie geschafft, zwei Einträgen in der tblUser die selbe ID zu geben.
@ migo
Ist das ein Einzelfall oder sind in Deiner "tbluser" noch mehrere solcher Duplikate vorhanden?
Hast Du mal rep/komp unter Access direkt gemacht?

Verfasst: 23.09.2009, 20:22
von migo
Hi,

insgesamt gab es drei "Dubletten". Merkwürdigerweise war der Primary Key in dieser Datenbank in der tblUser nicht gesetzt, in meinen anderen Datenbanken aber schon. Ich vermute mal, daß das Flag bei einem der Abstürze verloren gegangen ist, welche diese Datenbank schon erlebt hat. Merkwürdig, das ganze...

Michael

Verfasst: 13.10.2009, 00:04
von Borkumer
Hallo Michael!

Das ominöse "Grid" ist eine heikle Schnittstelle zur DB. Wenn das Grid auf Tabellen der DB5 zugreift scheint sie "weitergehende" Rechte zu besitzen als dies direkt unter Access möglich wäre. So ist es mir möglich gewesen, die 2GB-Grenze für die DB mit dem Grid gewaltig zu unterlaufen. Die DB ließt sich danach unter Access weder verwalten noch war es möglich sie zu reparieren.

Deshalb scheint der Hinweis wichtig, dass bei einem Absturz von BayWotch (warum auch immer) die DB einen Knax bekommen hat, da ja das Grid in der Regel in dem Moment auf die DB zugreift.

Aber nach einem Neustart von BW ist in den allermeisten Fällen kein Fehler festzustellen, aber, wie Dein Beispiel zeigt, möglich: !!


Deshalb der dringende Hinweis an Alle: so oft wie möglich die DB sichern und rep/komp durchführen !!