ORDERS Database Model Program (contd.) [ TurboIMAGE/XL Database Management System Reference Manual ] MPE/iX 5.0 Documentation
TurboIMAGE/XL Database Management System Reference Manual
ORDERS Database Model Program (contd.)
Closing the Database (contd.)
COBOL II
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
progam. 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
conditon 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.
Updating an Entry
This paragraph implements the UPDATE-A-CUSTOMER routine of the sample
program. The update process takes place in two phases.
In the first phase, the requested entry is located and retrieved. This
is achieved by a call to DBGET in mode 7. Then, the user provides the
new values.
In the second phase, the recently modified values replace the existing
entry. This is implemented using a call to DBUPDATE. Before this call,
the paragraph starts a TurboIMAGE/XL transaction bracketed by calls for
locking the volatile item. To retrieve the entry, DBGET is called in
mode 1. This call retrieves the entry located in the previous stage.
The paragraph must confirm that values retrieved in the first stage are
still residing in the same entry. This should be done before the actual
update. If the contents of the buffers are the same, the paragraph can
continue with the operation. Otherwise, it should end the transaction
and release the locks.
The exceptional condition for this paragraph is status 17. This
indicates that the requested entry does not exist or is empty.
******************************************************************
* ACCESS : Mode 1 - Shared Modify Access
*
* Called By: 30-DO-ACTION
*
* Calls : DBGET in mode 7 (calculated)
* DBLOCK in mode 5 (unconditional)
* DBBEGIN in mode 1 (transaction begin)
* DBGET in mode 1 (re-read)
* DBUPDATE in mode 1 (update)
* DBEND in mode 1 (transaction end)
* DBUNLOCK in mode 1 (unlock)
* 1100-GET-ERROR-AND-EXPLAIN
700-UPDATE-A-CUSTOMER.
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 0 TO LIST-NO-ITEM
MOVE "@;" TO LIST
MOVE "CUSTOMER;" TO CUSTOMER-MASTER
CALL "DBGET" USING DBNAME, CUSTOMER-MASTER, DB-MODE, STATUS1,
LIST, CUSTOMER-BUFFER, KEY-ITEM-VALUE
IF CONDITION = 0 THEN
SET FOUND TO TRUE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY "Data On Account # = ", KEY-ITEM-VALUE
DISPLAY "****************************************"
DISPLAY "* *"
DISPLAY "* Account # = ", ACCOUNT-NUMBER
OF CUSTOMER-BUFFER
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
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 "Enter to Continue --------->" NO ADVANCING
ACCEPT ANSWER FREE
ELSE
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
END-IF
IF FOUND THEN
MOVE CORRESPONDING CUSTOMER-BUFFER TO CUSTOMER-BUFFER-OLD
MOVE 0 TO ANSWER
PERFORM WITH TEST BEFORE UNTIL ANSWER = 1
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY "Provide New Values For the Following"
DISPLAY "****************************************"
DISPLAY "* *"
DISPLAY "* Account # = " NO ADVANCING
ACCEPT ACCOUNT-NUMBER OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* Last Name = " NO ADVANCING
ACCEPT LAST-NAME OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* First Name = " NO ADVANCING
ACCEPT FIRST-NAME OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* Initial = " NO ADVANCING
ACCEPT INITIAL1 OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* Address = " NO ADVANCING
ACCEPT STREET-ADDRESS OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* City = " NO ADVANCING
ACCEPT CITY OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* State = " NO ADVANCING
ACCEPT STATE OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* Zip = " NO ADVANCING
ACCEPT ZIP OF CUSTOMER-BUFFER-NEW FREE
DISPLAY "* *"
DISPLAY "****************************************"
DISPLAY SPACE
DISPLAY SPACE
DISPLAY "Enter <1> to Continue, <2> to Retry >"
NO ADVANCING
ACCEPT ANSWER FREE
IF ANSWER = 2 THEN
DISPLAY CLEAR SCREEN
END-IF
END-PERFORM
MOVE 1 TO NUM-OF-ELEMENTS
MOVE 22 TO LENGTH-OF-DESCRIPTOR
MOVE "CUSTOMER;" TO DATA-SET-OF-DESCRIPTOR
MOVE "ACCOUNT;" TO DATA-ITEM-OF-DESCRIPTOR
MOVE " =" TO RELOP-FOR-DATA-ITEM
MOVE KEY-ITEM-VALUE TO NUM-VALUE-FOR-DATA-ITEM
MOVE 5 TO DB-MODE
CALL "DBLOCK" USING DBNAME, LOCK-DESCRIPTOR-ARRAY, DB-MODE,
STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
MOVE "Update Entry In Customer Set Begin" TO TEXT1
MOVE 17 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
CALL "DBGET" USING DBNAME, CUSTOMER-MASTER, DB-MODE,
STATUS1, LIST, CUSTOMER-BUFFER,
NOT-USED-PARM-32
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
ELSE
IF CUSTOMER-BUFFER = CUSTOMER-BUFFER-OLD THEN
CALL "DBUPDATE" USING DBNAME, CUSTOMER-MASTER,
DB-MODE, STATUS1, LIST,
CUSTOMER-BUFFER-NEW
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
ELSE
DISPLAY CLEAR SCREEN
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY "***************************************"
DISPLAY "** During Terminal Interaction *"
DISPLAY "** Data On Account Number ",
KEY-ITEM-VALUE
DISPLAY "** Has Been Modified."
DISPLAY "** *"
DISPLAY "** Please Try Again. *"
DISPLAY "Press Enter to Continue ---------->"
NO ADVANCING
ACCEPT OPTION FREE
END-IF
END-IF
MOVE "Udpate Entry On Customer Set End" TO TEXT1
MOVE 16 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, CUSTOMER-MASTER, DB-MODE,
STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
END-IF.
Deleting an Entry
This paragraph implements the DELETE-A-PRODUCT routine of the sample
program. The delete operation is achieved by a call to DBDELETE. This
call is preceded by a call to DBGET in mode 7, which locates the entry
for the delete operation. These calls are bracketed by calls to DBBEGIN
and DBEND, which designate the beginning and the end of a TurboIMAGE/XL
transaction.
Using calls to DBLOCK and DBUNLOCK in mode 3, the required resources are
locked before the start of the transaction and released after its end.
Exceptional condition code 17 is trapped after the DBGET call. This
indicates that the requested entry does not exist in the Product data
set.
******************************************************************
* ACCESS : Mode 1 - Shared Modify Access
*
* Called By: 30-DO-ACTION
*
* Calls : DBLOCK in mode 3 (unconditional)
* DBBEGIN in mode 1 (transaction begin)
* DBGET in mode 7 (calculated read)
* DBDELETE in mode 1 (delete)
* DBEND in mode 1 (transaction end)
* DBUNLOCK in mode 1 (unlock)
* 1100-GET-ERROR-AND-EXPLAIN
800-DELETE-A-PRODUCT.
DISPLAY CLEAR SCREEN
DISPLAY "Enter the stock # in the Product Master ----> "
NO ADVANCING
ACCEPT KEY-ITEM-VALUE-PRODUCT FREE
MOVE 3 TO DB-MODE
MOVE "@;" TO LIST
MOVE "PRODUCT;" TO PRODUCT-MASTER
CALL "DBLOCK" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
MOVE 1 TO DB-MODE
MOVE "Delete Entry From The Product Set Begin " TO TEXT1
MOVE 18 TO TEXTLEN
CALL "DBBEGIN" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1,
TEXTLEN
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
MOVE 7 TO DB-MODE
CALL "DBGET" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1,
LIST, PRODUCT-BUFFER,
KEY-ITEM-VALUE-PRODUCT
IF CONDITION NOT = 0 THEN
IF CONDITION = NO-CHAIN-HEAD THEN
DISPLAY CLEAR SCREEN
DISPLAY "*****************************************"
DISPLAY "* No Such Entry in the Product Data Set. *"
DISPLAY "* Please Try Again. *"
DISPLAY "*****************************************"
ELSE
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
ELSE
MOVE 1 TO DB-MODE
CALL "DBDELETE" USING DBNAME, PRODUCT-MASTER, DB-MODE,
STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
ELSE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY "*****************************************"
DISPLAY "Product Record ", KEY-ITEM-VALUE-PRODUCT
NO ADVANCING
DISPLAY "Was Successfully Deleted."
DISPLAY "*****************************************"
END-IF
END-IF
MOVE 1 TO DB-MODE
MOVE "Delete Entry From the Product Set End" TO TEXT1
MOVE 18 TO TEXTLEN
CALL "DBEND" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1,
TEXTLEN
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
MOVE 1 TO DB-MODE
CALL "DBUNLOCK" USING DBNAME, PRODUCT-MASTER, DB-MODE, STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
DISPLAY "Press Enter to Continue -----------> " NO ADVANCING
ACCEPT OPTION FREE.
Rewinding a Data Set
This paragraph implements the REWIND-CUSTOMER-SET routine of the sample
program. Resetting the data set pointer is achieved by a call to DBCLOSE
in mode 2. No special condition is trapped.
******************************************************************
* ACCESS : Mode 1 - Shared Modify Access
*
* Called By: 30-DO-ACTION
*
* Calls : DBCLOSE in mode 2 (rewind)
* 1100-GET-ERROR-AND-EXPLAIN
900-REWIND-CUSTOMER-SET.
MOVE "CUSTOMER;" TO CUSTOMER-MASTER
MOVE 2 TO DB-MODE
CALL "DBCLOSE" USING DBNAME, CUSTOMER-MASTER, DB-MODE, STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF.
Obtaining Database Information
This paragraph implements the GET-DATA-ITEM-INFO routine of the sample
program. This information is obtained using a call to DBINFO in mode
102. The data item name passed through the DBINFO buffer identifies the
data item under inquiry.
******************************************************************
* ACCESS : Mode 1 - Shared Modify Access
*
* Called By: 30-DO-ACTION
*
* Calls : DBINFO in mode 102 (item access)
* 1100-GET-ERROR-AND-EXPLAIN
1000-GET-DATA-ITEM-INFO.
DISPLAY CLEAR SCREEN
DISPLAY "Enter your data item name------> " NO ADVANCING
ACCEPT DATA-ITEM-NAME-IN FREE
MOVE 102 TO DB-MODE
CALL "DBINFO" USING DBNAME, DATA-ITEM-NAME-IN, DB-MODE, STATUS1,
M-102-BUFFER
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF
DISPLAY SPACE
DISPLAY SPACE
DISPLAY SPACE
DISPLAY DATA-ITEM-NAME-IN, " Data Item"
DISPLAY "----------------------------------------"
DISPLAY "Data Item Name = ", DATA-ITEM-NAME
DISPLAY "Data Item Type = ", DATA-ITEM-TYPE
DISPLAY "Data Item Length = ", DATA-ITEM-LENGTH
DISPLAY "Data Item Count = ", DATA-ITEM-COUNT
DISPLAY "----------------------------------------"
DISPLAY "Press Enter to Continue... " NO ADVANCING
ACCEPT OPTION FREE.
Obtaining Error Messages and Explanations
The following paragraph implements the GET-ERROR-AND-EXPLAIN routine of
the sample program. This paragraph calls DBEXPLAIN and DBERROR.
DBEXPLAIN interprets the contents of the Status parameter and prints a
message on $STDLIST. DBERROR returns a message in the ERROR-BUFFER,
explaining the condition code returned by TurboIMAGE/XL. At the end the
paragraph, users can choose to abort or continue the execution of this
program.
******************************************************************
* Access : Mode 1 - Shared Modified Access
*
* Called by: 100-OPEN-THE-DATABASE
* 200-GET-SALES-FOR-DATE
* 300-GET-A-CUSTOMER-RECORD
* 400-GET-PRODUCT-RECORD
* 500-LIST-ALL-CUSTOMERS
* 600-ADD-A-PROUDCT
* 700-UPDATE-A-CUSTOMER
* 800-DELETE-A-PRODUCT
* 900-REWIND-CUSTOMER-SET
* 1000-GET-DATA-ITEM-INFO
* 1200-CLOSE-THE-DATABASE
*
* Calls : DBERROR
* DBEXPLAIN
1100-GET-ERROR-AND-EXPLAIN.
MOVE SPACES TO ERROR-BUFFER
CALL "DBERROR" USING STATUS1, ERROR-BUFFER, ERROR-LENGTH
DISPLAY "---------------------------------------------------"
DISPLAY ERROR-BUFFER
DISPLAY "---------------------------------------------------"
DISPLAY SPACE
CALL "DBEXPLAIN" USING STATUS1
MOVE ZERO TO ANSWER
DISPLAY "---Enter, <1> to Abort..., <2> to Continue > "
NO ADVANCING
ACCEPT ANSWER FREE
IF ANSWER NOT = 1 THEN
DISPLAY "Continuing....."
ELSE
STOP RUN
END-IF.
Closing the Database
This paragraph implements the CLOSE-THE-DATABASE routine of the sample
program. Closing the database is achieved by a call to DBCLOSE in mode
1. Error handling is done by refering all non-zero returned conditions
to the 1100-GET-ERROR-AND-EXPLAIN paragraph.
******************************************************************
* ACCESS : Mode 1 - Shared Modify Access
*
* Called By: 30-DO-ACTION
*
* Calls : DBCLOSE in mode 1 (close)
* 1100-GET-ERROR-AND-EXPLAIN
1200-CLOSE-THE-DATABASE.
MOVE 1 TO DB-MODE
CALL "DBCLOSE" USING DBNAME, PASSWORD, DB-MODE, STATUS1
IF CONDITION NOT = 0 THEN
PERFORM 1100-GET-ERROR-AND-EXPLAIN
END-IF.
MPE/iX 5.0 Documentation