HP 3000 Manuals

ORDERS Database Model Program [ TurboIMAGE/XL Database Management System Reference Manual ] MPE/iX 5.5 Documentation


TurboIMAGE/XL Database Management System Reference Manual

ORDERS Database Model Program 

Main Body of Program 

     BEGIN MAIN LINE

     *    OBJECTIVE:  The main line contains the logic of this application.
     *                It displays all functions, accepts a selection,
     *                then calls the appropriate routines.  The execution
     *                of this program stops after the database is closed.
     *
     *    ACCESS:     Not applicable.
     *
     *    CALLED BY:  Not applicable.
     *
     *    CALLS:      Open_The_Database
     *                Get_Sales_For_Date
     *                Get_A_Customer_Record
     *                Get_A_Product_Record
     *                List_All_Customers
     *                Add_A_Product
     *                Update_A_Customer
     *                Delete_A_Product
     *                Rewind_Customer_Set
     *                Get_Data_Item_Info
     *                Get_Error_And_Explain
     *                Close_The_Database

          START LOOP

               DISPLAY the list of functions

The following illustration depicts one way of displaying the list of
functions for this program.

	       Click here to view figure.
            

               OBTAIN option  <----  user input 

               If option = 1
                    Then CALL Open_The_Database
                        and RETURN

               If option = 2
                    Then CALL Get_Sales_For_Date
                         and RETURN

               If option = 3
                    Then CALL Get_A_Customer_Record
                         and RETURN

               If option = 4
                    Then CALL Get_A_Product_Record
                         and RETURN

               If option = 5
                    Then CALL List_All_Customers
                          and RETURN

               If option = 6
                    Then CALL Add_A_Product
                         and RETURN

               If option = 7
                    Then CALL Update_A_Customer
                         and RETURN

               If option = 8
                    Then CALL Delete_A_Product
                         and RETURN

               If option = 9
                    Then CALL Rewind_Customer_Set
                         and RETURN

               If option = 10
                    Then CALL Get_Data_Item_Info
                         and RETURN

               If option = 11
                    Then CALL Get_Error_And_Explain
                         and RETURN

               If option = 12
                    Then CALL Close_The_Database
                         and RETURN

               EXIT LOOP if option = 12

          END LOOP

     END MAIN LINE

Opening the Database 

     (USER SELECTS 1 TO OPEN THE DATABASE)

     ROUTINE:  Open_The_Database

     *    OBJECTIVE:  This routine opens the ORDERS database in mode 1
     *                for this application.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access (SMA) with locking required
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBOPEN in mode 1 (SMA)

     BEGIN ROUTINE

          OBTAIN DBname       <---- "__ORDERS;"
          OBTAIN Password     <---- "DO-ALL;"

          CALL DBOPEN (DBname, Password, Mode1_SMA, Status)

               ERROR CHECKING

     END ROUTINE

Retrieving All the Records on a Chain (with Item Level Locking) 

     (USER SELECTS 2 TO RETRIEVE SALES DATA)

     ROUTINE:  Get_Sales_For_Date

     *    OBJECTIVE:  This routine demonstrates chained access, forward chained
     *                read, and data item locking.
     *
     *                The routine retrieves all sales records generated
     *                on a particular purchase date.  The value for date is
     *                provided by the user and is used as the search item.
     *                Due to concurrency issues, a data item lock is acquired
     *                on all sales records identified by the date.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBLOCK in mode 5 (unconditional)
     *                DBFIND in mode 1 (chained access)
     *                DBGET in mode 5 (forward chained read)
     *                DBUNLOCK in mode 1 (unlock)

     BEGIN ROUTINE

          Sales_Buffer is made up of:
               Account
               Stock#
               Quantity
               Price
               Tax
               Total
               Purch-Date
               Deliv-Date

          Lock_Descriptor_Sales_Type is made up of:
               Length_Of_Descriptor
               Data_Set_Of_Descriptor
               Data_Item_Of_Descriptor
               Relative_Operator_For_Data_Item
               Value_For_Data_Item

          Lock_Descriptor_Sales_Array_Type is made up of:
               Number_Of_Elements
               Lock_Descriptor_Sales_Type

The following illustration shows the layout for a lock descriptor array
formats after the actual values have been assigned.  Note that the date
is stored in YYMMDD format.

	       Click here to view figure.
            

          OBTAIN Number_Of_Elements               <---- 1
          OBTAIN Length_Of_Descriptor             <---- 21
          OBTAIN Data_Set_Of_Descriptor           <---- "SALES;"
          OBTAIN Data_Item_Of_Descriptor          <---- "PURCH-DATE;"
          OBTAIN Relative_Operator_For_Data_Item  <---- "_="
          OBTAIN Value_For_Data_Item              <---- "881012"

          OBTAIN List                             <---- "@;"
          OBTAIN Search_Item_Name                 <---- "PURCH-DATE;"
          OBTAIN Search_Item_Value                <---- "881012"

          CALL DBLOCK (DBname, Lock_Descriptor_Sales_Array_Type,
               Mode5_Unconditional, Status)

               ERROR CHECKING

          CALL DBFIND (DBname, Sales_Detail, Mode1_Chained_Read,
               Status, Search_Item_Name, Search_Item_Value)

               ERROR CHECKING

          START LOOP

          CALL DBGET (DBname, Sales_Detail, Mode5_Forward, Status,
               List, Sales_Buffer, Not_Used_Parm)

               ERROR CHECKING

          DISPLAY the Sales_Buffer
          ____________________________________________________________________
          Account  Stock#  Quantity  Price  Tax  Total  Purch-Date  Deliv-Date

               EXIT LOOP if end of chain

          END LOOP

          CALL DBUNLOCK (DBname, Lock_Desc_Array, Mode1_Unlock, Status)

               ERROR CHECKING

     END ROUTINE

