Announcement

Collapse
No announcement yet.

Exclusiver Zugriff für Nummernvergabe -> Dringend

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exclusiver Zugriff für Nummernvergabe -> Dringend

    Hallo, ich hab da mal noch ne Frage!

    Wie kann ich bei MS Access 97 eine Tabelle Exclusiv sperren.
    Es darf immer nur ein Arbeitsplatz auf die Tabelle zugreifen.
    Wenn ich das über die Eingenschaft "Exclusive" eines TTables mache bringt das gar nix. Bei einem Query hab ich noch nicht mal den Hauch einer Ahnung wie ich das realisieren sollte.

    Falls ich keinen exclusiven Zugriff verwenden kann, wie kann ich dann realisieren das eine Nummer nur einmal vergeben wird.
    Zur Erklärung:

    Es gibt eine Tabelle in der laufende Nummern verwaltet werden. Nun kann es passieren, wenn 2 oder mehr Benutzer arbeiten, da ein zeitgleicher ZUgriff auf die Tabelle erfolgt. In diesem Fall vergibt Access die Nummer doppelt, was unter keinen Umständen passieren darf! Wie kann ich das lösen???

    Brauche dringenst eine Lösung

    Tschau Mathias

  • #2
    Hi Mathias,

    Normalerweise sollte es ausreichen den Datensatz mit TTabel. Edit zu sperren. Dies sollte ausreichen, damit jeder weitere Versuch diesen Datensatz zum Schreiben zu öffnen fehlschlägt. Wenn du also in deiner Routine, die die Nummer ermittelt erst Edit aufrufst und danach die Nummer ausliest, um eins erhöhst und den neuen Wert mit Post wieder speicherst, dann dürfte es zu keiner doppelten Vergabe kommen.
    Das Konstrukt aus Edit...Abfrage...Neusetzen...Post solltest du in try...except packen und in einer Schleife mehrfach versuchen, damit für den Fall der Fälle nicht sofort eine Exception ausgelöst wird, z.B:<pre>
    ...
    I := 0;
    Succes := False;
    while (I<100) and (not Succes) do
    begin
    try
    Table1.Edit;
    NeueNummer := Tabel1Nummer.AsInteger + 1;
    Tabel1Nummer.AsInteger := NeueNummer;
    Table1.Post;
    Succes := True;
    except
    Inc(I);
    if I > 100 then raise;
    end;
    ...

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hallo,
      das hatte ich auch zuerst gedacht. Es funktioniert aber nur wenn man mit Table Objekten arbeitet. Sowie ein Query auf die Tabelle zugreift wird die Sperrung irgendwie aufgehoben. Zumindest bekomme ich nach einem Zugriff mit einem Query immer vollen Schreibzugriff auf die Tabelle, auch mit einem Table.

      Ich habe das jetzt so gelößt:

      Eine Prozedur wird aufgerufen. Darin wird die aktuelle Nummer ermittelt, um 1 erhöht und das Programm versucht zu schreiben. Wenn ein Indexfehler auftaucht wartet das Programm eine Sekunde. Dann erneut die Nummer ausgelesen, um 1 erhöht und es wird wieder versucht zu schreiben. Das solange bis es klappt.

      Ist zwar glaub ich etwas umständlich aber solange niemand eine bessere Idee hat..

      Comment

      Working...
      X