HP 3000 Manuals

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


TurboIMAGE/XL Database Management System Reference Manual

ORDERS Database Model Program (Continued) 

COBOL II (Continued) 

Opening the Database.   

This paragraph implements the OPEN-THE-DATABASE routine of the sample
program in COBOL II. All required values, such as the password, are
provided by the routine.  Note that the password DO-ALL establishes user
class number 18.  The password DO-ALL is followed by a semicolon because
it is less than eight characters long; a blank can be substituted for the
semicolon.  OPEN-THE-DATABASE uses open mode 1, which is the shared
modify access mode.  Error trapping is done by referring all non-zero
conditions to paragraph 1100-GET-ERROR-AND-EXPLAIN.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access (SMA) with locking required
           *
           * Called By:  30-DO-ACTION
           *
           * Calls    :  DBOPEN in mode 1 (SMA)
           *             1100-GET-ERROR-AND-EXPLAIN

            100-OPEN-THE-DATABASE.
                MOVE SPACES TO BASEID
                MOVE "ORDERS" TO BASENAME
                MOVE ";" TO TERMINATOR
                MOVE "DO-ALL;" TO PASSWORD
                MOVE 1 TO DB-MODE
                CALL "DBOPEN" USING DBNAME, PASSWORD, DB-MODE, STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF.

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

This paragraph implements the GET-SALES-FOR-DATE routine of the sample
program.  Chain access is achieved using a call to DBFIND to determine
the location of the first and last entries in the chain.  The search item
used for this call is PURCH-DATE. An item level lock is obtained on the
value of the search item before the DBFIND call.  After that, individual
chain items are retrieved, until the end of the chain is encountered.
This is done using multiple calls to the DBGET procedure.

The routine traps two exceptional conditions:

   1.  Status condition 17 from the DBFIND call, indicating that the
       chain head cannot be located.

   2.  Status 15 from the DBGET call, indicating the end of the chain.

The status interpretation routine permits you to either abort or continue
with the execution after viewing all error messages.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access
           *
           * Called By:  30-DO-ACTION
           *
           * Calls    :  DBLOCK in mode 5 (unconditional item level locking)
           *             DBFIND in mode 1 (chained access)
           *             DBGET  in mode 5 (forward chained read)
           *             DBUNLOCK in mode 1 (unlock)
           *             1100-GET-ERROR-AND-EXPLAIN

            200-GET-SALES-FOR-DATE.
                MOVE 1 TO NUM-OF-ELEMENTS
                MOVE 21 TO LENGTH-OF-DESCRIPTOR
                MOVE "SALES;" TO DATA-SET-OF-DESCRIPTOR
                MOVE "PURCH-DATE;" TO DATA-ITEM-OF-DESCRIPTOR
                MOVE " =" TO RELOP-FOR-DATA-ITEM
                DISPLAY CLEAR SCREEN
                DISPLAY "   Enter The Date of Purchase as (YYMMDD) >>> "
                        NO ADVANCING
                ACCEPT SEARCH-ITEM-VALUE FREE
                MOVE 5 TO DB-MODE
                MOVE SEARCH-ITEM-VALUE TO VALUE-FOR-DATA-ITEM
                CALL "DBLOCK" USING DBNAME, LOCK-DESCRIPTOR-ARRAY, DB-MODE,
                                    STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF
                MOVE "SALES;" TO SALES-DETAIL
                MOVE 1 TO DB-MODE
                MOVE "PURCH-DATE;" TO SEARCH-ITEM-NAME
                CALL "DBFIND" USING DBNAME, SALES-DETAIL, DB-MODE, STATUS1,
                                    SEARCH-ITEM-NAME, SEARCH-ITEM-VALUE
                IF CONDITION = 0 THEN
                    SET FOUND TO TRUE
                ELSE
                    SET NOT-FOUND TO TRUE
                    IF CONDITION = NO-CHAIN-HEAD THEN
                        DISPLAY CLEAR SCREEN
                        DISPLAY "****************************************"
                        DISPLAY "* No Such Entry in the Sales Data Set. *"
                        DISPLAY "* Please Try Again.                    *"
                        DISPLAY "****************************************"
                        DISPLAY "Press Enter to Continue -------------->"
                                NO ADVANCING
                        ACCEPT OPTION FREE
                    ELSE
                        PERFORM 1100-GET-ERROR-AND-EXPLAIN
                    END-IF
                END-IF

                IF FOUND THEN
                    DISPLAY CLEAR SCREEN
                    DISPLAY SALES-BUFFER-HEADER
                    DISPLAY LINE-HEADER
                    PERFORM WITH TEST BEFORE UNTIL CONDITION = END-OF-CHAIN
                        MOVE 5 TO DB-MODE
                        MOVE "@;" TO LIST
                        CALL "DBGET" USING DBNAME, SALES-DETAIL, DB-MODE,
                                           STATUS1, LIST, SALES-BUFFER,
                                           NOT-USED-PARM-16
                        IF CONDITION NOT = 0 THEN
                            IF CONDITION = END-OF-CHAIN THEN
                               DISPLAY SPACE
                               DISPLAY SPACE
                               DISPLAY SPACE
                               DISPLAY "-----> End of Chain, " NO ADVANCING
                               DISPLAY "Hit Enter to Continue" NO ADVANCING
                               ACCEPT OPTION FREE
                            ELSE
                                PERFORM 1100-GET-ERROR-AND-EXPLAIN
                            END-IF
                        END-IF

                        MOVE ACCOUNT-NUMBER OF SALES-BUFFER
                                 TO ACCOUNT-NUMBER-OUT
                        MOVE STOCK-NUMBER OF SALES-BUFFER
                                 TO STOCK-NUMBER-OUT
                        MOVE QUANTITY OF SALES-BUFFER TO QUANTITY-OUT
                        MOVE PRICE OF SALES-BUFFER TO PRICE-OUT
                        MOVE TAX OF SALES-BUFFER TO TAX-OUT
                        MOVE TOTAL OF SALES-BUFFER TO TOTAL-OUT
                        MOVE PURCH-DATE OF SALES-BUFFER TO PURCH-DATE-OUT
                        MOVE DELIV-DATE OF SALES-BUFFER TO DELIV-DATE-OUT
                        DISPLAY SALES-BUFFER-OUT
                    END-PERFORM
                END-IF

                MOVE 1 TO DB-MODE
                CALL "DBUNLOCK" USING DBNAME, SALES-DETAIL, DB-MODE, STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF.

