[Access97] Bug bei Datenspeicherung?

Hallo!

In meiner DB öffnet sich beim Drücken eines Buttons ein Formularfeld, das den aktuellen Kontakt (Vornname, Name, KontaktID) anzeigt. In einem Subformular davon habe ich u. a. ein Berichtsteuerelement (also wie bei einem Report) eingebunden.

Jedem Kontakt lassen sich verschiedene Aktivitäten zuordnen. Das Berichtsteuerlement zeigt an, welche AktivitätenID’s zum aktuellen Kontakt gehören (funktioniert einwandfrei). Diese Informationen sind in einer Tabelle gespeichert, die KontaktID’s und dazugehörige AktivitätenID’s enthält.

Der Benutzer kann einem Kontakt neue Aktivitäten zuordnen, indem er die jeweilige AktivitätenID in das Formular einträgt. Im Subformular wird ja die Tabelle mit den bereits bestehenden Werten angzeigt. Er trägt also die neue Zahl einfach in die nächste leere Spalte ein. Die Speicherung erfolgt durch Access ohne jeglichen VBA-Code, dabei treten jedoch Fehler auf:

Beispieltabelle:
KontaktID | AktivitätenID
220 | 1

Jetzt trägt der Benutzer die AktivitätenID 2 beim Kontakt 484 ein und die Tabelle sieht folgendermaßen aus:

KontaktID | AktivitätenID
484 | 1
484 | 2

Jetzt bekommt die Tabelle die Werte 489 und 3 zugewiesen:

KontaktID | AktivitätenID
489 | 1
484 | 2
489 | 3

Warum speichert Access die Werte nicht immer nur im letzten Datensatz, sondern auch noch im ersten ab? Wie läßt sich das verhindern? Für jegliche Hilfe wäre ich sehr dankbar, denn mit einer DB, die die Daten nicht richtig abspeichert kann ich reichlich wenig anfangen!

Ciao, Tanja

Warum speichert Access die Werte nicht
immer nur im letzten Datensatz, sondern
auch noch im ersten ab? Wie läßt sich das
verhindern? Für jegliche Hilfe wäre ich
sehr dankbar, denn mit einer DB, die die
Daten nicht richtig abspeichert kann ich
reichlich wenig anfangen!

Trotz deiner detaillieten Schilderung wird mir das Problem nicht so richtig klar bzw. scheint sich in den Tiefen der Tabellen- bzw. Unterformularverknüpfung zu verbergen. Schick mir doch mal eine abgemagerte und komprimierte Datenbank per Mail zur Ansicht…

Reinhard

Hallo Tanja,

meine Reaktion kommt etwas spät - aber vielleicht bringt’s doch noch was!

Das von Dir beschriebene Problem hört sich so an, als ob Du mit den Ereignissen durcheinanderkommst!
Ich vermute, daß irgendwo im Code ein „Requery“ durchgeführt wird - das springt dann automatisch auf den ersten Datensatz! Wird der gerade eingegebene Wert dann nochmals per Programmcode dem Feld zugewiesen, ist halt auch noch der erste Datensatz geändert!

Um das zu prüfen, solltest Du bei der ersten Zuweisung einen Breakpoint setzen und von da an Einzelschritte ausführen - so solltest Du dem „Übeltäter“ schnell auf die Spur kommen!

Kurt
http://www.fortwaengler.de

Hallo Kurt!

meine Reaktion kommt etwas spät - aber
vielleicht bringt’s doch noch was!

Ja, ich bin für jegliche Hilfe dankbar. Das Problem ist immer noch nicht gelöst.

Das von Dir beschriebene Problem hört
sich so an, als ob Du mit den Ereignissen
durcheinanderkommst!
Ich vermute, daß irgendwo im Code ein
„Requery“ durchgeführt wird - das springt
dann automatisch auf den ersten
Datensatz! Wird der gerade eingegebene
Wert dann nochmals per Programmcode dem
Feld zugewiesen, ist halt auch noch der
erste Datensatz geändert!

Um das zu prüfen, solltest Du bei der
ersten Zuweisung einen Breakpoint setzen
und von da an Einzelschritte ausführen -
so solltest Du dem „Übeltäter“ schnell
auf die Spur kommen!

Das habe ich schon. Das Blöde ist, daß an der Stelle, an der der Fehler auftritt überhaupt kein Code ist. Ich habe die Funktionalität der Forms durch die Properties geregelt, so daß das Insert durch Access durchgeführt wird. Im gesamten Code habe ich nie mit einem Requery gearbeitet.

Ich habe das Formular kopiert und nur die Properties entsprechend angepaßt. An der einen Stelle funktioniert es wunderbar, an der anderen tritt immer dieser seltsame Fehler auf.

Grüße, Tanja

Hallo Tanja,

ein Requery kann auch indirekt aufgerufen werden - viele Ereignisse werden von Access oder Windows direkt „abgearbeitet“. Dann erscheint in der Aufruf-Liste eine Meldung á la „Nicht-Access-Code“. Das bedeutet dann z.B., daß eine der letzten Aktionen unsichtbaren Programmcode im Control selbst ausgelöst hat - was da geschieht, weiß nur der Programmierer dieser Zeilen…

Ich könnte mir z.B. vorstellen, daß Dein Problem mit den Formulareinstellungen zu tun hat - Sperrungen, Gültigkeitsregeln usw.
Ich würde den Programmcode wiederum Zeile für Zeile durchgehen und die Zeile IM PROGRAMMCODE herausfinden, die letztendlich den Datensatz verändert (einfach jedesmal in die Tabelle schauen) - dann hat man zumindest einen ersten Anhaltspunkt, wer der „Übeltäter“ ist!

Kurt
http://www.fortwaengler.de

P.S.: Wenn Du weitere Fragen hast, schicke sie mir doch gleich direkt, das geht schneller! Die Adresse hast Du ja…