home *** CD-ROM | disk | FTP | other *** search
/ Freelog 42 / Freelog042.iso / Alu / Ancestrologie / Sources / InterBase_WI-V6.0.1-server.ZIP / examples / api / api16t.c < prev    next >
C/C++ Source or Header  |  2001-01-05  |  5KB  |  182 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.  * The contents of this file are subject to the Interbase Public
  14.  * License Version 1.0 (the "License"); you may not use this file
  15.  * except in compliance with the License. You may obtain a copy
  16.  * of the License at http://www.Inprise.com/IPL.html
  17.  *
  18.  * Software distributed under the License is distributed on an
  19.  * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express
  20.  * or implied. See the License for the specific language governing
  21.  * rights and limitations under the License.
  22.  *
  23.  * The Original Code was created by Inprise Corporation
  24.  * and its predecessors. Portions created by Inprise Corporation are
  25.  *
  26.  * Copyright (C) 2000 Inprise Corporation
  27.  * All Rights Reserved.
  28.  * Contributor(s): ______________________________________.
  29.  */
  30.  
  31. #include <stdlib.h>
  32. #include <stdio.h>
  33. #include <string.h>
  34. #include "example.h"
  35. #include <ibase.h>
  36.  
  37.  
  38. int main (ARG(int, argc), ARG(char **, argv))
  39. ARGLIST(int argc)
  40. ARGLIST(char **argv)
  41. {        
  42.     struct {
  43.         short    len;
  44.         char    data [9];
  45.     } po_number;
  46.     short               nullind = 0;
  47.     isc_stmt_handle     stmt = NULL;     /* statement handle */
  48.     isc_db_handle       DB = NULL;       /* database handle */
  49.     isc_tr_handle       trans = NULL;    /* transaction handle */
  50.     long                status[20];      /* status vector */
  51.     XSQLDA  ISC_FAR *   sqlda;
  52.     char                empdb[128];
  53.     char                *delete_str =
  54.         "DELETE FROM sales WHERE po_number LIKE 'VNEW%'";
  55.     char                *insert_str =
  56.         "INSERT INTO sales (po_number, cust_no, order_status, total_value) \
  57.         VALUES (?, 1015, 'new', 0)";
  58.  
  59.     if (argc > 1)
  60.         strcpy(empdb, argv[1]);
  61.     else
  62.         strcpy(empdb, "employee.gdb");
  63.  
  64.     if (isc_attach_database(status, 0, empdb, &DB, 0, NULL))
  65.     {
  66.         ERREXIT(status, 1)
  67.     }
  68.  
  69.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  70.     {
  71.         ERREXIT(status, 1)
  72.     }
  73.  
  74.     /* Allocate an input SQLDA for po_number in insert string. */
  75.     sqlda = (XSQLDA ISC_FAR *) malloc(XSQLDA_LENGTH(1));
  76.     sqlda->sqln = 1;
  77.     sqlda->sqld = 1;
  78.     sqlda->version = 1;
  79.  
  80.     /* Allocate a statement. */
  81.     if (isc_dsql_allocate_statement(status, &DB, &stmt))
  82.     {
  83.         ERREXIT(status, 1)
  84.     }
  85.  
  86.     /* Start out by deleting any existing records */
  87.  
  88.     if (isc_dsql_execute_immediate(status, &DB, &trans, 0, delete_str,
  89.                                    1, NULL))
  90.     {
  91.         ERREXIT(status, 2)
  92.     }
  93.  
  94.     if (isc_commit_transaction(status, &trans))
  95.     {
  96.         ERREXIT(status, 2)
  97.     }
  98.  
  99.  
  100.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  101.     {
  102.         ERREXIT(status, 3)
  103.     }
  104.  
  105.     /* Insert three records in one transaction */
  106.     if (isc_dsql_prepare(status, &trans, &stmt, 0, insert_str, 1, NULL))
  107.     {
  108.         ERREXIT(status, 4)
  109.     }
  110.     if (isc_dsql_describe_bind(status, &stmt, 1, sqlda))
  111.     {
  112.         ERREXIT(status, 5)
  113.     }
  114.  
  115.     sqlda->sqlvar[0].sqltype = SQL_VARYING + 1;
  116.     sqlda->sqlvar[0].sqllen  = sizeof (po_number.data);
  117.     sqlda->sqlvar[0].sqldata = (char *) &po_number;
  118.     sqlda->sqlvar[0].sqlind  = &nullind;
  119.  
  120.     /* Add batch 1. */
  121.     po_number.len = strlen("VNEW1");
  122.     strncpy(po_number.data, "VNEW1", 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.     po_number.len = strlen("VNEW2");
  130.     strncpy(po_number.data, "VNEW2", sizeof (po_number.data));
  131.     printf("api16t:  Adding %s\n", po_number.data);
  132.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  133.     {
  134.         ERREXIT(status, 6)
  135.     }
  136.  
  137.     po_number.len = strlen("VNEW3");
  138.     strncpy(po_number.data, "VNEW3", sizeof (po_number.data));
  139.     printf("api16t:  Adding %s\n", po_number.data);
  140.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  141.     {
  142.         ERREXIT(status, 6)
  143.     }
  144.  
  145.     /* This will fire the triggers for the first three records */
  146.     if (isc_commit_transaction(status, &trans))
  147.     {
  148.         ERREXIT(status, 7)
  149.     }
  150.      
  151.     /* Add batch 2. */
  152.     if (isc_start_transaction(status, &trans, 1, &DB, 0, NULL))
  153.     {
  154.         ERREXIT(status, 8)
  155.     }
  156.  
  157.     po_number.len = strlen("VNEW4");
  158.     strncpy(po_number.data, "VNEW4", sizeof (po_number.data));
  159.     printf("api16t:  Adding %s\n", po_number.data);
  160.     if (isc_dsql_execute(status, &trans, &stmt, 1, sqlda))
  161.     {
  162.         ERREXIT(status, 9)
  163.     }
  164.  
  165.     if (isc_dsql_free_statement(status, &stmt, DSQL_drop))
  166.     {
  167.         ERREXIT(status, 10)
  168.     }
  169.  
  170.     /* This will fire the triggers for the fourth record */
  171.     if (isc_commit_transaction(status, &trans))
  172.     {
  173.         ERREXIT(status, 11)
  174.     }
  175.  
  176.     isc_detach_database(status, &DB);
  177.  
  178.     free(sqlda);
  179.  
  180.     return 0;
  181. }
  182.