Retrieving a Data Entry Using a Record Number.   

This paragraph implements the GET-A-CUSTOMER-RECORD routine of the sample
program.  The record number for the directed read is obtained by calling
DBGET in mode 7.  The saved record number is then used as the argument
value for a call to DBGET in mode 4.  Status 17 indicates two different
conditions for DBGET in modes 4 and 7, as follows:

   1.  For mode 7, this value means that no entry exists with the
       specified search value.

   2.  For mode 4, this value means that the entry at the specified
       record number is empty.

Note that for increased performance, the calculated access call is made
with a list parameter equal to zero.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access
           *
           * Called By:  30-DO-ACTION
           *
           * Calls    :  DBGET in mode 7 (calculated read)
           *             DBGET in mode 4 (directed read)
           *             1100-GET-ERROR-AND-EXPLAIN

            300-GET-A-CUSTOMER-RECORD.
                SET NOT-FOUND TO TRUE
                DISPLAY CLEAR SCREEN
                DISPLAY "Enter the Account # For The Customer Master"
                        NO ADVANCING
                DISPLAY "------------> " NO ADVANCING
                ACCEPT KEY-ITEM-VALUE FREE
                MOVE 7 TO DB-MODE
                MOVE ZERO TO LIST-NO-ITEM
                MOVE "@;" TO LIST
                MOVE "CUSTOMER;" TO CUSTOMER-MASTER
                CALL "DBGET" USING DBNAME, CUSTOMER-MASTER, DB-MODE, STATUS1,
                                   LIST-NO-ITEM, CUSTOMER-BUFFER,
                                   KEY-ITEM-VALUE
                IF CONDITION = 0 THEN
                    SET FOUND TO TRUE
                    MOVE RECORD-NUMBER TO SAVED-RECORD-NUMBER
                ELSE
                    IF CONDITION = NO-SUCH-ENTRY THEN
                        DISPLAY CLEAR SCREEN
                        DISPLAY "*****************************************"
                        DISPLAY "* No Such Entry in the Customer Data Set."
                        DISPLAY "* Please Try Again.                      "
                        DISPLAY "*****************************************"
                        DISPLAY "Press Enter to Continue ------------>"
                                NO ADVANCING
                        ACCEPT OPTION FREE
                    ELSE
                        PERFORM 1100-GET-ERROR-AND-EXPLAIN
                    END-IF
                END-IF

                IF FOUND THEN
                    MOVE 4 TO DB-MODE
                    MOVE "@;" TO LIST
                    MOVE "CUSTOMER;" TO CUSTOMER-MASTER
                    CALL "DBGET" USING DBNAME, CUSTOMER-MASTER, DB-MODE,
                                       STATUS1, LIST, CUSTOMER-BUFFER,
                                       SAVED-RECORD-NUMBER
                    IF CONDITION NOT = 0 THEN
                        IF CONDITION = ENTRY-HAS-NO-DATA THEN
                            DISPLAY CLEAR SCREEN
                            DISPLAY "***************************************"
                            DISPLAY "* Entry At The Specified Record Number "
                            DISPLAY "* Has Been Deleted.                    "
                            DISPLAY "***************************************"
                            DISPLAY "Press Enter To Continue ------------->"
                                    NO ADVANCING
                            ACCEPT OPTION FREE
                        ELSE
                            PERFORM 1100-GET-ERROR-AND-EXPLAIN
                        END-IF
                    ELSE
                        DISPLAY SPACE
                        DISPLAY SPACE
                        DISPLAY SPACE
                        DISPLAY SPACE
                        DISPLAY SPACE
                        DISPLAY SPACE
                        MOVE KEY-ITEM-VALUE TO ACCOUNT-NUMBER-CUST-OUT
                        DISPLAY "Data On Account# = ",
                                ACCOUNT-NUMBER-CUST-OUT
                        DISPLAY "****************************************"
                        DISPLAY "*                                      *"
                        MOVE ACCOUNT-NUMBER OF CUSTOMER-BUFFER TO
                             ACCOUNT-NUMBER-CUST-OUT
                        DISPLAY "* Account #  = ", ACCOUNT-NUMBER-CUST-OUT
                        DISPLAY "* Last Name  = ", LAST-NAME
                                                   OF CUSTOMER-BUFFER
                        DISPLAY "* First Name = ", FIRST-NAME
                                                   OF CUSTOMER-BUFFER
                        DISPLAY "* Initial    = ", INITIAL1
                                                   OF CUSTOMER-BUFFER
                        DISPLAY "* Address    = ", STREET-ADDRESS
                                                   OF CUSTOMER-BUFFER
                        DISPLAY "* City       = ", CITY OF CUSTOMER-BUFFER
                        DISPLAY "* State      = ", STATE OF CUSTOMER-BUFFER
                        DISPLAY "* Zip        = ", ZIP OF CUSTOMER-BUFFER
                        DISPLAY "*                                      *"
                        DISPLAY "****************************************"
                        DISPLAY SPACE
                        DISPLAY SPACE
                        DISPLAY "Press Enter to Continue ------------------>"
                                NO ADVANCING
                        ACCEPT OPTION FREE
                    END-IF
                END-IF.

