home *** CD-ROM | disk | FTP | other *** search
/ PC World 1997 November / PCWorld_1997-11_cd.bin / software / programy / komix / DATA.Z / DBObject.pc < prev    next >
Text File  |  1996-05-31  |  3KB  |  141 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.pc    1.1
  17.  *    Original date    : November 1995
  18.  *    Description    : Base Class for all Database Classes
  19.  *
  20.  *---------------------------------------------------------------------------
  21.  */
  22. static const char SccsId[]="@(#)DBObject.pc    1.1\t20 Dec 1995 Copyright 1995 Cadre Technologies Inc.";
  23.  
  24. EXEC SQL INCLUDE sqlca;
  25.  
  26. #include "stream.h"
  27. #include <string.h>
  28.  
  29. #ifndef DBOBJECT_HXX
  30. #include "DBObject.hxx"
  31. #endif
  32.  
  33. #ifndef SQLPRINT_HXX
  34. #include "SqlPrint.hxx"
  35. #endif
  36.  
  37. EXEC SQL WHENEVER SQLERROR DO sqlprint();
  38.  
  39. DBObject::DBObject(const RWCString &name) :
  40.     dbState(CREATED),
  41.     className(name)
  42. {
  43. }
  44.  
  45. DBObject::~DBObject()
  46. {
  47. }
  48.  
  49. //
  50. // Connect database for automatic logons (OPS$username accounts)
  51. //
  52.  
  53. int DBObject::connectDB()
  54. {
  55.     EXEC SQL BEGIN DECLARE SECTION;
  56.     char name[2];
  57.     EXEC SQL END DECLARE SECTION;
  58.  
  59.     strcpy(name, "/");
  60.  
  61.     EXEC SQL CONNECT :name;
  62.  
  63.     if (sqlca.sqlcode != 0)
  64.         return -1;
  65.  
  66.     return 0;
  67. }
  68.  
  69. //
  70. // Connect database using name and password
  71. //
  72.  
  73. int DBObject::connectDB(const char *userName, const char *password)
  74. {
  75.     EXEC SQL BEGIN DECLARE SECTION;
  76.     char name[81];
  77.     char word[81];
  78.     EXEC SQL END DECLARE SECTION;
  79.  
  80.     strcpy(name, userName);
  81.     strcpy(word, password);
  82.  
  83.     EXEC SQL CONNECT :name IDENTIFIED BY :word;
  84.  
  85.     if (sqlca.sqlcode != 0)
  86.         return -1;
  87.  
  88.     return 0;
  89. }
  90.  
  91. int DBObject::beginWork()
  92. {
  93.     //
  94.     // Not needed in Oracle: you are always inside a transaction
  95.     //
  96.  
  97.     return 0;
  98. }
  99.  
  100. int DBObject::commit()
  101. {
  102.     EXEC SQL COMMIT work;
  103.     return sqlca.sqlcode != 0 ? -1 : 0;
  104. }
  105.  
  106. int DBObject::rollback()
  107. {
  108.     EXEC SQL ROLLBACK work;
  109.     return sqlca.sqlcode != 0 ? -1 : 0;
  110. }
  111.  
  112. int DBObject::notFound()
  113. {
  114.     return ((dbState == SQL_ERROR) && (sqlca.sqlcode > 0));
  115. }
  116.  
  117. void DBObject::resetState()
  118. {
  119.     dbState = CREATED;
  120. }
  121.  
  122. int DBObject::processSqlStatus()
  123. {
  124.     switch (dbState) {
  125.     case CREATED:
  126.     case NORMAL:
  127.         if (sqlca.sqlcode != 0) {
  128.             dbState = SQL_ERROR;
  129.             return -1;
  130.         } else {
  131.             dbState = NORMAL;
  132.             return 0;
  133.         }
  134.     case SQL_ERROR:
  135.     case TYPE_ERROR:
  136.         return -1;
  137.     }
  138.     return -1;
  139. }
  140.  
  141.