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 PreviousNext

UpChapter 10 Sample Codings Using Methods Provided

10.3 Sample Codings Using the GET-BOOKMARK,SET-BOOKMARK,MOVE-PREVIOUS Methods


Create a recordset and get bookmarks in it.

Locate the current row in the recordset on a bookmarked row and reference the data in the current row.


 IDENTIFICATION DIVISION.
 PROGRAM-ID. BOOKMARK-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 data return variables.
 01 BOOKMARK     PIC S9(9) COMP-5.
 01 E-MODE       PIC S9(9) COMP-5.
 
*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 return value 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.
     GO TO ERREND.
 END DECLARATIVES.
 
*Create an FJDB-SESSION class object.
     INVOKE FJDB-SESSION "CREATE-OBJECT" USING ERROR-A
                                         RETURNING SESSION-A.
 
*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.
 
*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.
 
*Associate the bind table and the recordset.
     INVOKE RECORDSET-A "BIND-FIELDS" USING BIND-A RETURNING RET-CODE.
 
*Locate the current row on the next row in the recordset.
     INVOKE RECORDSET-A "MOVE-NEXT" RETURNING RET-CODE.
 
*Get (set) a bookmark.
     INVOKE RECORDSET-A "GET-BOOKMARK" USING BOOKMARK 
                                       RETURNING RET-CODE.

*Move the current row.
     INVOKE RECORDSET-A "MOVE-PREVIOUS" RETURNING RET-CODE.
 
*Locate the current row on the bookmarked row.
     INVOKE RECORDSET-A "SET-BOOKMARK" USING BOOKMARK
                                             RETURNING RET-CODE.
 
*Reference the data in the bookmarked row.
     DISPLAY "NO=" BIND-NO.
     DISPLAY "NAME=" BIND-NAME.
     DISPLAY "ADDRESS=" BIND-ADDRESS.
 
 ERREND.
 
*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 BOOKMARK-APL.

Contents Index PreviousNext

All Rights Reserved, Copyright (C) Alchemy Solutions Inc. 1998-2000