Retrieving Master Data Using a Key Value.   

This paragraph implements the GET-PRODUCT-RECORD routine of the sample
program.  The calculated access is achieved by a call to DBGET in mode 7.
The exceptional condition in this routine is indicated by status 17 for
search values which do not have any corresponding entries.  Error
trapping calls 1100-GET-ERROR-AND-EXPLAIN upon detection of a
non-exceptional condition.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access
           *
           * Called By:  30-DO-ACTION
           *
           * Calls    :  DBGET in mode 7 (calculated read)
           *             1100-GET-ERROR-AND-EXPLAIN

            400-GET-PRODUCT-RECORD.
                SET NOT-FOUND TO TRUE
                DISPLAY CLEAR SCREEN
                DISPLAY "Enter the Stock # in the Product Master ----->"
                    NO ADVANCING
                ACCEPT KEY-ITEM-VALUE-PRODUCT FREE
                MOVE 7 TO DB-MODE
                MOVE "@;" TO LIST
                MOVE "PRODUCT;" TO PRODUCT-MASTER
                CALL "DBGET" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1,
                                   LIST, PRODUCT-BUFFER,
                                   KEY-ITEM-VALUE-PRODUCT
                IF CONDITION = 0 THEN
                    SET FOUND TO TRUE
                ELSE
                    SET NOT-FOUND TO TRUE
                    IF CONDITION = NO-CHAIN-HEAD THEN
                        DISPLAY CLEAR SCREEN
                        DISPLAY "****************************************"
                        DISPLAY "* No Such Entry in the Product Data Set."
                        DISPLAY "* Please Try Again.                     "
                        DISPLAY "****************************************"
                        DISPLAY "Press Enter To Continue ------------->"
                                 NO ADVANCING
                        ACCEPT OPTION FREE
                    ELSE
                        PERFORM 1100-GET-ERROR-AND-EXPLAIN
                    END-IF
                END-IF

                IF FOUND THEN
                    DISPLAY SPACE
                    DISPLAY "Data On Stock # = ", KEY-ITEM-VALUE-PRODUCT
                    DISPLAY "**********************************************"
                    DISPLAY "*                                            *"
                    DISPLAY "* Stock # = ", STOCK-NUMBER OF PRODUCT-BUFFER
                    DISPLAY "* Product = ", DESCRIPTION OF PRODUCT-BUFFER
                    DISPLAY "*                                            *"
                    DISPLAY "**********************************************"
                    DISPLAY SPACE
                    DISPLAY SPACE
                    DISPLAY "Press Enter To Continue ------------->"
                            NO ADVANCING
                    ACCEPT OPTION FREE
                END-IF.

