home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / DBObject.cxx < prev    next >
C/C++ Source or Header  |  1996-05-31  |  4KB  |  200 lines

  1. /*---------------------------------------------------------------------------
  2.  *
  3.  * Copyright (c) 1995 by Cadre Technologies Inc.
  4.  *
  5.  * This software is furnished under a license and may be used only in
  6.  * accordance with the terms of such license and with the inclusion of
  7.  * the above copyright notice. This software or any other copies thereof
  8.  * may not be provided or otherwise made available to any other person.
  9.  * No title to and ownership of the software is hereby transferred.
  10.  *
  11.  * The information in this software is subject to change without notice
  12.  * and should not be construed as a commitment by Cadre Technologies Inc.
  13.  *
  14.  *---------------------------------------------------------------------------
  15.  *
  16.  *      File            : @(#)DBObject.cxx    1.6 17 Jan 1996
  17.  *      Original date   : 01-Dec-1995
  18.  *      Description     : Base Class for all Database Classes
  19.  *
  20.  *---------------------------------------------------------------------------
  21.  */
  22. static const char SccsId[]="@(#)DBObject.cxx    1.6 17 Jan 1996 Copyright 1995 Cadre Technologies Inc.";
  23.  
  24. #include <stdlib.h>
  25. #include <string.h>
  26.  
  27. #ifndef DBOBJECT_HXX
  28. #include "DBObject.hxx"
  29. #endif
  30.  
  31. #ifndef SQLPRINT_HXX
  32. #include "SqlPrint.hxx"
  33. #endif
  34.  
  35. PDBPROCESS DBObject::dbproc;
  36. PDBPROCESS DBObject::dbproc2;
  37.  
  38. DBObject::DBObject(const String &name) :
  39.     dbState(CREATED),
  40.     className(name)
  41. {
  42. }
  43.  
  44. DBObject::~DBObject()
  45. {
  46. }
  47.  
  48. int DBObject::connectDB(const char *name)
  49. {
  50.     PLOGINREC login;
  51.  
  52.     // Install error and message handlers
  53.     dberrhandle (err_handler);
  54.     dbmsghandle (msg_handler);
  55.  
  56.     // Initialize DB-library
  57.     dbinit();
  58.  
  59.     // Get a LOGINREC
  60.     login = dblogin();
  61.  
  62.     // Get username
  63.     char username[80];
  64.     char *usernamePtr=getenv("DBUSERNAME");
  65.     if (usernamePtr==NULL) {
  66.         usernamePtr=getenv("USERNAME");
  67.         if (usernamePtr==NULL)
  68.             usernamePtr="default";
  69.     }
  70.     strcpy(username,usernamePtr);
  71.  
  72.     // Get password
  73.     char passwd[80];
  74.     char *passwdPtr=getenv("DBPASSWD");
  75.     if (passwdPtr==NULL)
  76.         strcpy(passwd,"default");
  77.     else
  78.         strcpy(passwd,passwdPtr);
  79.  
  80.     DBSETLUSER(login, username);
  81.     DBSETLPWD (login, passwd);
  82.  
  83.     // Setup a connection to a database server
  84.     char servername[80];
  85.     char *servernamePtr=getenv("DBSERVER");
  86.     if (servernamePtr==NULL)
  87.         strcpy(servername,"");
  88.     else
  89.         strcpy(servername,servernamePtr);
  90.  
  91.     dbproc=dbopen(login, servername);
  92.     dbproc2=dbopen(login, servername);
  93.  
  94.     // Free storage allocated with dblogin
  95.     dbfreelogin(login);
  96.  
  97.     // Use the requested database
  98.     if (dbproc!=0) {
  99.         dbcmd(dbproc,"USE ");
  100.         dbcmd(dbproc,name);
  101.         if (dbsqlexec(dbproc)!=SUCCEED)
  102.             return -1;
  103.         if (dbresults(dbproc)==FAIL)
  104.             return -1;
  105.     } else {
  106.         return -1;
  107.     }
  108.     if (dbproc2!=0) {
  109.         dbcmd(dbproc2,"USE ");
  110.         dbcmd(dbproc2,name);
  111.         if (dbsqlexec(dbproc2)!=SUCCEED)
  112.             return -1;
  113.         if (dbresults(dbproc2)==FAIL)
  114.             return -1;
  115.     } else {
  116.         return -1;
  117.     }
  118.     return 0;
  119. }
  120.  
  121. int DBObject::beginWork()
  122. {
  123.     dbcmd(dbproc,"BEGIN TRANSACTION");
  124.     int retval=dbsqlexec(dbproc)!=SUCCEED?-1:0;
  125.     if (retval==0) {
  126.         retval=dbresults(dbproc)==FAIL?-1:0;
  127.     }
  128.     return retval;
  129. }
  130.  
  131. int DBObject::commit()
  132. {
  133.     dbcmd(dbproc,"COMMIT TRANSACTION");
  134.     int retval=dbsqlexec(dbproc)!=SUCCEED?-1:0;
  135.     if (retval==0) {
  136.         retval=dbresults(dbproc)==FAIL?-1:0;
  137.     }
  138.     return retval;
  139. }
  140.  
  141. int DBObject::saveTrans(const char *savepoint)
  142. {
  143.     dbfcmd(dbproc,"SAVE TRANSACTION %s",savepoint);
  144.     int retval=dbsqlexec(dbproc)!=SUCCEED?-1:0;
  145.     if (retval==0) {
  146.         retval=dbresults(dbproc)==FAIL?-1:0;
  147.     }
  148.     return retval;
  149. }
  150.  
  151. int DBObject::rollback()
  152. {
  153.     dbcmd(dbproc,"ROLLBACK TRANSACTION");
  154.     int retval=dbsqlexec(dbproc)!=SUCCEED?-1:0;
  155.     if (retval==0) {
  156.         retval=dbresults(dbproc)==FAIL?-1:0;
  157.     }
  158.     return retval;
  159. }
  160.     
  161. int DBObject::rollback(const char *savepoint)
  162. {
  163.     dbfcmd(dbproc,"ROLLBACK TRANSACTION %s",savepoint);
  164.     int retval=dbsqlexec(dbproc)!=SUCCEED?-1:0;
  165.     if (retval==0) {
  166.         retval=dbresults(dbproc)==FAIL?-1:0;
  167.     }
  168.     return retval;
  169. }
  170.  
  171. int DBObject::notFound()
  172. {
  173.     return dbState == SQL_ERROR;
  174. }
  175.  
  176. void DBObject::resetState()
  177. {
  178.     dbState = CREATED;
  179. }
  180.  
  181. int DBObject::processSqlStatus()
  182. {
  183.     switch (dbState) {
  184.     case CREATED:
  185.     case NORMAL:
  186.         if (dberrorcode != 0) {
  187.             dbState = SQL_ERROR;
  188.             return -1;
  189.         } else {
  190.             dbState = NORMAL;
  191.             return 0;
  192.         }
  193.     case SQL_ERROR:
  194.     case TYPE_ERROR:
  195.         return -1;
  196.     }
  197.     return -1;
  198. }
  199.  
  200.