Program TstLRL; { Example for the nwLock unit / NwTP 0.6 API. (c) 1993,1995, R.Spronk } { Tests the following nwLock calls: (Logical Record Locking) LogLocalRecord LockLogicalrecordSet ReleaseLogicalRecord ClearLogicalRecordSet } Uses nwLock; { using this unit will automatically set the locmode to 1 } Var RecordName:string; TimeOutTicks:word; begin TimeOutTicks:=360; {wait 20 seconds before locking process times out} writeln('TSTLRL: Test of logical record locking.'); writeln(' -Start the exe on 2 or more workstations & enjoy the effect.'); writeln; writeln('Suppose we want to perform a transaction on a file, where:'); writeln('-we want to update (read&write) Records # 123, 678 and 056.'); writeln; writeln('To do this, this program uses logical record locking in the following manner:'); writeln('-It locks records #123,678 and 056 in Exclusive mode.'); writeln(' (denying all attempts at locking by other stations.'); { Put the names of records-to-be-EXCLUSIVELY-locked in the 'logged record set' } RecordName:='#123'; IF NOT LogLogicalRecord(RecordName,LD_LOG,0) then writeln('LogRecord failed. Error# ',nwLock.result); { Note: The recordnames used have no linkage whatsover with physical records. They form a logical representation of a physical record. All processes involved in locking processes on the same data must use the same naming convention } RecordName:='#678'; IF NOT LogLogicalRecord(RecordName,LD_LOG,0) then writeln('LogRecord failed. Error# ',nwLock.result); RecordName:='#056'; IF NOT LogLogicalRecord(RecordName,LD_LOG,0) then writeln('LogRecord failed. Error# ',nwLock.result); { Lock all records that are currently stored in the 'logged record set' } writeln('Attempting to place locks on records.. '); IF NOT LockLogicalRecordSet(LD_LOCK,TimeoutTicks) then writeln('LockLogicalRecordSet (after TimeOut=20 sec) failed. Error# ',nwLock.result); if nwlock.result=0 { locking of records was successful } then begin { ---Update records, change records, etc.--- } { Readln to simulate update } writeln('Now ''processing'' locked records. Press RETURN to release locks.'); readln; { Suppose we're done with record #123, but still need the other record -unlock 1 record; keep record in log } IF NOT ReleaseLogicalRecord('#123') then writeln('ReleaseLogicalRecord Failed. Error# ',nwLock.result); writeln('Now ''processing'' still locked records'); end; { unlock all records; clear 'logged record set' } IF NOT ClearLogicalRecordSet then writeln('ClearLogicalRecordSet Failed. Error# ',nwLock.result); end.