Deutsch English
Alphabetischer Index
Array-Funktionen
CGI-Funktionen
Datentypen
Datums/Uhrzeit-Funktionen
Debugging
Operatoren
Ramtext-Funktionen
Selektion
Socket-Funktionen
Sonstige-Funktionen
Sprachelemente
Statistik-Funktionen
Stream-Funktionen
String-Funktionen
System-Funktionen
Tabellen-Funktionen
  • access()
  • andmarks()
  • autofield()
  • autorecno()
  • blobsize()
  • blobtype()
  • cleardat()
  • closedb()
  • copyblob()
  • copymemo()
  • dbdir()
  • dbname()
  • dbno()
  • dbrights()
  • deldb()
  • delindex()
  • delmark()
  • delmarkedrecords()
  • delmarks()
  • delrec()
  • editoff()
  • editon()
  • embedblob()
  • exists()
  • fields()
  • filemode()
  • fileno()
  • filesize()
  • findandmark()
  • findauto()
  • findrec()
  • firstmark()
  • firstrec()
  • flushdb()
  • fsum()
  • genindex()
  • getcode()
  • getdef()
  • getfield()
  • getmarks()
  • getmode()
  • getpw()
  • getrec()
  • getrfield()
  • getstructure()
  • gettype()
  • incrfield()
  • inddef()
  • indname()
  • indno()
  • ismark()
  • label()
  • labelno()
  • lastrec()
  • link()
  • linkblob()
  • linkinfo()
  • lock()
  • makedb()
  • markdoubles()
  • markindex()
  • markpattern()
  • maxfile()
  • maxlabel()
  • memolen()
  • memostr()
  • newtable()
  • nextmark()
  • nextrec()
  • nmarks()
  • opendb()
  • prevrec()
  • primfile()
  • primtable()
  • putmarks()
  • putrec()
  • readmemo()
  • readrec()
  • recno()
  • recno()
  • recnr()
  • regenall()
  • regenind()
  • relation()
  • rendb()
  • reopendb()
  • revmarks()
  • setalias()
  • setauto()
  • setfield()
  • setfields()
  • setfilter()
  • setmark()
  • setmarks()
  • setrecord()
  • setrfield()
  • sortmark()
  • treeinfo()
  • unlock()
  • writerec()
    Text-Funktionen
    Volltext-Funktionen
    Zahlen-Funktionen
    Home    Überblick    Suche    Impressum    Kontakt    Mitglieder
    Themenkomplex Tabellen-Funktionen
    Funktion lock()
    Kurz Tabellensperre einrichten
    Syntax LOCK(db : INTEGER; Sperre : INTEGER; Modus : INTEGER) : INTEGER
    Parameter db : Tabellenhandle

    Sperre:
    0 : Schreibsperre
    1 : Totalsperre

    Modus:
    0 : Sperre wird unbedingt eingerichtet; Programm wartet
    1 : Sperre wird eingerichtet, wenn möglich; Programm wartet nicht
    Ergebnis 1 : Sperre ist eingerichtet
    0 : Sperre ist nicht eingerichtet
    Siehe auch:
    unlock()
    Beschreibung

    Die Funktion Lock dient dem Setzen der elementaren Schreib- beziehungsweise Totalsperre. Lock sollte immer dann benutzt werden, wenn Zugriffe auf Datenbankdateien über mehrere einzelne prgs erfolgen, die ihrerseits wiederum Sperren setzen und wieder aufheben (z.B. WriteRec). Durch Lock ist es nun möglich, zu Beginn der komplexen Datenbankzugriffe einmal die erforderliche Sperre einzurichten, die prgs abzuarbeiten und die Sperre mit Unlock wieder aufzuheben. Dies bringt im Netz nicht nur eine erhöhte Sicherheit, sondern auch eine gesteigerte Performance.

    Hinweis: Jede erfolgreich eingerichtete Sperre muss mit Unlock wieder aufgehoben werden.

    Das folgende Beispiel zeigt bereits den Sinn von Lock.  Unter Umständen muß ein gesicherter Datensatz wieder gelesen werden. Im ungünstigsten Fall wird zwischen dem Sichern der Satznummer in nSaveRec und dem Zurücksetzen des Satzzeigers mit ReadRec(KUNDE, nSaveRec) der Datensatz von einem anderen prg entfernt.
    Somit wäre ein sicheres Lesen des alten Datensatzes gefährdet. Daher sollten solche Vorgänge immer von Lock und Unlock umgeben sein.


    Beispiel 1: Lock



    PROCEDURE FindName(cSuch: String): INTEGER;
    VAR nSaveRec, nret, KUNDE : INTEGER;
    	KUNDE:=OpenDB('kunde.dat');
    	Lock(KUNDE, 0);
    	nSaveRec := RecNo(KUNDE);
    	ReadRec(KUNDE, FINDREC(KUNDE, cSuch));
    	IF NOT GetField(KUNDE,'Nachname') LIKE cSuch
    		ReadRec(KUNDE, nSaveRec);
    	ELSE
    		nRet := 1;
    	END
    	UnLock(KUNDE, 0);
    	Return nRet
    ENDPROC;


    Beispiel 2: Lock 2



    IF Lock(ARTIKEL,1,1)
    	x:=FindRec(ARTIKEL,"12345","ARTIKEL.ID",1)
    	ReadRec(ARTIKEL,x)
    	SetRField(ARTIKEL,"Preis",GetRField(ARTIKEL,"Preis")*1.05)
    	WriteRec(ARTIKEL,x)
    	UnLock(ARTIKEL,1)
    ELSE
    	CGIWriteLn("Hinweis: ARTIKEL kann momentan nicht gesperrt werden")
    END


    Beispiel 3: Lock 3



    WHILE NOT Lock(ARTIKEL,1,1)
    	Pause(10)
    END
    
    ..Hier ist die Tabelle gesperrt
    
    x:=FindRec(ARTIKEL,"12345","ARTIKEL.ID",1)
    ReadRec(ARTIKEL,x)
    SetRField(ARTIKEL,"Preis",GetRField(ARTIKEL,"Preis")*1.05)
    WriteRec(ARTIKEL,x)
    Unlock(ARTIKEL)


    tdbengine chat
    irc.tdbengine.org
    #tdbengine

       Copyright © 2003-2004 tdb Software Service GmbH
       Alle rechte vorbehalten. / All rights reserved
       Letzte Änderung: 21.10.2004
    {Fehler für :execmacro{execmacro="sessionspy"}