Hallo Leute!
Haben heute mal eine Test gemacht und es ist tatsächlich so, daß nach einer gewissen Anzahl an Änderung der
SQL-Server 2000 auf Tabellensperre umschaltet, obwohl ich vom Programm aus nur einzelne Datensätze sperre. Es ist z.B. so:
Zitat:
Master-Tabelle:
P1ST
___Details:
+-> P1STKL
+-> P1STMP
+-> P1STHA
Detail-Tabellen sind mit der Master über Foreign-Key verknüpft.
Auf einen Datensatz aus P1ST kommen 4 in P1STKL, 4 in P1STMP und einer in P1STHA. Die Datensätze wurde zuvor angelegt und erst bei der Vervollständigung (EDIT) passiert es das nach einer gewissen Anzahl bearbeiteter Datensätze die Tabelle P1STKL plötzlich komplett gesperrt ist und damit alle anderen Benutzer, welche in der gleichen Dialogformular arbeiten gesperrt sind bis es zum SQLTimeout kommt bzw. der sperrende Benutzer in seinem Formular auf Speichern klickt.
In der Dokumentation des MS
SQL-Server 2000 steht nun das die dynamische Sperrung automatisch unter gewissen Voraussetzungen die Sperre von Datensatz auf Datenseite auf Tabelle erweitert um Resource zu sparen. Hat die Version 6.5, welche wir früher im Einsatz hatten nicht gemacht.
Kann ich das irgendwie abschalten, darüber habe ich nämlich noch nichts gefunden, bzw. hat jemand evtl. ein andere Idee/Lösung?
Wie gesagt, im meinem Programm sage zu Beginn der Bearbeitung:
MyDatabaseObjekt.StartTransaction;
und beim Post (sofern die Transaktion offen ist)
MyDatabaseObjekt.Commit;
Da dürfte doch keine Sperre mehr offen sein.
[Edit]Noch vergessen! Vom meinem Programm her werden alle Benutzer unter dem gleichen
SQL-Benutzer angemeldet. Haben es aber auch schon mit unterschiedlichen
SQL-Benutzern getestet und da tritt die Blockade ebenfalls auf.[/Edit]
Gruß