Retrieving Data Serially (with Set Level Locking).   

This paragraph implements the LIST-ALL-CUSTOMERS routine of the sample
program.  Serial read of the Customer data set is achieved using multiple
calls to the DBGET procedure in mode 2.  Using the list parameter the
routine requests only the ACCOUNT, FIRST-NAME, LAST-NAME, and INITIAL
data items.

This procedure locks the Customer data set exclusively using a call to
the DBLOCK procedure in mode 3.  The subsequent DBUNLOCK releases this
lock.  This is done when the exceptional condition, end of data set, is
encountered.  Locking in a shared modify access environment guarantees
that no other user is modifying the data that you are reading.  Error
trapping calls 1100-GET-ERROR-AND-EXPLAIN for any non-exceptional
condition codes.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access
           *
           * Called By:  30-DO-ACTION
           *
           * Calls    :  DBLOCK in mode 3 (unconditional)
           *             DBGET in mode 2 (forward read)
           *             DBUNLOCK in mode 1 (unlock)
           *             1100-GET-ERROR-AND-EXPLAIN

            500-LIST-ALL-CUSTOMERS.
                DISPLAY CLEAR SCREEN
                DISPLAY SPACE
                DISPLAY "Acct-Number        N A M E"
                DISPLAY "-------------------------------------------"

                SET NOT-DONE TO TRUE
                MOVE 3 TO DB-MODE
                MOVE "@;" TO LIST
                MOVE "CUSTOMER;" TO CUSTOMER-MASTER
                CALL "DBLOCK" USING DBNAME, CUSTOMER-MASTER, DB-MODE, STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF
                MOVE 2 TO DB-MODE
                MOVE "ACCOUNT,LAST-NAME,FIRST-NAME,INITIAL;" TO LIST

                PERFORM WITH TEST AFTER UNTIL DONE
                    CALL "DBGET" USING DBNAME, CUSTOMER-MASTER, DB-MODE,
                                       STATUS1, LIST, CUSTOMER-BUFFER,
                                       NOT-USED-PARM-32
                    IF CONDITION NOT = 0 THEN
                        IF CONDITION = END-OF-DATA-SET THEN
                            SET DONE TO TRUE
                            DISPLAY SPACE
                            DISPLAY "*End of Data Set"
                            DISPLAY "* Press Enter to Continue ------->"
                                    NO ADVANCING
                            ACCEPT OPTION FREE
                        ELSE
                            PERFORM 1100-GET-ERROR-AND-EXPLAIN
                        END-IF
                    ELSE
                        MOVE ACCOUNT-NUMBER OF CUSTOMER-BUFFER TO
                             ACCOUNT-NUMBER-CUST-OUT
                        MOVE FIRST-NAME OF CUSTOMER-BUFFER TO
                             FIRST-NAME-CUST-OUT
                        MOVE INITIAL1 OF CUSTOMER-BUFFER TO
                             INITIAL1-CUST-OUT
                        MOVE LAST-NAME OF CUSTOMER-BUFFER TO
                             LAST-NAME-CUST-OUT
                        DISPLAY CUSTOMER-BUFFER-OUT
                    END-IF
                END-PERFORM
                MOVE 1 TO DB-MODE
                CALL "DBUNLOCK" USING DBNAME, CUSTOMER-MASTER, DB-MODE,
                                      STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF.

