home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: Product / Product.zip / DBDEMO.ZIP / DEMODB.ZIP / D30ACBA4.C < prev    next >
Text File  |  1991-07-03  |  15KB  |  550 lines

  1. static unsigned char sqla_program_id[40] = 
  2. {111,65,65,66,65,67,66,67,84,71,82,65,89,32,32,32,68,51,48,65,
  3. 67,66,65,52,102,66,88,80,74,68,72,72,32,32,32,32,32,32,32,32};
  4.  
  5.  
  6. #ifdef LINT_ARGS
  7.  
  8.  short far pascal sqlaaloc(unsigned short,
  9.                            unsigned short,
  10.                            unsigned short,
  11.                            void far *);
  12.  short far pascal sqlacall(unsigned short,
  13.                            unsigned short,
  14.                            unsigned short,
  15.                            unsigned short,
  16.                            void far *);
  17.  short far pascal sqladloc(unsigned short,
  18.                            void far *);
  19.  short far pascal sqlasets(unsigned short,
  20.                            unsigned char far *,
  21.                            void far *);
  22.  short far pascal sqlasetv(unsigned short,
  23.                            unsigned short,
  24.                            unsigned short,
  25.                            unsigned short,
  26.                            void far *,
  27.                            void far *,
  28.                            void far *);
  29.  short far pascal sqlastop(void far *);
  30.  short far pascal sqlastrt(void far *,
  31.                            void far *,
  32.                            struct sqlca far *);
  33.  short far pascal sqlausda(unsigned short,
  34.                            struct sqlda far *,
  35.                            void far *);
  36.  
  37. #else
  38.  
  39.  short far pascal sqlaaloc( );
  40.  short far pascal sqlacall( );
  41.  short far pascal sqladloc( );
  42.  short far pascal sqlasets( );
  43.  short far pascal sqlasetv( );
  44.  short far pascal sqlastop( );
  45.  short far pascal sqlastrt( );
  46.  short far pascal sqlausda( );
  47.  
  48. #endif
  49.  
  50. /*  **********************************************************************   */
  51. /*                                                                           */
  52. /*  APPLICATION D30ACBA4.SQC - TEMPORARY FIX FOR SYMPHONY FILE IMPORT        */
  53. /*       CREATED WITH DEFAULT DATABASE PARAMETERS IN SYMPHONY                */
  54. /*                                                                           */
  55. /*  THIS PROGRAM IS BEING USED ON A TEMPORARY BASIS TO DELETE 9 ROWS FROM    */
  56. /*  THE BOX TABLE AND 5 ROWS FROM THE CUSTOMER TABLE.  THESE ROWS WERE       */
  57. /*  IMPORTED ALONG WITH ALL THE CORRECT DATA FROM SYMPHONY FILES. THE ROWS   */
  58. /*  BEING DELETED ARE NOT DATA ROWS BUT HEADER ROWS AND TRASH ROWS.          */
  59.  
  60. /*               W. BROWN  A10/814     10/15/87                              */
  61.  
  62. /*  ***********************************************************************  */
  63. /*                                                                           */
  64. /*   MODIFICATIONS:                                                          */
  65. /*       Date       Author                Change                             */
  66. /*                                                                           */
  67. /*     12/10/87     D.J.Grant          Added SQLEISIG function call, and     */
  68. /*                                     enhances exit_error to also print     */
  69. /*                                     SQLERRD[0] - [5] and SQL_ERRP.        */
  70. /*     02/03/89     W.B.Brown          upgraded to release 3.0               */
  71. /*                                                                           */
  72. /*  ***********************************************************************  */
  73.  
  74.  
  75. /*  Include library functions  ****       ********   PAGE 3     */
  76.  
  77.  
  78. #include <stdio.h>
  79. #include <string.h>
  80. #include <sql.h>
  81. #include <sqlenv.h>
  82. #include <sqlca.h>
  83. #include <stdlib.h>
  84.  
  85. struct sqlca sqlca;
  86.  
  87. unsigned char msg_buf[512];          /* SQL error message buffer             */
  88. unsigned char dbase[] = "BANK";
  89. unsigned char password[] = "";
  90. unsigned char errfile[] = "D30ACBA4.ERR";
  91.  
  92. /*   Declare rte_label - progress marker */
  93.  
  94.     unsigned char rte_label[16] = "               ";
  95.  
  96.  
  97. unsigned char  sqlerrp_value[9] = "        ";             /* error value  */
  98.  
  99. int errlevel = 0;
  100.  
  101.  
  102. /*   ***********  TABLES USED IN THIS PROGRAM    ******************          */
  103.  
  104. /*       CUSTOMER TABLE                         BOX TABLE
  105.  
  106.   CU_SSN       CHAR(11)   NOT NULL         B_NUMB     CHAR(3)  NOT NULL
  107.   CU_NAME      CHAR(30)   NOT NULL         B_SIZE     CHAR(1)  NOT NULL
  108.   CU_ADDR1     CHAR(25)   NOT NULL         B_RENT     DEC(3,2) NOT NULL
  109.   CU_ADDR2     CHAR(25)   NOT NULL         B_SSN      CHAR(11) NULLABLE
  110.   CU_ZIP       CHAR(5)    NOT NULL         B_PAYUP    CHAR(3)  NULLABLE
  111.  
  112. */
  113.  
  114. /*  SQL DECLARE SECTION - Host variables                                     */
  115.  
  116.  
  117. /*
  118. EXEC SQL BEGIN DECLARE SECTION;
  119. */
  120.  
  121.  
  122.   unsigned char ssn[12];                     /*   Customer Table variables   */
  123.   short custcnt;
  124.  
  125.   unsigned char bnumb[4];                    /*   Box Table variables        */
  126.   short boxcnt;
  127.  
  128.  
  129. /*
  130. EXEC SQL END DECLARE SECTION;
  131. */
  132.  
  133.  
  134. /*   END OF SQL DECLARE SECTION - Host variables                             */
  135.  
  136.  
  137.  
  138. /*  ** BEGIN MAIN FUNCTION  *******       ********              */
  139.  
  140. int main (void);
  141. main ()
  142. {
  143.  
  144.         FILE *ptr_errfile;
  145.  
  146.  
  147. /*   Declare a short integer to receive the return code message length-SQL   */
  148. /*   Declare a short integer to indicate dbase open(0) or failed (-1).       */
  149. /*   Declare a short integer to indicate error file open (-1) or closed (0)  */
  150.  
  151.     short rc = 0;                    /*  From sqlaintp - initialize to 0     */
  152.     short dbas_cls = 0;              /*  Initialize to open.                 */
  153.     short err_cls = 0;
  154.  
  155. /*                 *************************************                     */
  156. /*                                                                           */
  157. /*                         SQL EXCEPTION HANDLING                            */
  158. /*                                                                           */
  159. /*                 *************************************                     */
  160.  
  161.  
  162. /*
  163. EXEC SQL
  164.      WHENEVER SQLERROR GOTO ret_code;
  165. */
  166.  
  167.  
  168.  
  169. /*
  170. EXEC SQL
  171.      WHENEVER SQLWARNING CONTINUE;
  172. */
  173.  
  174.  
  175.  
  176. /*
  177. EXEC SQL
  178.      WHENEVER NOT FOUND CONTINUE;
  179. */
  180.  
  181.  
  182. /*            ****************************************                       */
  183.  
  184.   strcpy(rte_label,"instal sqleisig");
  185.  
  186.   sqleisig(&sqlca);                             /* ctrl-break processing     */
  187.  
  188.   if (sqlca.sqlcode != 0)
  189.     {
  190.      goto ret_code;
  191.     }
  192.  
  193. /*            ****************************************                       */
  194.  
  195.  
  196. /*   *******************************************************************     */
  197. /*                                                                           */
  198. /*  Store the name of the routine in rte_label for error tracking            */
  199. /*  Start the database using the function "sqlestrd"; check for error on     */
  200. /*  start-database function.                                                 */
  201. /*                                                                           */
  202. /*                  ******************************                           */
  203. /*                                                                           */
  204.  
  205.     strcpy(rte_label,"start database ");
  206.  
  207. start_dbres:
  208.  
  209.     sqlestrd (dbase,password,'S',&sqlca);
  210.  
  211.     if (sqlca.sqlcode == -1015)                       /* If start db func    */
  212.     {                                                 /* fails, call restart */
  213.        strcpy(rte_label,"restart databas");           /* func.               */
  214.        sqlerest(dbase,password,&sqlca);               /* Check for failed    */
  215.          if (sqlca.sqlcode != 0)                      /* restart; on error   */
  216.             {                                         /* set dbase closed,   */
  217.             dbas_cls = -1;                            /* go to error exit.   */
  218.             goto ret_code;
  219.             }
  220.        strcpy(rte_label,"start database2");
  221.        sqlestrd (dbase,password,'S',&sqlca);          /* Good restart-start  */
  222.     }                                                 /* db again.           */
  223.  
  224.     if (sqlca.sqlcode != 0)                           /* Check 2nd start for */
  225.       {                                               /* failure; if failed, */
  226.       dbas_cls = -1;                                  /* set flag to closed. */
  227.       goto ret_code;                                  /* Also checks for any */
  228.       }                                               /* other error code on */
  229.                                                       /* 1st sqlestrd.       */
  230.  
  231. /*                  *****************************                            */
  232.  
  233.  
  234. /*                DELETE TRASH ROWS FROM CUSTOMER AND BOX TABLES             */
  235.  
  236.  
  237. strcpy (rte_label,"delt cust name ");
  238.  
  239.   
  240. /*
  241. EXEC SQL
  242.         DELETE FROM CUSTOMER
  243.         WHERE CU_SSN = 'Name       ';
  244. */
  245.  
  246. {
  247.   sqlastrt(sqla_program_id,0L,&sqlca);
  248.   sqlacall((unsigned short)24,1,0,0,0L);
  249. if (sqlca.sqlcode < 0)
  250. {
  251.    sqlastop(0L);
  252.    goto ret_code;
  253. }
  254.  
  255.   sqlastop(0L);
  256. }
  257.  
  258.  
  259. strcpy (rte_label,"delt cust ssn  ");
  260.  
  261.   
  262. /*
  263. EXEC SQL
  264.         DELETE FROM CUSTOMER
  265.         WHERE CU_SSN = 'ssn        ';
  266. */
  267.  
  268. {
  269.   sqlastrt(sqla_program_id,0L,&sqlca);
  270.   sqlacall((unsigned short)24,2,0,0,0L);
  271. if (sqlca.sqlcode < 0)
  272. {
  273.    sqlastop(0L);
  274.    goto ret_code;
  275. }
  276.  
  277.   sqlastop(0L);
  278. }
  279.  
  280.  
  281. strcpy (rte_label,"delete box Nam ");
  282.  
  283.   
  284. /*
  285. EXEC SQL
  286.         DELETE FROM BOX
  287.         WHERE B_NUMB = 'Nam';
  288. */
  289.  
  290. {
  291.   sqlastrt(sqla_program_id,0L,&sqlca);
  292.   sqlacall((unsigned short)24,3,0,0,0L);
  293. if (sqlca.sqlcode < 0)
  294. {
  295.    sqlastop(0L);
  296.    goto ret_code;
  297. }
  298.  
  299.   sqlastop(0L);
  300. }
  301.  
  302.  
  303. strcpy (rte_label,"delete box BNU ");
  304.  
  305.   
  306. /*
  307. EXEC SQL
  308.         DELETE FROM BOX
  309.         WHERE B_NUMB = 'BNU';
  310. */
  311.  
  312. {
  313.   sqlastrt(sqla_program_id,0L,&sqlca);
  314.   sqlacall((unsigned short)24,4,0,0,0L);
  315. if (sqlca.sqlcode < 0)
  316. {
  317.    sqlastop(0L);
  318.    goto ret_code;
  319. }
  320.  
  321.   sqlastop(0L);
  322. }
  323.  
  324.  
  325. strcpy (rte_label,"delete box BRE ");
  326.  
  327.   
  328. /*
  329. EXEC SQL
  330.         DELETE FROM BOX
  331.         WHERE B_NUMB = 'BSS';
  332. */
  333.  
  334. {
  335.   sqlastrt(sqla_program_id,0L,&sqlca);
  336.   sqlacall((unsigned short)24,5,0,0,0L);
  337. if (sqlca.sqlcode < 0)
  338. {
  339.    sqlastop(0L);
  340.    goto ret_code;
  341. }
  342.  
  343.   sqlastop(0L);
  344. }
  345.  
  346.  
  347. strcpy (rte_label,"delete box BRE ");
  348.  
  349.   
  350. /*
  351. EXEC SQL
  352.         DELETE FROM BOX
  353.         WHERE B_NUMB = 'BRE';
  354. */
  355.  
  356. {
  357.   sqlastrt(sqla_program_id,0L,&sqlca);
  358.   sqlacall((unsigned short)24,6,0,0,0L);
  359. if (sqlca.sqlcode < 0)
  360. {
  361.    sqlastop(0L);
  362.    goto ret_code;
  363. }
  364.  
  365.   sqlastop(0L);
  366. }
  367.  
  368.  
  369. strcpy (rte_label,"delete box BSI ");
  370.  
  371.   
  372. /*
  373. EXEC SQL
  374.         DELETE FROM BOX
  375.         WHERE B_NUMB = 'BSI';
  376. */
  377.  
  378. {
  379.   sqlastrt(sqla_program_id,0L,&sqlca);
  380.   sqlacall((unsigned short)24,7,0,0,0L);
  381. if (sqlca.sqlcode < 0)
  382. {
  383.    sqlastop(0L);
  384.    goto ret_code;
  385. }
  386.  
  387.   sqlastop(0L);
  388. }
  389.  
  390.  
  391. strcpy (rte_label,"count cust rows");
  392.  
  393.   
  394. /*
  395. EXEC SQL
  396.         SELECT COUNT (*)
  397.         INTO :custcnt
  398.         FROM CUSTOMER;
  399. */
  400.  
  401. {
  402.   sqlastrt(sqla_program_id,0L,&sqlca);
  403.   sqlaaloc(2,1,1,0L);
  404.     sqlasetv(2,0,500,2,&custcnt,0L,0L);
  405.   sqlacall((unsigned short)24,8,0,2,0L);
  406. if (sqlca.sqlcode < 0)
  407. {
  408.    sqlastop(0L);
  409.    goto ret_code;
  410. }
  411.  
  412.   sqlastop(0L);
  413. }
  414.  
  415.  
  416.   printf ("\nNUMBER OF CUSTOMER ROWS AFTER DELETE:   %d\n",custcnt);
  417.  
  418. strcpy (rte_label,"count box  rows");
  419.  
  420.   
  421. /*
  422. EXEC SQL
  423.         SELECT COUNT (*)
  424.         INTO :boxcnt
  425.         FROM BOX;
  426. */
  427.  
  428. {
  429.   sqlastrt(sqla_program_id,0L,&sqlca);
  430.   sqlaaloc(2,1,2,0L);
  431.     sqlasetv(2,0,500,2,&boxcnt,0L,0L);
  432.   sqlacall((unsigned short)24,9,0,2,0L);
  433. if (sqlca.sqlcode < 0)
  434. {
  435.    sqlastop(0L);
  436.    goto ret_code;
  437. }
  438.  
  439.   sqlastop(0L);
  440. }
  441.  
  442.  
  443.   printf ("\nNUMBER OF BOX ROWS AFTER DELETE:   %d\n",boxcnt);
  444.  
  445.   goto end;
  446.  
  447.  
  448.  
  449. /*                      *******************************                      */
  450. /*                                                                           */
  451. /*    EXIT ERROR ROUTINE - Log error information to screen or print file.    */
  452. /*                                                                           */
  453. /*                      *******************************                      */
  454.  
  455. ret_code:
  456.  
  457.     if ((ptr_errfile = fopen(errfile, "w")) == NULL)
  458.      {
  459.       printf ("\nUNABLE TO OPEN D30ACBA4.ERR\n");
  460.       printf ("%s\n",rte_label);
  461.       printf ("SQLCODE IS %ld\n",sqlca.sqlcode);
  462.       errlevel = 2;
  463.       goto continue_err;
  464.      }
  465.     fprintf(ptr_errfile,"%15s\n",rte_label);
  466.     fprintf(ptr_errfile,"SQLCODE IS %ld\n",sqlca.sqlcode);
  467.     errlevel = 2;
  468.  
  469.     fprintf(ptr_errfile,"\nSQLERRD[0] is %ld",sqlca.sqlerrd[0]);
  470.     fprintf(ptr_errfile,"\nSQLERRD[1] is %ld",sqlca.sqlerrd[1]);
  471.     fprintf(ptr_errfile,"\nSQLERRD[2] is %ld",sqlca.sqlerrd[2]);
  472.     fprintf(ptr_errfile,"\nSQLERRD[3] is %ld",sqlca.sqlerrd[3]);
  473.     fprintf(ptr_errfile,"\nSQLERRD[4] is %ld",sqlca.sqlerrd[4]);
  474.     fprintf(ptr_errfile,"\nSQLERRD[5] is %ld",sqlca.sqlerrd[5]);
  475.  
  476.     memcpy (sqlerrp_value, sqlca.sqlerrp, 8);
  477.     fprintf(ptr_errfile,"\nSQLERRP is %s",sqlerrp_value);
  478.  
  479.     rc = sqlaintp(msg_buf,512,0,&sqlca);
  480.     if (rc < 0)
  481.      {
  482.       fprintf (ptr_errfile, "SQLAINTP ERROR.  Return Code = %d",rc);
  483.      }
  484.     else if (rc > 0)
  485.      {
  486.       fprintf (ptr_errfile,"\n");
  487.       fprintf (ptr_errfile,msg_buf);
  488.      }
  489.     err_cls = -1;
  490.  
  491. continue_err:
  492.  
  493.     
  494. /*
  495. EXEC SQL
  496.             WHENEVER SQLERROR CONTINUE;
  497. */
  498.  
  499.  
  500.     
  501. /*
  502. EXEC SQL
  503.             ROLLBACK WORK;
  504. */
  505.  
  506. {
  507.   sqlastrt(sqla_program_id,0L,&sqlca);
  508.   sqlacall((unsigned short)28,0,0,0,0L);
  509.   sqlastop(0L);
  510. }
  511.  
  512.  
  513.     if (sqlca.sqlcode < 0)
  514.      {
  515.       if ((ptr_errfile = fopen(errfile,"a")) == NULL)
  516.        {
  517.         printf ("\nUNABLE TO OPEN D30ACBA4.ERR -- ROLLBACK FAILED");
  518.         goto end;
  519.        }
  520.       fprintf (ptr_errfile,"\nSQLCODE IS %ld,  ROLLBACK FAILED.",sqlca.sqlcode);
  521.      }
  522.  
  523.  
  524.  
  525. /*       **************************       *******************   */
  526. /*                                                                           */
  527. /*                  END OF PROGRAM - ROUTINE LABEL "END"                     */
  528. /*                                                                           */
  529. /*                 *************************************                     */
  530.  
  531. end:
  532.  
  533.  
  534.     if (dbas_cls == 0)
  535.     {                                                 /* if database is open */
  536.       strcpy(rte_label,"stop database  ");
  537.       sqlestpd (&sqlca);                              /* Stop using database */
  538.     }
  539.  
  540.     if (err_cls == -1)                                /* If an SQL or 'C'    */
  541.       {                                               /* error has occurred  */
  542.       fclose(ptr_errfile);                            /* close error file.   */
  543.       }
  544.  
  545.  
  546.    return(errlevel);
  547.  
  548. }                                                     /* END MAIN FUNCTION   */
  549.  
  550.