home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 January / Chip_2001-01_cd1.bin / tema / interb / InterBase_WI-V6.0-server.exe / server / examples / gpre / stat10.e < prev    next >
Text File  |  2000-06-23  |  4KB  |  238 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.  * The contents of this file are subject to the Interbase Public
  10.  * License Version 1.0 (the "License"); you may not use this file
  11.  * except in compliance with the License. You may obtain a copy
  12.  * of the License at http://www.Interbase.com/IPL/
  13.  *
  14.  * Software distributed under the License is distributed on an
  15.  * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
  16.  * or implied. See the License for the specific language governing
  17.  * rights and limitations under the License.
  18.  *
  19.  * The Original Code was created by Interbase Software Corporation
  20.  * and its successors. Portions created by Borland/Inprise are
  21.  * Copyright (C) 1992-1998 and 1999-2000 Borland/Inprise. Portions
  22.  * created by InterBase Software Corporation are Copyright (C)
  23.  * 1998-1999 InterBase Software Corporation.
  24.  *
  25.  * Copyright (C) 2000 InterBase Software Corporation
  26.  * All Rights Reserved.
  27.  * Contributor(s): ______________________________________.
  28.  */
  29.  
  30. #include "example.h"
  31. #include <stdlib.h>
  32. #include <stdio.h>
  33.  
  34. int count_types (void);
  35. int count_records (void);
  36. long pr_error (void);
  37.  
  38. char *dbname = "employee.gdb";
  39.  
  40. EXEC SQL INCLUDE SQLCA;
  41.  
  42.  
  43.  
  44. int main  (void)
  45. {
  46.     /*
  47.      *    Declare 2 database handles for future use.
  48.      */
  49.  
  50.     EXEC SQL
  51.         SET DATABASE db1 = "employee.gdb";
  52.  
  53.     EXEC SQL
  54.         SET DATABASE db2 = "employe2.gdb";
  55.  
  56.  
  57.     /*
  58.      *    Open a single database.
  59.      */
  60.  
  61.     printf("\n1. Opening database employee.gdb.\n");
  62.  
  63.     EXEC SQL
  64.         CONNECT db1;
  65.  
  66.     if( pr_error())
  67.         return 1;;
  68.  
  69.     EXEC SQL
  70.         SET TRANSACTION USING db1;
  71.  
  72.     if (count_types())
  73.         return 1;
  74.  
  75.     EXEC SQL
  76.         COMMIT RELEASE;
  77.  
  78.     EXEC SQL
  79.         DISCONNECT db1;
  80.  
  81.  
  82.     /*
  83.      *    Use a database name supplied at run-time.
  84.      *    Connect to this database using an existing database handle.
  85.      */
  86.  
  87.     printf("\n2. Opening database with name: %s supplied at run-time.\n",
  88.                     dbname);
  89.     EXEC SQL
  90.         CONNECT TO :dbname AS db1;
  91.  
  92.     if( pr_error())
  93.         return 1;;
  94.  
  95.     EXEC SQL
  96.         SET TRANSACTION USING db1;
  97.  
  98.     if( count_types())
  99.         return 1;
  100.  
  101.     EXEC SQL
  102.         COMMIT RELEASE;
  103.  
  104.     EXEC SQL
  105.         DISCONNECT DEFAULT;
  106.  
  107.  
  108.     /*
  109.      *    Open the second database within the same program,
  110.      *    while the first database remains disconnected.
  111.      */
  112.     printf("\n3. Opening a second database after closing the first one.\n");
  113.  
  114.     EXEC SQL
  115.         CONNECT db2;
  116.  
  117.     if( pr_error())
  118.         return 1;;
  119.  
  120.     EXEC SQL
  121.         SET TRANSACTION USING db2;
  122.  
  123.     if (count_records())
  124.         return 1;
  125.  
  126.     EXEC SQL
  127.         COMMIT RELEASE;
  128.  
  129.     EXEC SQL
  130.         DISCONNECT db2;
  131.  
  132.  
  133.     /*
  134.      *    Open two databases simultaneously.
  135.      */
  136.     printf("\n4. Opening two databases simultaneously.\n");
  137.  
  138.     EXEC SQL
  139.         CONNECT TO db1, db2;
  140.  
  141.     if( pr_error())
  142.         return 1;;
  143.  
  144.     EXEC SQL
  145.         SET TRANSACTION USING db1, db2;
  146.  
  147.     if (count_types())
  148.         return 1;;
  149.     if (count_records())
  150.         return 1;
  151.  
  152.     EXEC SQL
  153.         COMMIT RELEASE;
  154.  
  155.     EXEC SQL
  156.         DISCONNECT db1, db2;
  157.  
  158.  
  159.     /*
  160.      *    Open all databases (in this case just two) at the same time.
  161.      */
  162.     printf("\n5. Opening all databases.\n");
  163.  
  164.     EXEC SQL
  165.         CONNECT TO ALL;
  166.  
  167.     if( pr_error())
  168.         return 1;;
  169.  
  170.     EXEC SQL
  171.         SET TRANSACTION;
  172.  
  173.     if (count_types())
  174.         return 1;
  175.     if (count_records())
  176.         return 1;
  177.  
  178.     EXEC SQL
  179.         COMMIT RELEASE;
  180.  
  181.     EXEC SQL
  182.         DISCONNECT ALL;
  183. return (0);
  184. }
  185.  
  186.  
  187. /*
  188.  *    Access a table in database 1.
  189.  */
  190. int count_types (void)
  191. {
  192.     long cnt;
  193.  
  194.     EXEC SQL
  195.         SELECT COUNT(DISTINCT currency) INTO :cnt FROM country;
  196.  
  197.     if (SQLCODE == 0)
  198.         printf("\tNumber of currency types    :  %d\n", cnt);
  199.     else 
  200.         if( pr_error())
  201.             return 1;;
  202. return (0);
  203. }
  204.  
  205.  
  206. /*
  207.  *    Access a table in database 2.
  208.  */
  209. int count_records (void)
  210. {
  211.     long cnt;
  212.  
  213.     /* Use the database handle along with the table name. */
  214.     EXEC SQL
  215.         SELECT COUNT(DISTINCT to_currency) INTO :cnt FROM db2.cross_rate;
  216.  
  217.     if (SQLCODE == 0)
  218.         printf("\tNumber of conversion records:  %d\n", cnt);
  219.     else 
  220.         if( pr_error())
  221.             return 1;;
  222. return (0);
  223. }
  224.  
  225.  
  226. /*
  227.  *    Print an error message.
  228.  */
  229. long pr_error (void)
  230. {
  231.     if (SQLCODE)
  232.     {
  233.         isc_print_sqlerror(SQLCODE, isc_status);
  234.         printf("\n");
  235.     }
  236. return (SQLCODE);
  237. }
  238.