Adding an Entry.   

This paragraph implements the ADD-A-PRODUCT routine of the sample program
to add a data entry to the Product manual master data set.  The add entry
operation is achieved using a call to DBPUT. Before this call, the
paragraph initiates a TurboIMAGE/XL transaction and locks the product
master data set.  The beginning and end of the transaction are indicated
by calls to DBBEGIN and DBEND. Locking is done exclusively at the set
level.  For error trapping, 1100-GET-ERROR-AND-EXPLAIN is called when any
status code is not equal to zero.

Note that the list contains an at-sign (@) which requests TurboIMAGE/XL
to return all fields of the data set in the order defined in the schema.
Other valid lists are the null list ('0;') which returns no data, and
same list ('*;') which returns the same fields listed in the previous
call.

           ******************************************************************
           * ACCESS   :  Mode 1 - Shared Modify Access
           *
           * Called By:  30-DO-ACTION
           *
           * 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)
           *             1100-GET-ERROR-AND-EXPLAIN

            600-ADD-A-PRODUCT.
                MOVE 0 TO ANSWER
                PERFORM WITH TEST BEFORE UNTIL ANSWER = 1
                    DISPLAY CLEAR SCREEN
                    DISPLAY "   Please Provide the Following Values  "
                    DISPLAY "****************************************"
                    DISPLAY "*                                      *"
                    DISPLAY "* Stock # = "  NO ADVANCING
                    ACCEPT STOCK-NUMBER OF PRODUCT-BUFFER FREE
                    DISPLAY "* Product = "  NO ADVANCING
                    ACCEPT DESCRIPTION OF PRODUCT-BUFFER FREE
                    DISPLAY "*                                      *"
                    DISPLAY "****************************************"
                    DISPLAY SPACE
                    DISPLAY SPACE
                    DISPLAY "Enter, <1> to Continue,  <2> to Retry >"
                            NO ADVANCING
                    ACCEPT ANSWER FREE
                END-PERFORM

                MOVE "PRODUCT;" TO PRODUCT-MASTER
                MOVE 3 TO DB-MODE
                CALL "DBLOCK" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF

                MOVE "Add Entry to Product Set Begin" TO TEXT1
                MOVE 16 TO TEXTLEN
                MOVE 1 TO DB-MODE
                CALL "DBBEGIN" USING DBNAME, TEXT1, DB-MODE, STATUS1, TEXTLEN
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF

                MOVE "@;" TO LIST
                CALL "DBPUT" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1,
                                   LIST, PRODUCT-BUFFER
                IF CONDITION = 0 THEN
                    DISPLAY SPACE
                    DISPLAY SPACE
                    DISPLAY SPACE
                    DISPLAY "*************************************"
                    DISPLAY "Stock ", STOCK-NUMBER OF PRODUCT-BUFFER,
                            "Was Successfully Added to the Product Set"
                    DISPLAY "*************************************"
                    DISPLAY "Enter to Continue ..............>"
                            NO ADVANCING
                    ACCEPT OPTION FREE
                ELSE
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF
                MOVE "Add Entry to Product Set End" TO TEXT1
                MOVE 14 TO TEXTLEN
                CALL "DBEND" USING DBNAME, TEXT1, DB-MODE, STATUS1, TEXTLEN
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF
                CALL "DBUNLOCK" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1
                IF CONDITION NOT = 0 THEN
                    PERFORM 1100-GET-ERROR-AND-EXPLAIN
                END-IF.



MPE/iX 5.5 Documentation