Ein anderer Anwender hat den Datensatz geändert nachdem ...

8. März 2008 19:56

Hallo,

hab hier ein ziemliches Problem.

Folgendes habe ich programmiert:

Ein Tabelle mit einer Tabular-Form drüber. Kein Main-Subform-Konstrukt, nur eine Einfache Tab-Form.

Ein einem Feld der Tabelle wird im OnValidate-Trigger eine Funktionalität ausgelöst, um eine ganz andere Tabelle zu modifizieren.

In meiner Testdatenbank funktioniert das ganz tadellos. Die Testdatenbank ist eine Native Datenbank.

In unserer Produktiv-DB bekomme ich den Fehler:
Ein anderer Anwender hat den Datensatz für diese Tabelle geändert, nachdem er angezeigt wurde ....

Wobei der Tabelle in der Fehlermeldung nicht die Tabelle ist, die in der Tab-Form angezeigt wird, sondern die zweite Tabelle, die durch den OnValidate-Trigger modifiziert wird.

Unsere Produktiv-DB läuft auf einem SQL 2005 Server.

Ich kapiert dabei zwei Sachen nicht, warum hat der SQL Server ein Problem und der Native Server nicht?
Und warum kommt es zu dieser Fehlermeldung, wo doch der Record, der in der Meldung angemeckert wird, gar nicht in der Form angezeigt wird?

Bin verzweifelt und für jede Hilfe dankbar.

Gruß,
Rolf

8. März 2008 21:27

könnte zur laufzeit auf der Produktiv-DB ein anderer User auf den Datensatz zugegriffen haben?
ZUm anderen sollte man zum testen nach möglichkeit auch immer die gleiche Art von Datenbank wie die der Produktiv-DB verwenden, um die in einigen Punkten unterschiedliche Verhaltensweise nicht zu Verwirrungen führen zu lassen. Du kannst Dir von einer Nav5-CD den SQL2005 auf deinem Arbeitsplatz installieren lassen, den kannst du dann mit deinem Client genauso ansprechen wie den Produktivserver. Wenn du bereits einen SQL2000MSDE von deiner Nav4 Installation drauf hast, könntest du ihn ggf auch verwenden, der kann allerdings maximal 2GB Datenbanken.

8. März 2008 22:55

zu erstens: nein, dass der Fehler durch den Zugriff von anderen Usern verursacht wird, kann ich ausschließen.

Unsere Produktiv-DB ist ca. 200 GB groß.
Daraus ein SQL-Testsystem zu machen, ist nicht ganz so einfach, steht aber für mitte des Jahres auf der To Do Liste.

Nur für den Moment kann ich so auf die Schnelle kein SQL-Testsystem zaubern, dass entsprechende Testdaten enthält.

9. März 2008 05:05

greifst du über 2 verschiedene Recordvariablen auf diese andere tabelle zu?
Das könnte den Fehler verursachen, wenn die eine den Record ändert und die andere nicht neu holt bevor drauf zugegriffen wird. Da ist das Verhalten zwischen Nativ und SQL meines wissens nach unterschiedlich.

9. März 2008 10:40

Eigentlich verändere ich per VALIDATE ein Feld in der anderen Tabelle.
Der Validate-Trigger in der anderen Tabelle enthält viel Code, was aber bisher bei anderen Programmierungen noch nie ein Problem war.

Ich befürchte, ich muß den ganzen Code auseinander nehmen und analysieren.