DataBasic Reference > Programming in DataBasic > Programming Examples > Program Example Using Transactions

Comment on this topic

Documentation Comments

Use this form to comment on this topic. You can also provide any general observations about the Online Documentation, or request that additional information be added in a future release.

RealityV15.1Online Documentation (MoTW) Revision 7

Program Example Using Transaction Boundaries (DataBasic) (m618705+transaction.htm)

To

Reality

Version

Topic

Submitted by

Company

Location

Email address

Comment

 

 

Program Example Using Transaction Boundaries

This program illustrates the use of Transaction Handling in DataBasic and also illustrates the use of item locks.

    *VERSION 0001
    *****************************************************
    * This program demonstrates the use of the
    * Transaction Handling statements and also some of
    * the @(-n) functions.
    *****************************************************
    * Copyright 2000: Northgate Public Services (UK) Limited
    *****************************************************
    * Open all relevant files and do initialization
    *
    OPEN 'DATA1' TO DATA1 ELSE STOP 201, 'DATA1'
    OPEN 'DATA2' TO DATA2 ELSE STOP 201, 'DATA2'
    OPEN 'DATA3' TO DATA3 ELSE STOP 201, 'DATA3'
    KEY = ""
    RECORD = ""
    *****************************************************
10  * This is the start of the main transaction loop.
    * It requests an item-id from the user and then locks
    * that item in each of three files.  The program then
    * prompts the user to enter data for each of the
    * three files and updates the files as the data is
    * entered (instead of doing all the updates at the
    * end of the transaction). The user is allowed to
    * abort the transaction at any input field by
    * entering '/' which calls a transaction abort,
    * automatically rolling back all of the updates 
    * which have taken place and also releases all of
    * the locks previously set.
    *****************************************************
    *
    CRT @(-1):;                        * Clear the screen
    CRT @(10,5):"Enter record key ":; INPUT KEY
    CRT @(-13);                        * Clear Line 25
    IF KEY = '' OR KEY = '/' THEN CRT @(-1):; STOP
    TRANSTART THEN
      * 
      * The transaction is now in progress and the log
      * will contain a start entry for this port plus
      * the name of the program which started it.
      *
      READU RECORD FROM DATA1,KEY THEN
        CRT @(-13):"Item '":KEY:"' exists in file
        ...'DATA1'":@(-14):
        SLEEP 1
        GOTO 100 ;             * Abort the transaction
      END
      *
      READU RECORD FROM DATA2,KEY THEN
        CRT @(-13):"Item '":KEY:"' exists in file 
        ... 'DATA2'":@(-14):
        SLEEP 1
        GOTO 100 ;             * Abort the transaction
      END
      READU RECORD FROM DATA1,KEY THEN
        CRT @(-13):"Item '":KEY:"' exists in file 
        ... 'DATA1'":@(-14):
        SLEEP 1
        GOTO 100 ;             * Abort the transaction
      END
      *
      * All records are now locked and don't exist.
      *
      * Now get the data for each record and update them.
      ***************************************************
      CRT (10,8):"Enter data for Record 1":
      INPUT RECORD
      IF RECORD='/' THEN GOTO 100; * Transaction abort req.
      WRITE RECORD ON DATA1,KEY
      * File updated, but lock maintained until transaction end
      ***************************************************
      CRT (10,10):"Enter data for Record 2":
      INPUT RECORD
      IF RECORD='/' THEN GOTO 100; * Transaction abort req.
      WRITE RECORD ON DATA2,KEY
      * File updated, but lock maintained until transaction end
      ***************************************************
      CRT (10,12):"Enter data for Record 3":
      INPUT RECORD
      IF RECORD='/' THEN GOTO 100; * Transaction abort req.
      WRITE RECORD ON DATA3,KEY 
      * File updated, but lock maintained until transaction end
      ***************************************************
      *                                                 *
      * All inputs and updates are complete so 'commit' *
      * the transaction.                                *
      *                                                 *
      ***************************************************
      TRANSEND "Transaction completed - ITEM-ID ='":KEY:"'" THEN
        CRT @(-13):"Transaction accepted and logged -Item-Id = 
           ":... 
        "'":KEY:"'":@(-14)
        GOTO 10 ; * Start another transaction
      END ELSE
        *
        * The ELSE clause will be taken if...
        * 1. No TRANSTART statement has previously been executed.
        * 2. Transaction Logging has not been enabled.
        *
        GOTO 100; * Unable to commit the transaction so
        * attempt an abort.
      END
    END ELSE
      *
      * Unable to start a transaction so quit the 
      * program.  This ELSE clause will be taken if...
      * 1. A transaction is already in progress.
      * 2. Transaction Logging has not been enabled.
      *
      CRT @(-13):"Unable to start a new transaction - ":...
      "program cancelled":@(-14)
      STOP
    END
    *
100 * Transaction abort routine
    *
    * Abort the current transaction incorporating some 
    * text and the item-id into the transaction log.
    *
    TRANSABORT "Abort transaction - ID = '":KEY:"'" THEN
      *
      * Display a message on Line 25
      *
      CRT @(-13):"Your transaction has been aborted":@(-14)
      GOTO 10 ; * Prompt for a new transaction start.
      *
END ELSE
            * The ELSE clause will be taken if...
      * 1. No transaction command has been previously 
      * executed.
      * 2. Transaction Logging has not been enabled.
      *
      CRT @(-13):"Unable to abort the transaction.":(-14)
      ABORT; * Exit completely from all processing
    END
END

RealityV15.1 (MoTW) Revision 7Comment on this topic