Retrieving a Data Entry Using a Record Number 

     (USER SELECTS 3 TO RETRIEVE CUSTOMER DATA)

     ROUTINE:  Get_A_Customer_Record

     *    OBJECTIVE:  This routine demonstrates directed access by retrieving
     *                a customer record with a known record number.  Note
     *                that the record number is first obtained using a DBGET
     *                call, which in this case is a calculated mode 7.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBGET in mode 7 (calculated read)
     *                DBGET in mode 4 (directed read)

     BEGIN ROUTINE

          Customer_Buffer is made up of:
               Account
               Last-Name
               First-Name
               Initial
               Street-Address
               City
               State
               Zip
               Credit-Rating

          OBTAIN List            <---- "@;"
          OBTAIN Key_Item_Value  <---- 315578

          CALL DBGET (DBname, Customer_Master, Mode7_Calculated, Status, List,
               Customer_Buffer, Key_Item_Value)

               ERROR CHECKING

          OBTAIN Record_Num <---- Status [element 3]

          CALL DBGET (DBname, Customer_Master, Mode4_Directed, Status, List,
               Customer_Buffer, Record_Num)

               ERROR CHECKING

          DISPLAY the Customer_Buffer
          ____________________________________________________________________
          Account  Last-Name  First-Name  Initial  Street-Address  City. . .

     END ROUTINE

Retrieving Master Data Using a Key Value 

     (USER SELECTS 4 TO RETRIEVE PRODUCT DATA)

     ROUTINE:Get_A_Product_Record

     *    OBJECTIVE:  This routine demonstrates calculated access by
     *                retrieving a product record from a master data
     *                set based on a user-defined key item value.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBGET in mode 7 (calculated read)

     BEGIN ROUTINE

          Product_Buffer is made up of:
               Stock#
               Description

          OBTAIN List            <---- "@;"
          OBTAIN Key_Item_Value  <---- "STK30040"
          CALL DBGET (DBname, Product_Master, Mode7_Calculated, Status, List,
               Product_Buffer, Key_Item_Value)

               ERROR CHECKING

          DISPLAY the Product_Buffer
          ____________________________________________________________________
          Stock#  Description

     END ROUTINE

Retrieving Data Serially (with Set Level Locking) 

     (USER SELECTS 5 TO RETRIEVE CUSTOMER DATA)

     ROUTINE:  List_All_Customers

     *    OBJECTIVE:  This routine demonstrates serial access by listing
     *                all customer records.  For the sake of consistency,
     *                the data set is locked for exclusive access,
     *                then the data is read serially.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBLOCK in mode 3 (unconditional)
     *                DBGET in mode 2 (forward read)
     *                DBUNLOCK in mode 1 (unlock)

     BEGIN ROUTINE

          Customer_Buffer is made up of:
               Account
               Last-Name
               First-Name
               Initial
               Street-Address
               City
               State
               Zip
               Credit-Rating

          CALL DBLOCK (DBname, Customer_Master, Mode3_Unconditional, Status)

               ERROR CHECKING

          OBTAIN List  <---- "Account, Last-Name, First-Name, Initial;"

          START LOOP

          CALL DBGET (DBname, Customer_Master, Mode2_Forward, Status, List,
               Customer_Buffer, Not_Used_Parm)

               ERROR CHECKING

          DISPLAY List
          ____________________________________________________________________
          Account  Last-Name  First-Name  Initial

               EXIT LOOP if first word of Status buffer <> 0

          END LOOP

          CALL DBUNLOCK (DBname, Customer_Master, Mode1_Unlock, Status)

               ERROR CHECKING

     END ROUTINE

Adding an Entry 

     (USER SELECTS 6 TO DO A PUT)

     ROUTINE:  Add_A_Product

     *    OBJECTIVE:  This routine adds one entry to the Product master data
     *                set.  After obtaining user input, the data set is locked
     *                for exclusive access.  A transaction starts, and
     *                new values are added by a call to DBPUT.  At the end
     *                of the routine, the transaction is ended and locks
     *                are released.
     *
     *    ACCESS:     Mode 1 - Shared Modify Access
     *
     *    CALLED BY:  Main Line
     *
     *    CALLS:      DBLOCK in mode 3 (unconditional)
     *                DBBEGIN in mode 1 (transaction begin)
     *                DBPUT in mode 1 (put)
     *                DBEND in mode 1 (transaction end)
     *                DBUNLOCK in mode 1 (unlock)

     BEGIN ROUTINE

          Product_Buffer is made up of:
              Stock#
              Description

          OBTAIN Stock#       <---- user input 
          OBTAIN Description  <---- user input 
          OBTAIN List         <---- "@;"

          CALL DBLOCK (DBname, Product_Master, Mode3_Unconditional, Status)

              ERROR CHECKING

          OBTAIN Text     <---- "Add entry to Product set Begin__"
          OBTAIN Textlen  <---- 16

          CALL DBBEGIN (DBname, Text, Mode1_Xbegin, Status, TextLen)

               ERROR CHECKING

          CALL DBPUT (DBname, Product_Master, Mode1_Put, Status, List,
          Product_Buffer)

               ERROR CHECKING

          OBTAIN Text     <---- "Add entry to Product set End"
          OBTAIN Textlen  <---- 14

          CALL DBEND (DBname, Text, Mode1_Xend, Status, Textlen)

              ERROR CHECKING
          CALL DBUNLOCK (DBname, Product_Master, Mode1_Unlock, Status)

              ERROR CHECKING

     END ROUTINE



MPE/iX 5.5 Documentation