home *** CD-ROM | disk | FTP | other *** search
/ PC World 1999 May / PCWorld_1999-05_cd.bin / software / Vyzkuste / inprise / INTRBASE_55 / EXAMPLES / API / API1.C < prev    next >
C/C++ Source or Header  |  1998-10-18  |  4KB  |  127 lines

  1. /*
  2.  *    Program type:  API Interface
  3.  *
  4.  *    Description:
  5.  *        This program creates a new database, given an SQL statement
  6.  *        string.  The newly created database is accessed after its
  7.  *        creation, and a sample table is added.
  8.  *
  9.  *        The SQLCODE is extracted from the status vector and is used
  10.  *        to check whether the database already exists.
  11.  */
  12.  
  13.  
  14. #include <stdlib.h>
  15. #include <string.h>
  16. #include <stdio.h>
  17. #include "example.h"
  18. #include <ibase.h>
  19.  
  20. int pr_error PROTO((long ISC_FAR *, char ISC_FAR *));
  21.  
  22.  
  23.  
  24. static char ISC_FAR *create_tbl  = "CREATE TABLE dbinfo (when_created DATE)";
  25. static char ISC_FAR *insert_date = "INSERT INTO dbinfo VALUES ('NOW')";
  26.  
  27. int main (ARG(int, argc), ARG(char **, argv))
  28. ARGLIST(int argc)
  29. ARGLIST(char **argv) 
  30. {
  31.     isc_db_handle   newdb = NULL;          /* database handle */
  32.     isc_tr_handle   trans = NULL;          /* transaction handle */
  33.     long            status[20];            /* status vector */
  34.     long            sqlcode;               /* SQLCODE  */
  35.     char            create_db[160];        /* 'create database' statement */
  36.     char            new_dbname[128];
  37.  
  38.     if (argc > 1)
  39.         strcpy(new_dbname, argv[1]);
  40.     else
  41.         strcpy(new_dbname, "new.gdb");
  42.  
  43.     /*
  44.      *    Construct a 'create database' statement.
  45.      *    The database name could have been passed as a parameter.
  46.      */
  47.     sprintf(create_db, "CREATE DATABASE '%s'", new_dbname);
  48.     
  49.     /*
  50.      *    Create a new database.
  51.      *    The database handle is zero.
  52.      */
  53.     
  54.     if (isc_dsql_execute_immediate(status, &newdb, &trans, 0, create_db, 1,
  55.                                    NULL))
  56.     {
  57.         /* Extract SQLCODE from the status vector. */
  58.         sqlcode = isc_sqlcode(status);
  59.  
  60.         /* Print a descriptive message based on the SQLCODE. */
  61.         if (sqlcode == -902)
  62.         {
  63.             printf("\nDatabase already exists.\n");
  64.             printf("Remove %s before running this program.\n\n", new_dbname);
  65.         }
  66.  
  67.         /* In addition, print a standard error message. */
  68.         if (pr_error(status, "create database"))
  69.             return 1;
  70.     }
  71.  
  72.     isc_commit_transaction(status, &trans);
  73.     printf("Created database '%s'.\n\n", new_dbname);
  74.  
  75.     /*
  76.      *    Connect to the new database and create a sample table.
  77.      */
  78.  
  79.     /* newdb will be set to null on success */ 
  80.     isc_detach_database(status, &newdb);
  81.  
  82.     if (isc_attach_database(status, 0, new_dbname, &newdb, 0, NULL))
  83.         if (pr_error(status, "attach database"))
  84.             return 1;
  85.  
  86.  
  87.     /* Create a sample table. */
  88.     isc_start_transaction(status, &trans, 1, &newdb, 0, NULL);
  89.     if (isc_dsql_execute_immediate(status, &newdb, &trans, 0, create_tbl, 1, NULL))
  90.         if (pr_error(status, "create table"))
  91.             return 1;
  92.     isc_commit_transaction(status, &trans);
  93.  
  94.     /* Insert 1 row into the new table. */
  95.     isc_start_transaction(status, &trans, 1, &newdb, 0, NULL);
  96.     if (isc_dsql_execute_immediate(status, &newdb, &trans, 0, insert_date, 1, NULL))
  97.         if (pr_error(status, "insert into"))
  98.             return 1;
  99.     isc_commit_transaction(status, &trans);
  100.  
  101.     printf("Successfully accessed the newly created database.\n\n");
  102.  
  103.     isc_detach_database(status, &newdb);
  104.  
  105.     return 0;
  106. }            
  107.  
  108. /*
  109.  *    Print the status, the SQLCODE, and exit.
  110.  *    Also, indicate which operation the error occured on.
  111.  */
  112. int pr_error (ARG(long ISC_FAR *, status), ARG(char ISC_FAR *, operation))
  113. ARGLIST(long ISC_FAR * status)
  114. ARGLIST(char ISC_FAR * operation)                                         
  115. {
  116.     printf("[\n");
  117.     printf("PROBLEM ON \"%s\".\n", operation);
  118.  
  119.     isc_print_status(status);
  120.  
  121.     printf("SQLCODE:%d\n", isc_sqlcode(status));
  122.  
  123.     printf("]\n");
  124.  
  125.     return 1;
  126. }
  127.