home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 May / PCWorld_1999-05_cd.bin / software / Vyzkuste / inprise / INTRBASE_55 / EXAMPLES / API / STAT8.E < prev    next >
Text File  |  1998-10-18  |  3KB  |  130 lines

  1. /*
  2.  *  Program type:   Embedded Static SQL
  3.  *
  4.  *  Description:
  5.  *        This program updates a blob data type.
  6.  *        Project descriptions are added for a set of projects.
  7.  */
  8.  
  9. #include "example.h"
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <stdio.h>
  13.  
  14. char *get_line PROTO((void));
  15.  
  16. static char *Proj_data[] =
  17. {
  18.     "VBASE",
  19.         "Design a video data base management system for ",
  20.         "controlling on-demand video distribution.",
  21.         0,
  22.     "DGPII",
  23.         "Develop second generation digital pizza maker ",
  24.         "with flash-bake heating element and ",
  25.         "digital ingredient measuring system.",
  26.         0,
  27.     "GUIDE",
  28.         "Develop a prototype for the automobile version of ",
  29.         "the hand-held map browsing device.",
  30.         0,
  31.     "MAPDB",
  32.         "Port the map browsing database software to run ",
  33.         "on the automobile model.",
  34.         0,
  35.     "HWRII",
  36.         "Integrate the hand-writing recognition module into the ",
  37.         "universal language translator.",
  38.         0,
  39.     0
  40. };
  41. int Inp_ptr = 0;
  42.  
  43. EXEC SQL
  44.     BEGIN DECLARE SECTION;
  45. EXEC SQL
  46.     END DECLARE SECTION;
  47.  
  48.  
  49. int main PROTO((void))
  50. {
  51.     BASED_ON project.proj_id    proj_id;
  52.     ISC_QUAD    blob_id;
  53.     int        len;
  54.     char ISC_FAR *    line; 
  55.     int        rec_cnt = 0;
  56.  
  57.     EXEC SQL
  58.         WHENEVER SQLERROR GO TO Error;
  59.  
  60.     /* Declare a blob insert cursor. */
  61.     EXEC SQL
  62.         DECLARE bc CURSOR FOR
  63.         INSERT BLOB proj_desc INTO project;
  64.  
  65.     /*
  66.      *  Get the next project id and update the project description.
  67.      */
  68.     line = get_line();
  69.     while (line)
  70.     {
  71.         /* Open the blob cursor. */
  72.         EXEC SQL
  73.             OPEN bc INTO :blob_id;
  74.  
  75.         strcpy(proj_id, line);
  76.         printf("\nUpdating description for project:  %s\n\n", proj_id);
  77.  
  78.         /* Get a project description segment. */
  79.         line = get_line();    
  80.         while (line)
  81.         {
  82.             printf("  Inserting segment:  %s\n", line);
  83.  
  84.             /* Calculate the length of the segment. */
  85.             len = strlen(line);
  86.  
  87.             /* Write the segment. */
  88.             EXEC SQL INSERT CURSOR bc VALUES (:line INDICATOR :len);
  89.             line = get_line();
  90.         }
  91.  
  92.         /* Close the blob cursor. */
  93.         EXEC SQL
  94.             CLOSE bc;
  95.  
  96.         /* Save the blob id in the project record. */
  97.         EXEC SQL
  98.             UPDATE project
  99.             SET proj_desc = :blob_id
  100.             WHERE proj_id = :proj_id;
  101.  
  102.         if (SQLCODE == 0L)
  103.             rec_cnt++;
  104.         else
  105.             printf("Input error -- no project record with key: %s\n", proj_id);
  106.         line = get_line();
  107.     }
  108.  
  109.     EXEC SQL
  110.         COMMIT RELEASE;
  111.  
  112.     printf("\n\nAdded %d project descriptions.\n", rec_cnt);
  113. return 0;
  114.         
  115. Error:
  116.     isc_print_sqlerror((short) SQLCODE, isc_status);
  117. return 1;
  118. }
  119.  
  120.  
  121. /*
  122.  *    Get the next input line, which is either a project id
  123.  *    or a project description segment.
  124.  */
  125. char *get_line PROTO((void))
  126. {
  127.     return Proj_data[Inp_ptr++];
  128. }
  129.  
  130.