Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Gulliver am 11.06.02 - 08:58:27
-
Hallo zusammen!
Was mache ich nur falsch ?
Ich möchte für Dokumente, die mit verschiedenen Masken erzeugt werden jeweils eine laufende Nummer führen. Wegen der möglichen Gleichzeitigkeit muß das Dokument mit den Counterfeldern gesperrt werden. In diversen Schriften habe ich diee Lock-Funktionen gefunden, aber leider klappt das nicht so recht. Ich habe den eindruck, dass jeder Client seine eigenen Lockobjecte erzeugt ???
Hier ist eines der zahlreichen Experimente
Sub Initialize
Dim LockNr As Integer
Dim DestNr As Integer
Dim CdLck As Variant
Dim UnLck As Integer
Msgbox "Achtung, jetzt wird die Locknummer created: CreateLock()"
LockNr = Createlock("lfdNummer")
Msgbox "Die erzeugte Nummer lautet " + Cstr(LockNr)
Msgbox "Achtung, jetzt wird die Locknummer reserviert: CreateLock()"
CdLck = Codelock(LockNr)
Msgbox "Ergebnis der Reservierung: " + Cstr(CdLck)
Msgbox "Achtung, jetzt wird die Locknummer freigegeben: CodeUnLock()"
UnLck = Codeunlock(LockNr)
Msgbox "Ergebnis der Freigabe: " + Cstr(UnLck)
Msgbox "Achtung, jetzt wird die Locknummer zertrört: destroylock()"
DestNr = Destroylock(LockNr)
Msgbox "Ergebnis von Destroy: " + Cstr(DestNr)
End Sub
Solange Agent auf dem ersten Client die LockNr nicht freigibt, müsste eigentlich bei den weiteren "false" von der Funktion CodeLock() zurück kommen.
... bin dankbar für jede Antwort :-[
-
Hi!
Ich hab mir ein zentrales Dok angelegt, in dem die lfd. Nr. liegt. Wenn nun ein neues Dok erstellt wird, wird auf dem QuerySave die Nummer geholt, um eins erhöht und eingefügt und gleich danach in das "zentrale" Dok. zurückgeschrieben...und so ist die wahrscheinlichkeit, dass zwei Doks die gleichen Nummer bekommen, rel. gering...
Wär des ne Möglichkeit?
Gruß,
Buzzy
-
Hallo Buzzy,
das funktioniert bei mir auch ganz gut, ich fürchte nur, dass bei sehr vielen Zugriffen in kurzer Zeit doch einmal die gleiche Nummer zweimal gelesen wird und das darf in dieser DB nicht passieren!
Aus diesem Grund suche ich nach einem funktionierenden "LM" siehe oben ;)
bis neulich!
-
'Declartions
Dim LockNr As Integer
Sub Initialize()
LockNr = Createlock("lfdNummer")
Call NummerHochzaehlen()
End Sub
Sub Terminate()
LockNr=Destroylock(LockNr)
End Sub
Sub NummerHochzaehlen()
Dim result As Variant
result=Codelock(LockNr)
While result = False
Sleep(5)
result=Codelock(LockNr)
Wend
'Setzen der laufenden Nummer
result=Codeunlock(lfdNummer)
End Sub
Gruß Christopher
-
Moin!
Hab ich schon genau so getestet, geht nicht! ???
.... hätte nicht gedacht, dass das was besonders ist ...