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

  1. /*
  2.  *  Program type:   API
  3.  *
  4.  *  Description:
  5.  *        If run from a Windows 3.1 Client, the winevent program
  6.  *        should be started before running this program and should
  7.  *        be terminated upon the completion of this program.
  8.  *        For other platforms, this program should be run in
  9.  *        conjunction with api16.
  10.  *
  11.  *        This Program adds some sales records, in order to trigger
  12.  *        the event that api16 or winevent is waiting for.
  13.  */
  14.  
  15. #include <stdlib.h>
  16. #include <stdio.h>
  17. #include <string.h>
  18. #include "example.h"
  19. #include <ibase.h>
  20.  
  21.  
  22. int main (ARG(int, argc), ARG(char **, argv))
  23. ARGLIST(int argc)
  24. ARGLIST(char **argv)
  25. {        
  26.     struct {
  27.         short    len;
  28.         char    data [9];
  29.     } po_number;
  30.     short               nullind = 0;
  31.     isc_stmt_handle     stmt = NULL;     /* statement handle */
  32.     isc_db_handle       DB = NULL;       /* database handle */
  33.     isc_tr_handle       trans = NULL;    /* transaction handle */
  34.     long                status[20];      /* status vector */
  35.     XSQLDA  ISC_FAR *   sqlda;
  36.     char                empdb[128];
  37.     char                *delete_str =
  38.         "DELETE FROM sales WHERE po_number LIKE 'VNEW%'";
  39.     char                *insert_str =
  40.         "INSERT INTO sales (po_number, cust_no, order_status, total_value) \
  41.         VALUES (?, 1015, 'new', 0)";
  42.  
  43.     if (argc > 1)
  44.         strcpy(empdb, argv[1]);
  45.     else
  46.         strcpy(empdb, "employee.gdb");
  47.  
  48.     if (isc_attach_database(status, 0, empdb, &DB, 0, NULL))
  49.     {
  50.         ERREXIT(status, 1)
  51.     }
  52.  
  53.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  54.     {
  55.         ERREXIT(status, 1)
  56.     }
  57.  
  58.     /* Allocate an input SQLDA for po_number in insert string. */
  59.     sqlda = (XSQLDA ISC_FAR *) malloc(XSQLDA_LENGTH(1));
  60.     sqlda->sqln = 1;
  61.     sqlda->sqld = 1;
  62.     sqlda->version = 1;
  63.  
  64.     /* Allocate a statement. */
  65.     if (isc_dsql_allocate_statement(status, &DB, &stmt))
  66.     {
  67.         ERREXIT(status, 1)
  68.     }
  69.  
  70.     /* Start out by deleting any existing records */
  71.  
  72.     if (isc_dsql_execute_immediate(status, &DB, &trans, 0, delete_str,
  73.                                    1, NULL))
  74.     {
  75.         ERREXIT(status, 2)
  76.     }
  77.  
  78.     if (isc_commit_transaction(status, &trans))
  79.     {
  80.         ERREXIT(status, 2)
  81.     }
  82.  
  83.  
  84.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  85.     {
  86.         ERREXIT(status, 3)
  87.     }
  88.  
  89.     /* Insert three records in one transaction */
  90.     if (isc_dsql_prepare(status, &trans, &stmt, 0, insert_str, 1, NULL))
  91.     {
  92.         ERREXIT(status, 4)
  93.     }
  94.     if (isc_dsql_describe_bind(status, &stmt, 1, sqlda))
  95.     {
  96.         ERREXIT(status, 5)
  97.     }
  98.  
  99.     sqlda->sqlvar[0].sqltype = SQL_VARYING + 1;
  100.     sqlda->sqlvar[0].sqllen  = sizeof (po_number.data);
  101.     sqlda->sqlvar[0].sqldata = (char *) &po_number;
  102.     sqlda->sqlvar[0].sqlind  = &nullind;
  103.  
  104.     /* Add batch 1. */
  105.     po_number.len = strlen("VNEW1");
  106.     strncpy(po_number.data, "VNEW1", sizeof (po_number.data));
  107.     printf("api16t:  Adding %s\n", po_number.data);
  108.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  109.     {
  110.         ERREXIT(status, 6)
  111.     }
  112.  
  113.     po_number.len = strlen("VNEW2");
  114.     strncpy(po_number.data, "VNEW2", sizeof (po_number.data));
  115.     printf("api16t:  Adding %s\n", po_number.data);
  116.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  117.     {
  118.         ERREXIT(status, 6)
  119.     }
  120.  
  121.     po_number.len = strlen("VNEW3");
  122.     strncpy(po_number.data, "VNEW3", sizeof (po_number.data));
  123.     printf("api16t:  Adding %s\n", po_number.data);
  124.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  125.     {
  126.         ERREXIT(status, 6)
  127.     }
  128.  
  129.     /* This will fire the triggers for the first three records */
  130.     if (isc_commit_transaction(status, &trans))
  131.     {
  132.         ERREXIT(status, 7)
  133.     }
  134.      
  135.     /* Add batch 2. */
  136.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  137.     {
  138.         ERREXIT(status, 8)
  139.     }
  140.  
  141.     po_number.len = strlen("VNEW4");
  142.     strncpy(po_number.data, "VNEW4", sizeof (po_number.data));
  143.     printf("api16t:  Adding %s\n", po_number.data);
  144.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  145.     {
  146.         ERREXIT(status, 9)
  147.     }
  148.  
  149.     if (isc_dsql_free_statement(status, &stmt, DSQL_drop))
  150.     {
  151.         ERREXIT(status, 10)
  152.     }
  153.  
  154.     /* This will fire the triggers for the fourth record */
  155.     if (isc_commit_transaction(status, &trans))
  156.     {
  157.         ERREXIT(status, 11)
  158.     }
  159.  
  160.     isc_detach_database(status, &DB);
  161.  
  162.     free(sqlda);
  163.  
  164.     return 0;
  165. }
  166.