home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / viscobv6.zip / vac22os2 / ibmcobol / samples / odbc / odbc3p.cpy < prev    next >
Text File  |  1997-12-01  |  9KB  |  226 lines

  1.       ******************************************************************
  2.       * ODBC3P.CPY                                                     *
  3.       *----------------------------------------------------------------*
  4.       *  Sample ODBC initialization, clean-up and error handling       *
  5.       *    procedures    (ODBC Ver 3.0)                                *
  6.       ******************************************************************
  7.       *** Initialization functions SECTION *****************************
  8.        ODBC-Initialization SECTION.
  9.       *
  10.         Allocate-Environment-Handle.
  11.            CALL "SQLAllocHandle" USING
  12.                                    BY VALUE     SQL-HANDLE-ENV
  13.                                    BY VALUE     SQL-NULL-HANDLE
  14.                                    BY REFERENCE Henv
  15.                                  RETURNING      SQL-RC
  16.  
  17.            IF SQL-RC NOT = SQL-SUCCESS
  18.              MOVE "SQLAllocHandle for Env" TO SQL-stmt
  19.              MOVE SQL-HANDLE-ENV to DiagHandleType
  20.              SET DiagHandle to Henv
  21.              PERFORM SQLDiag-Function
  22.            END-IF.
  23.       *
  24.         Set-Env-Attr-to-Ver30-Behavior.
  25.            CALL "SQLSetEnvAttr" USING
  26.                                   BY VALUE      Henv
  27.                                   BY VALUE      SQL-ATTR-ODBC-VERSION
  28.                                   BY VALUE      SQL-OV-ODBC3
  29.       *                                      or SQL-OV-ODBC2         *
  30.       *                                         for Ver 2.x behavior *
  31.                                   BY VALUE      SQL-IS-UINTEGER
  32.                                RETURNING        SQL-RC
  33.  
  34.            IF SQL-RC NOT = SQL-SUCCESS
  35.              MOVE "SQLSetEnvAttr" TO SQL-stmt
  36.              MOVE SQL-HANDLE-ENV to DiagHandleType
  37.              SET DiagHandle to Henv
  38.              PERFORM SQLDiag-Function
  39.            END-IF.
  40.       *
  41.         Allocate-Connection-Handle.
  42.            CALL "SQLAllocHandle" USING
  43.                                    By VALUE     SQL-HANDLE-DBC
  44.                                    BY VALUE     Henv
  45.                                    BY REFERENCE Hdbc
  46.                                  RETURNING      SQL-RC
  47.  
  48.            IF SQL-RC NOT = SQL-SUCCESS
  49.                MOVE "SQLAllocHandle for Connection" to SQL-stmt
  50.                MOVE SQL-HANDLE-ENV to DiagHandleType
  51.                SET DiagHandle to Henv
  52.                PERFORM SQLDiag-Function
  53.            END-IF.
  54.  
  55.       *** SQL-SetLicInfo SECTION **************************************
  56.        SQL-SetLicInfo-Function SECTION.
  57.         SQL-SetLicInfo.
  58.            CALL "iwzODBCLicInfo" USING BY VALUE Hdbc.
  59.  
  60.       *** SQLAllocHandle for statement function SECTION ***************
  61.        Allocate-Statement-Handle SECTION.
  62.         Allocate-Stmt-Handle.
  63.            CALL "SQLAllocHandle" USING
  64.                                    By VALUE     SQL-HANDLE-STMT
  65.                                    BY VALUE     Hdbc
  66.                                    BY REFERENCE Hstmt
  67.                                  RETURNING      SQL-RC
  68.  
  69.            IF SQL-RC NOT = SQL-SUCCESS
  70.                MOVE "SQLAllocHandle for Stmt" TO SQL-stmt
  71.                MOVE SQL-HANDLE-DBC to DiagHandleType
  72.                SET DiagHandle to Hdbc
  73.                PERFORM SQLDiag-Function
  74.            END-IF.
  75.  
  76.       *** Cleanup Functions SECTION ***********************************
  77.        ODBC-Clean-Up SECTION.
  78.       *
  79.         Free-Statement-Handle.
  80.            CALL "SQLFreeHandle" USING
  81.                                   BY VALUE SQL-HANDLE-STMT
  82.                                   BY VALUE Hstmt
  83.                                 RETURNING  SQL-RC
  84.  
  85.            IF SQL-RC NOT = SQL-SUCCESS
  86.                MOVE "SQLFreeHandle for Stmt" TO SQL-stmt
  87.                MOVE SQL-HANDLE-STMT to DiagHandleType
  88.                SET DiagHandle to Hstmt
  89.                PERFORM SQLDiag-Function
  90.            END-IF.
  91.       *
  92.         SQLDisconnect-Function.
  93.            CALL "SQLDisconnect" USING
  94.                                   BY VALUE Hdbc
  95.                                 RETURNING  SQL-RC
  96.  
  97.            IF SQL-RC NOT = SQL-SUCCESS
  98.                MOVE "SQLDisconnect" TO SQL-stmt
  99.                MOVE SQL-HANDLE-DBC to DiagHandleType
  100.                SET DiagHandle to Hdbc
  101.                PERFORM SQLDiag-Function
  102.            END-IF.
  103.       *
  104.         Free-Connection-Handle.
  105.            CALL "SQLFreeHandle" USING
  106.                                   BY VALUE SQL-HANDLE-DBC
  107.                                   BY VALUE Hdbc
  108.                                 RETURNING  SQL-RC
  109.            IF SQL-RC NOT = SQL-SUCCESS
  110.                MOVE "SQLFreeHandle for DBC" TO SQL-stmt
  111.                MOVE SQL-HANDLE-DBC to DiagHandleType
  112.                SET DiagHandle to Hdbc
  113.                PERFORM SQLDiag-Function
  114.            END-IF.
  115.       *
  116.         Free-Environment-Handle.
  117.            CALL "SQLFreeHandle" USING
  118.                                   BY VALUE SQL-HANDLE-ENV
  119.                                   BY VALUE Henv
  120.                                 RETURNING  SQL-RC
  121.  
  122.            IF SQL-RC NOT = SQL-SUCCESS
  123.                MOVE "SQLFreeHandle for Env" TO SQL-stmt
  124.                MOVE SQL-HANDLE-ENV to DiagHandleType
  125.                SET DiagHandle to Henv
  126.                PERFORM SQLDiag-Function
  127.            END-IF.
  128.  
  129.       *** SQLDiag function SECTION ************************************
  130.        SQLDiag-Function SECTION.
  131.         SQLDiag.
  132.            MOVE SQL-RC TO SAVED-SQL-RC
  133.            DISPLAY "Return Value = " SQL-RC
  134.  
  135.              IF SQL-RC = SQL-SUCCESS-WITH-INFO
  136.                THEN
  137.                   DISPLAY SQL-stmt " successful with information"
  138.                ELSE
  139.                   DISPLAY SQL-stmt " failed"
  140.              END-IF
  141.  
  142.       *    - get number of diagnostic records - *
  143.            CALL "SQLGetDiagField"
  144.                    USING
  145.                      BY VALUE     DiagHandleType
  146.                                   DiagHandle
  147.                                   0
  148.                                   SQL-DIAG-NUMBER
  149.                      BY REFERENCE DiagRecNumber
  150.                      BY VALUE     SQL-IS-SMALLINT
  151.                      BY REFERENCE OMITTED
  152.                    RETURNING      SQL-RC
  153.  
  154.            IF SQL-RC = SQL-SUCCESS or SQL-SUCCESS-WITH-INFO
  155.              THEN
  156.  
  157.       *        - get each diagnostic record - *
  158.                PERFORM WITH TEST AFTER
  159.                  VARYING DiagRecNumber-Index FROM 1 BY 1
  160.                    UNTIL DiagRecNumber-Index > DiagRecNumber
  161.                     or   SQL-RC NOT =
  162.                            (SQL-SUCCESS or SQL-SUCCESS-WITH-INFO)
  163.  
  164.       *          - get a diagnostic record - *
  165.                  CALL "SQLGetDiagRec"
  166.                          USING
  167.                            BY VALUE     DiagHandleType
  168.                                         DiagHandle
  169.                                         DiagRecNumber-Index
  170.                            BY REFERENCE DiagSQLState
  171.                                         DiagNativeError
  172.                                         DiagMessageText
  173.                            BY VALUE     DiagMessageBufferLength
  174.                            BY REFERENCE DiagMessageTextLength
  175.                          RETURNING          SQL-RC
  176.  
  177.                  IF SQL-RC = SQL-SUCCESS OR SQL-SUCCESS-WITH-INFO
  178.                    THEN
  179.                      DISPLAY "Information from diagnostic record number"
  180.                              " " DiagRecNumber-Index " for "
  181.                              SQL-stmt ":"
  182.                      DISPLAY "  SQL-State = " DiagSQLState-Chars
  183.                      DISPLAY "  Native error code = " DiagNativeError
  184.                      DISPLAY "  Diagnostic message = "
  185.                               DiagMessageText (1:DiagMessageTextLength)
  186.                    ELSE
  187.                      DISPLAY "SQLGetDiagRec request for " SQL-stmt
  188.                              " failed with return code of: " SQL-RC
  189.                              " from SQLError"
  190.                      PERFORM Termination
  191.                  END-IF
  192.                END-PERFORM
  193.  
  194.              ELSE
  195.       *        - indicate SQLGetDiagField failed - *
  196.                DISPLAY "SQLGetDiagField failed with return code of: "
  197.                        SQL-RC
  198.            END-IF
  199.  
  200.            MOVE Saved-SQL-RC to SQL-RC
  201.            IF Saved-SQL-RC NOT = SQL-SUCCESS-WITH-INFO
  202.              PERFORM Termination
  203.            END-IF.
  204.  
  205.       *** Termination Section******************************************
  206.        Termination Section.
  207.         Termination-Function.
  208.            DISPLAY "Application being terminated with rollback"
  209.            CALL "SQLTransact" USING BY VALUE henv
  210.                                              hdbc
  211.                                              SQL-ROLLBACK
  212.                               RETURNING      SQL-RC
  213.  
  214.            IF SQL-RC = SQL-SUCCESS
  215.              THEN
  216.                DISPLAY "Rollback successful"
  217.              ELSE
  218.                DISPLAY "Rollback failed with return code of: "
  219.                        SQL-RC
  220.            END-IF
  221.            STOP RUN.
  222.  
  223.       *************************
  224.       * End of ODBC3P.CPY     *
  225.       *************************
  226.