home *** CD-ROM | disk | FTP | other *** search
/ Borland Programmer's Resource / Borland_Programmers_Resource_CD_1995.iso / code / kdbf / bstatmnt.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-19  |  3.2 KB  |  170 lines

  1. /**********************************************************************
  2. **
  3. **                         BSTATMNT.CPP
  4. **
  5. ** Member functions of the BStatement class.  
  6. **
  7. **********************************************************************/
  8.  
  9. // DBF - (C) Copyright 1994 by Borland International
  10.  
  11. #include "kdbf.h"
  12. #pragma hdrstop
  13.  
  14. BStatement::BStatement(BDatabase *db)
  15. {
  16.     stmtDb = db;
  17.     isOpen = FALSE;
  18.     hStmt = 0;
  19.     lastError = DBIERR_NONE;
  20. }
  21.  
  22. BStatement::~BStatement()
  23. {
  24.     close();
  25. }
  26.  
  27. Retcode BStatement::close(void)
  28. {
  29.     if (!isOpen)
  30.     {
  31.         return (lastError = PXERR_STATEMENTNOTOPEN);
  32.     }
  33.  
  34.     if (hStmt)
  35.     {
  36.         lastError = DbiQFree(&hStmt);
  37.     }
  38.  
  39.     hStmt = 0;
  40.     isOpen = FALSE;
  41.  
  42.     return lastError;
  43. }
  44.  
  45. Retcode BStatement::open(const char *QryString,
  46.                          DBIQryLang QryLang)
  47. {
  48.     if (isOpen)
  49.     {
  50.         return (lastError = PXERR_STATEMENTOPEN);
  51.     }
  52.  
  53.     lastError = DbiQPrepare(stmtDb->hDb, QryLang, (pCHAR)QryString, &hStmt);
  54.     if (lastError)
  55.     {
  56.         hStmt = 0;
  57.         return lastError;
  58.     }
  59.  
  60.     isOpen = TRUE;
  61.  
  62.     return lastError;
  63. }
  64.  
  65. Retcode BStatement::execute(BCursor &answer)
  66. {
  67.     TABLEHANDLE tabH = 0;
  68.  
  69.     if (!isOpen)
  70.     {
  71.         return (lastError = PXERR_STATEMENTNOTOPEN);
  72.     }
  73.  
  74.     lastError = DbiQExec(hStmt, &tabH);
  75.     if (lastError)
  76.     {
  77.         return lastError;
  78.     }
  79.  
  80.     // Check if a Table Handle was returned (not returned for all
  81.     //  queries, such as inserts.
  82.     if (tabH)
  83.     {
  84.         lastError = answer.attach(stmtDb, tabH);
  85.         DbiCloseCursor(&tabH);
  86.     }
  87.  
  88.     return lastError;
  89. }
  90.  
  91. Retcode BStatement::setProp(UINT32 prop, UINT32 value)
  92. {
  93.     if (!isOpen)
  94.     {
  95.         lastError = PXERR_STATEMENTNOTOPEN;
  96.         return lastError;
  97.     }
  98.  
  99.     lastError = DbiSetProp((hDBIObj)hStmt, prop, value);
  100.  
  101.     return lastError;
  102. }
  103.  
  104. Retcode BStatement::setLive(LIVENESS live)
  105. {
  106.     if (!isOpen)
  107.     {
  108.         lastError = PXERR_STATEMENTNOTOPEN;
  109.         return lastError;
  110.     }
  111.  
  112.     lastError = DbiSetProp((hDBIObj)hStmt, stmtLIVENESS, live);
  113.  
  114.     return lastError;
  115. }
  116.  
  117. Retcode BStatement::getProp(UINT32 prop, pVOID value, UINT16 maxLen,
  118.                             UINT16 &retLen)
  119. {
  120.     if (!isOpen)
  121.     {
  122.         lastError = PXERR_STATEMENTNOTOPEN;
  123.         return lastError;
  124.     }
  125.  
  126.     lastError = DbiGetProp((hDBIObj)hStmt, prop, value, maxLen, &retLen);
  127.  
  128.     return lastError;
  129. }
  130.  
  131. Retcode BStatement::setParameters(UINT16 numFields, pFLDDesc fldDescs,
  132.                                   pBYTE recBuf)
  133. {
  134.     if (!isOpen)
  135.     {
  136.         lastError = PXERR_STATEMENTNOTOPEN;
  137.         return lastError;
  138.     }
  139.  
  140.     lastError = DbiQSetParams(hStmt, numFields, fldDescs, recBuf);
  141.  
  142.     return lastError;
  143. }                                                               
  144.  
  145. hDBIStmt BStatement::getHandle(void)
  146. {
  147.     if (!isOpen)
  148.     {
  149.         lastError = PXERR_STATEMENTNOTOPEN;
  150.         return 0;
  151.     }
  152.  
  153.     lastError = DBIERR_NONE;
  154.     
  155.     return hStmt;
  156. }
  157.  
  158. char * BStatement::nameOf() const
  159. {
  160.     return("BStatement");
  161. }
  162.  
  163. void BStatement::printOn(ostream& os)
  164. {
  165.     os << nameOf()
  166.        << "Open Status = "
  167.        << (int) isOpen << endl;
  168. }
  169.  
  170.