home *** CD-ROM | disk | FTP | other *** search
- 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.
-