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

  1. /*
  2.  *    Program type:   Embedded Static SQL
  3.  *
  4.  *    Description:
  5.  *        This program demonstrates 'set database', 'connect',
  6.  *        and 'set transaction' statements.
  7.  *        Each time a database is connected to, a sample table
  8.  *        is accessed as a test.
  9.  */
  10.  
  11. #include "example.h"
  12. #include <stdlib.h>
  13. #include <stdio.h>
  14.  
  15. int count_types PROTO((void));
  16. int count_records PROTO((void));
  17. long pr_error PROTO((void));
  18.  
  19. char *dbname = "employee.gdb";
  20.  
  21. EXEC SQL INCLUDE SQLCA;
  22.  
  23.  
  24.  
  25. int main  PROTO((void))
  26. {
  27.     /*
  28.      *    Declare 2 database handles for future use.
  29.      */
  30.  
  31.     EXEC SQL
  32.         SET DATABASE db1 = "employee.gdb";
  33.  
  34.     EXEC SQL
  35.         SET DATABASE db2 = "employe2.gdb";
  36.  
  37.  
  38.     /*
  39.      *    Open a single database.
  40.      */
  41.  
  42.     printf("\n1. Opening database employee.gdb.\n");
  43.  
  44.     EXEC SQL
  45.         CONNECT db1;
  46.  
  47.     if( pr_error())
  48.         return 1;;
  49.  
  50.     EXEC SQL
  51.         SET TRANSACTION USING db1;
  52.  
  53.     if (count_types())
  54.         return 1;
  55.  
  56.     EXEC SQL
  57.         COMMIT RELEASE;
  58.  
  59.     EXEC SQL
  60.         DISCONNECT db1;
  61.  
  62.  
  63.     /*
  64.      *    Use a database name supplied at run-time.
  65.      *    Connect to this database using an existing database handle.
  66.      */
  67.  
  68.     printf("\n2. Opening database with name: %s supplied at run-time.\n",
  69.                     dbname);
  70.     EXEC SQL
  71.         CONNECT TO :dbname AS db1;
  72.  
  73.     if( pr_error())
  74.         return 1;;
  75.  
  76.     EXEC SQL
  77.         SET TRANSACTION USING db1;
  78.  
  79.     if( count_types())
  80.         return 1;
  81.  
  82.     EXEC SQL
  83.         COMMIT RELEASE;
  84.  
  85.     EXEC SQL
  86.         DISCONNECT DEFAULT;
  87.  
  88.  
  89.     /*
  90.      *    Open the second database within the same program,
  91.      *    while the first database remains disconnected.
  92.      */
  93.     printf("\n3. Opening a second database after closing the first one.\n");
  94.  
  95.     EXEC SQL
  96.         CONNECT db2;
  97.  
  98.     if( pr_error())
  99.         return 1;;
  100.  
  101.     EXEC SQL
  102.         SET TRANSACTION USING db2;
  103.  
  104.     if (count_records())
  105.         return 1;
  106.  
  107.     EXEC SQL
  108.         COMMIT RELEASE;
  109.  
  110.     EXEC SQL
  111.         DISCONNECT db2;
  112.  
  113.  
  114.     /*
  115.      *    Open two databases simultaneously.
  116.      */
  117.     printf("\n4. Opening two databases simultaneously.\n");
  118.  
  119.     EXEC SQL
  120.         CONNECT TO db1, db2;
  121.  
  122.     if( pr_error())
  123.         return 1;;
  124.  
  125.     EXEC SQL
  126.         SET TRANSACTION USING db1, db2;
  127.  
  128.     if (count_types())
  129.         return 1;;
  130.     if (count_records())
  131.         return 1;
  132.  
  133.     EXEC SQL
  134.         COMMIT RELEASE;
  135.  
  136.     EXEC SQL
  137.         DISCONNECT db1, db2;
  138.  
  139.  
  140.     /*
  141.      *    Open all databases (in this case just two) at the same time.
  142.      */
  143.     printf("\n5. Opening all databases.\n");
  144.  
  145.     EXEC SQL
  146.         CONNECT TO ALL;
  147.  
  148.     if( pr_error())
  149.         return 1;;
  150.  
  151.     EXEC SQL
  152.         SET TRANSACTION;
  153.  
  154.     if (count_types())
  155.         return 1;
  156.     if (count_records())
  157.         return 1;
  158.  
  159.     EXEC SQL
  160.         COMMIT RELEASE;
  161.  
  162.     EXEC SQL
  163.         DISCONNECT ALL;
  164. return (0);
  165. }
  166.  
  167.  
  168. /*
  169.  *    Access a table in database 1.
  170.  */
  171. int count_types PROTO((void))
  172. {
  173.     long cnt;
  174.  
  175.     EXEC SQL
  176.         SELECT COUNT(DISTINCT currency) INTO :cnt FROM country;
  177.  
  178.     if (SQLCODE == 0)
  179.         printf("\tNumber of currency types    :  %d\n", cnt);
  180.     else 
  181.         if( pr_error())
  182.             return 1;;
  183. return (0);
  184. }
  185.  
  186.  
  187. /*
  188.  *    Access a table in database 2.
  189.  */
  190. int count_records PROTO((void))
  191. {
  192.     long cnt;
  193.  
  194.     /* Use the database handle along with the table name. */
  195.     EXEC SQL
  196.         SELECT COUNT(DISTINCT to_currency) INTO :cnt FROM db2.cross_rate;
  197.  
  198.     if (SQLCODE == 0)
  199.         printf("\tNumber of conversion records:  %d\n", cnt);
  200.     else 
  201.         if( pr_error())
  202.             return 1;;
  203. return (0);
  204. }
  205.  
  206.  
  207. /*
  208.  *    Print an error message.
  209.  */
  210. long pr_error PROTO((void))
  211. {
  212.     if (SQLCODE)
  213.     {
  214.         isc_print_sqlerror(SQLCODE, isc_status);
  215.         printf("\n");
  216.     }
  217. return (SQLCODE);
  218. }
  219.