| DB Access Class Library for COBOL V1.0 API Reference - Microsoft(R) Windows(R) - - Microsoft(R) Windows NT(R) - - Microsoft(R) Windows(R) 2000 - |
Contents
Index
![]()
|
Chapter 10 Sample Codings Using Methods Provided
Recreate a recordset when a transaction has been rollbacked following an unsuccessful manipulation.
IDENTIFICATION DIVISION.
PROGRAM-ID. REFRESH-APL.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
*Specify the class names that are used in the program.
REPOSITORY.
CLASS FJDB-SESSION
CLASS FJDB-DATABASE
CLASS FJDB-RECORDSET
CLASS BINDTBL AS "*COB-BINDTABLE"
CLASS FJDB-ERROR.
*Specify the symbolic constants library used in the program.
SPECIAL-NAMES.
SYMBOLIC CONSTANT
COPY FJDBOPT.
.
DATA DIVISION.
WORKING-STORAGE SECTION.
*Define object variables.
01 SESSION-A USAGE OBJECT REFERENCE FJDB-SESSION.
01 DATABASE-A USAGE OBJECT REFERENCE FJDB-DATABASE.
01 RECORDSET-A USAGE OBJECT REFERENCE FJDB-RECORDSET.
01 BIND-A USAGE OBJECT REFERENCE BINDTBL.
01 ERROR-A USAGE OBJECT REFERENCE FJDB-ERROR.
*Define data setup variables.
01 DSN PIC X(100).
01 UID PIC X(100).
01 PWD PIC X(100).
01 SCM PIC X(100).
01 OPT PIC S9(9) COMP-5.
01 SQL PIC X(100).
01 RSOPT PIC S9(9) COMP-5.
*Define a variable for setting a count of the number of items to be set in the bind table.
01 FLD-NUM PIC S9(9) COMP-5.
*Define bind table variables.
01 BIND-NO PIC S9(9) COMP-5.
01 BIND-NAME PIC X(10).
01 BIND-ADDRESS PIC X(20).
*Define error information return variables.
01 ERROR-COUNT PIC S9(9) COMP-5.
01 ERROR-MESSAGE PIC X(100).
01 SQLSTATE PIC X(5).
01 SQLSTATE-SIZE PIC S9(9) COMP-5.
01 MESSAGE-SIZE PIC S9(9) COMP-5.
*Define a data return variable.
01 RET-CODE PIC S9(9) COMP-5.
PROCEDURE DIVISION.
*Describe an error handling procedure.
DECLARATIVES.
ERR SECTION.
USE AFTER EXCEPTION FJDB-ERROR.
INVOKE EXCEPTION-OBJECT "GET-COUNT" RETURNING ERROR-COUNT.
PERFORM ERROR-COUNT TIMES
INVOKE EXCEPTION-OBJECT "GET-SQLSTATE"
USING SQLSTATE SQLSTATE-SIZE
RETURNING RET-CODE
INVOKE EXCEPTION-OBJECT "GET-MESSAGE"
USING ERROR-MESSAGE MESSAGE-SIZE
RETURNING RET-CODE
DISPLAY "SQL-STATE= " SQLSTATE
DISPLAY "MESSAGE=" ERROR-MESSAGE
INVOKE EXCEPTION-OBJECT "GET-NEXT" RETURNING RET-CODE
END-PERFORM.
END DECLARATIVES.
*Create an FJDB-SESSION class object.
INVOKE FJDB-SESSION "CREATE-OBJECT" USING ERROR-A
RETURNING SESSION-A.
IF SESSION-A = NULL THEN
GO TO TERMPROCESS
END-IF.
*Set the values of arguments accompanying the OPEN-DATABASE method.
MOVE "DB01" TO DSN.
MOVE "YODA" TO UID.
MOVE "YODA" TO PWD.
MOVE "GENERAL" TO SCM.
MOVE FJDB-SCDBOPT-DEFAULT TO OPT.
*Connect to the database.
INVOKE SESSION-A "OPEN-DATABASE"
USING DSN UID PWD SCM OPT DATABASE-A
RETURNING RET-CODE.
IF RET-CODE NOT = 0 THEN
GO TO TERMPROCESS
END-IF.
*Set the values of arguments accompanying the OPEN-RECORDSET method.
MOVE "SELECT NO,NAME,ADDRESS FROM EMPLOYEE" TO SQL.
MOVE FJDB-SCRSOPT-DEFAULT TO RSOPT.
*Create a bind table object.
MOVE 3 TO FLD-NUM.
INVOKE BINDTBL "NEW" USING FLD-NUM RETURNING BIND-A.
*Register variables in the bind table.
INVOKE BIND-A "REGISTER" USING BIND-NO.
INVOKE BIND-A "REGISTER" USING BIND-NAME.
INVOKE BIND-A "REGISTER" USING BIND-ADDRESS.
*Create a recordset.
INVOKE DATABASE-A "OPEN-RECORDSET" USING SQL RSOPT RECORDSET-A
RETURNING RET-CODE.
IF RET-CODE NOT = 0 THEN
GO TO TERMPROCESS
END-IF.
*Associate the bind table and the recordset.
INVOKE RECORDSET-A "BIND-FIELDS" USING BIND-A RETURNING RET-CODE.
IF RET-CODE NOT = 0 THEN
GO TO TERMPROCESS
END-IF.
*Begin a transaction.
INVOKE DATABASE-A "BEGIN-TRAN" RETURNING RET-CODE.
IF RET-CODE NOT = 0 THEN
GO TO TERMPROCESS
END-IF.
*Update the recordset.
INVOKE RECORDSET-A "EDIT-RECORD" RETURNING RET-CODE.
MOVE 2100 TO BIND-NO.
INVOKE RECORDSET-A "UPDATE-RECORD" RETURNING RET-CODE.
*If the update to the database fails, rollback the transaction and
* Recreate the recordset
IF RET-CODE NOT = 0 THEN
INVOKE DATABASE-A "ROLLBACK-TRAN" RETURNING RET-CODE
INVOKE RECORDSET-A "REFRESH-RECORDSET" RETURNING RET-CODE
END-IF.
:
:
TERMPROCESS.
*Collect the objects.
SET ERROR-A TO NULL.
SET BIND-A TO NULL.
SET RECORDSET-A TO NULL.
SET DATABASE-A TO NULL.
SET SESSION-A TO NULL.
END PROGRAM REFRESH-APL.
Contents
Index
![]()
|