home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 February / PCWK0296.iso / po7_win / object10 / oracl.h < prev    next >
C/C++ Source or Header  |  1995-04-04  |  34KB  |  923 lines

  1. /* Copyright (c) Oracle Corporation 1994.  All Rights Reserved */
  2.  
  3. /*
  4.     This source code is provided as a debugging aid for developers
  5.     who have purchased Oracle Objects for OLE    .  Please see the
  6.     online help for documentation of these classes.
  7. */
  8.  
  9. /*
  10.     Oracle Objects for OLE     C++ Classes
  11.     
  12.     This file is the header for the basic classes.  That is, all the
  13.     classes except OBound and OBinder (which use the obound.h header)
  14.                            
  15.     CREATED    ********   11/22/94
  16.     RWOOLARD    MODIFIED    03/20/95
  17.                 bug#    262914    *ErrorText should return const char *
  18.                         262723    Added overloaded OParameter.Add(..., OValue)    
  19. */
  20.  
  21. #ifndef ORACL_ORACLE
  22. #define ORACL_ORACLE
  23.  
  24. // compiler specific defines
  25. #ifdef _MSC_VER
  26. #define OEXPORT _export
  27. #define OHUGESP
  28. #endif
  29.  
  30. #ifdef __BORLANDC__
  31. #define OEXPORT _export
  32. #define OHUGESP
  33. #endif
  34.  
  35. #ifndef OEXPORT
  36. #define OEXPORT
  37. #define OHUGESP
  38. #endif
  39.  
  40. // handy boolean type
  41. typedef int oboolean;
  42. // simple success return value
  43. typedef int oresult;
  44.  
  45. // oresults can have one of the following values
  46. #define OSUCCESS 0
  47. #define OFAILURE 101
  48.  
  49. // error numbers returned by the ErrorNumber method.
  50.  
  51. // ----- error numbers
  52. #define OERROR_NONE 0  // there isn't an error
  53.  
  54. #define OERROR_NOINTER 11  // we couldn't get a needed interface
  55. #define OERROR_MEMORY 12  // memory allocation problem              
  56. #define OERROR_BADERR 13  // error in error handling (!)
  57. #define OERROR_INVPARENT 14 // parent object on open is invalid (not open)
  58. #define OERROR_SYSTEM 15     // some system error
  59. #define OERROR_NOTOPEN 16   // attempt to use unopened object
  60. #define OERROR_BADARG 17    // bad argument to routine
  61. #define OERROR_INVRECORD 18 // the current record is invalid
  62. #define    OERROR_BADTYPE 19   // invalid operation on an Oracle data type
  63.  
  64. #define OERROR_ADVISEULINK 4096  // not an advisory connection
  65. #define OERROR_DBCONNECT 4097  // connection not made
  66. #define OERROR_POSITION 4098  // invalid database position
  67. #define OERROR_NOFIELDNAME 4099  // field not found
  68. #define OERROR_NOFIELDINDEX 4100  // invalid field index
  69. #define OERROR_TRANSIP 4101  // transaction already in progress
  70. #define OERROR_SCHEMAERR 4102  // error retreiving table definition
  71. #define OERROR_ORLONERR 4103  // unable to make connection
  72. #define OERROR_TRANSNIPC 4104  // commit when no transaction 
  73. #define OERROR_TRANSNIPR 4105 // rollback when no transaction
  74. #define OERROR_NODSET 4106  // no such dynaset attached to connection
  75. #define OERROR_INVROWNUM 4108  // invalid row reference
  76. #define OERROR_TEMPFILE 4109  // error creating temporary file
  77. #define OERROR_DUPSESSION 4110  // duplicate session name
  78. #define OERROR_NOSESSION 4111   // no such session on detach
  79. #define OERROR_NOOBJECTN 4112  // no object with specified name
  80. #define OERROR_DUPCONN 4113  // duplicate connection
  81. #define OERROR_NOCONN 4114  // no such connection on detach
  82. #define OERROR_BFINDEX 4115  // invalid field index
  83. #define OERROR_CURNREADY 4116  // cursor not ready
  84. #define OERROR_NOUPDATES 4117  // updates not allowed
  85. #define OERROR_NOTEDITING 4118  // not currently editing
  86. #define OERROR_DATACHANGE 4119  // data has changed since last read
  87. #define OERROR_NOBUFMEM 4120  // no memory for binding buffers
  88. #define OERROR_INVBKMRK 4121  // invalid bookmark
  89. #define OERROR_BNDVNOEN 4122  // bind variable not enabled
  90. #define OERROR_DUPPARAM 4123  // duplicate parameter name
  91. #define OERROR_INVARGVAL 4124  // invalid argument value
  92. #define OERROR_INVFLDTYPE 4125  // invalid field type
  93. #define OERROR_NOTIMPL 4126  // operation not implemented
  94. #define OERROR_TRANSFORUP 4127  // For Update detected, no transaction
  95. #define OERROR_NOTUPFORUP 4128  // For Update detected, not updatable
  96.  
  97. #define OERROR_ECURSOR 8193  // cannot create cursor
  98. #define OERROR_FETCHERR 8194  // error fetching field
  99. #define OERROR_BINDERR 8195  // output data binding error
  100. #define OERROR_SQLERR 8196  // error in SQL statement
  101. #define OERROR_ESQLEXEC 8197  // SQL execution error
  102. #define OERROR_COMERR 8198  // error during commit
  103. #define OERROR_ROLERR 8199  // error during rollback
  104. #define OERROR_OPTERR 8200  // error setting options
  105. #define OERROR_CONNERR 8201  // unable to make connection
  106.  
  107. // server data types
  108. #define OTYPE_VARCHAR2 1
  109. #define OTYPE_NUMBER 2
  110. #define OTYPE_LONG 8
  111. #define OTYPE_ROWID 11
  112. #define OTYPE_DATE 12
  113. #define OTYPE_RAW 23
  114. #define OTYPE_LONGRAW 24
  115. #define OTYPE_CHAR 96
  116. #define OTYPE_MSLABEL 106
  117.  
  118. // edit modes for dynaset
  119. #define ODYNASET_EDIT_NOEDIT 0
  120. #define ODYNASET_EDIT_EDITING 1
  121. #define ODYNASET_EDIT_NEWRECORD 2
  122.  
  123. // parameter io types
  124. #define OPARAMETER_INVAR 1
  125. #define OPARAMETER_OUTVAR 2
  126. #define OPARAMETER_INOUTVAR 3
  127.  
  128. // parameter status flags
  129. #define OPARAMETER_STATUS_IN 1
  130. #define OPARAMETER_STATUS_OUT 2
  131. #define OPARAMETER_STATUS_AUTOENABLED 4
  132. #define OPARAMETER_STATUS_ENABLED 8
  133.  
  134. // Options for creating database
  135. #define ODATABASE_DEFAULT 0
  136. #define ODATABASE_PARTIAL_INSERT 1
  137. #define ODATABASE_EDIT_NOWAIT 2
  138.  
  139. // Options for creating dynaset
  140. #define ODYNASET_DEFAULT 0
  141. #define ODYNASET_NOBIND 1
  142. #define ODYNASET_KEEP_BLANKS 2
  143. #define ODYNASET_READONLY 4
  144. #define ODYNASET_NOCACHE 8
  145. #define    ODYNASET_NOMOVEFIRST 16
  146.  
  147. // definitions of actions used in the callback routines
  148. #define OADVISE_MOVE_FIRST 1
  149. #define OADVISE_MOVE_PREV 2
  150. #define OADVISE_MOVE_NEXT 3
  151. #define OADVISE_MOVE_LAST 4
  152. #define OADVISE_MOVE_TOMARK 5
  153. #define OADVISE_REFRESH 11
  154. #define OADVISE_DELETE 21
  155. #define OADVISE_ADDNEW 22
  156. #define OADVISE_UPDATE 24
  157. #define OADVISE_ROLLBACK 29
  158. #define OADVISE_FOUNDLAST 151
  159. #define OADVISE_OTHER 99
  160.  
  161.  
  162. // forward references
  163. class OEXPORT OSession;
  164. class OEXPORT OSessionCollection;
  165. class OEXPORT OClient;
  166. class OEXPORT OConnection;
  167. class OEXPORT OConnectionCollection;
  168. class OEXPORT ODatabase;
  169. class OEXPORT ODynaset;
  170. class OEXPORT ODynasetMark;
  171. class OEXPORT OField;
  172. class OEXPORT OFieldCollection;
  173. class OEXPORT OAdvise;
  174. class OEXPORT OParameter;
  175. class OEXPORT OParameterCollection;
  176. class OOLEvar;
  177.  
  178. // ------------------------------------------------------------
  179. // functions that are not class methods
  180.  
  181. // routine to initialize library.  Should be called once at startup 
  182. //    returns TRUE if successful, FALSE if not
  183. oboolean OEXPORT OStartup(void);
  184.  
  185. // routine to close down the library.  Should be called once
  186. //   at application shutdown
  187. void OEXPORT OShutdown(void);
  188.  
  189. // ----- OOracleObject -----------------------------------------------
  190. // base object class
  191. //   This class is the base for the OO4W classes.  By itself
  192. //   it provides the error reporting interface and helps with
  193. //   the various copying mechanisms
  194.  
  195. class OEXPORT OOracleObject
  196. {
  197. public:
  198.     // constructors & destructors
  199.     OOracleObject(void);
  200.     OOracleObject(const OOracleObject &other);
  201.     virtual ~OOracleObject(void);
  202.     
  203.     // overloaded operators
  204.     OOracleObject &operator=(const OOracleObject &other);
  205.     int operator==(const OOracleObject &other) const;
  206.     int operator!=(const OOracleObject &other) const;
  207.     
  208.     // properties
  209.     virtual oboolean IsOpen(void) const;
  210.     
  211.     // Error handling methods
  212.     long  ErrorNumber(void) const; // return error "number"
  213. //BUG #262914    
  214.     const char *LookupErrorText(long errnum) const;  // get error text for given error number
  215.     const char *GetErrorText(void) const;  // get description of last error
  216.  
  217.     // set error information
  218.     void  ErrorReset(void) const;  // reset error state to "no error"
  219.     // SetOtherError and SetInternalError are really for internal use
  220.     void  SetOtherError(void *otheri) const;
  221.     void  SetInternalError(long errnum) const;
  222.     
  223.     void *Internal(void) const;
  224.     
  225. protected:
  226.     // copy and cleanup routines (used to implement destructor, constructor, =)
  227.     virtual oresult Copy(const OOracleObject &other);
  228.     virtual oresult Cleanup(void);
  229.     
  230.     // access to object interface
  231.     oresult SetObjectInterface(void *obji, oboolean geterror = TRUE);
  232.  
  233.     oresult ActionStart(void) const;  // start of most of the methods
  234.     oresult ActionGetStart(const OOracleObject *nobj) const;
  235.  
  236. private:
  237.     void   *m_obji;   // pointer to object interface
  238.     void   *m_erri;   // pointer to error interface of object
  239.     void   *m_errotheri;  // pointer to error interface on other object
  240.     char   *m_lasterrstring;  // last error string we've handled
  241.     
  242.     int     m_errstate;   // where did the error come from (values in implementation)
  243.     long    m_errno;  // error number (see below, or negative for internal values)
  244. };
  245.  
  246. // ----- OOracleCollection -----------------------------------------------
  247. // general set class
  248. // This is a base class used for collections of sessions, connections and fields
  249. // It has no utility on its own.  Routines to get items from the collection are
  250. // in the subclasses
  251.  
  252. class OEXPORT OOracleCollection : public OOracleObject
  253. {
  254. public:
  255.  
  256.     // constructors & destructors
  257.     OOracleCollection(void);
  258.     OOracleCollection(const OOracleCollection &other);
  259.     ~OOracleCollection(void);
  260.     
  261.     // Open & Close
  262.     oresult Close(void);   // close the set
  263.     
  264.     // overloaded operators
  265.     OOracleCollection &operator=(const OOracleCollection &other);
  266.     
  267.     // # of items in the set
  268.     long   GetCount(void) const;
  269.  
  270. protected:
  271.     oresult OpenSetHelper(void *idisp, void *otheri, unsigned char stype);  // finish the work of opening the set
  272.     void  *GetItem(unsigned char stype, int index) const;
  273.  
  274. private:
  275.     unsigned char m_settype;
  276.     
  277.     // internal helper routines
  278.     oresult Cleanup(void);
  279.     oresult Copy(const OOracleCollection &other);
  280. };
  281.  
  282. // ----- OSession -----------------------------------------------
  283.  
  284. class OEXPORT OSession : public OOracleObject
  285. {
  286. public:
  287.     // construction & destruction
  288.     OSession(void);
  289.     OSession(const OSession &other); // copy constructor
  290.     OSession(const char *sname);     // construct & open (NULL sname means open default session)
  291.     ~OSession(void);
  292.     
  293.     // open the session
  294.     oresult Open(void);               // open the default session
  295.     oresult Open(const char *sname);  // open a new session with specific name
  296.     oresult Close(void);
  297.     
  298.     // Getting other objects
  299.     OConnectionCollection GetConnections(void) const;
  300.     OClient GetClient(void) const; 
  301.     static OSession GetNamedSession(const char *sname);
  302.  
  303.     // overloaded operators
  304.     OSession &operator=(const OSession &other);
  305.     
  306.     // error handling
  307.     long ServerErrorNumber(void) const;
  308.     const char *GetServerErrorText(void) const;
  309.     oresult ServerErrorReset(void);
  310.     
  311.     // get properties
  312.     const char       *GetName(void) const;   // returns session name 
  313.     const char       *GetVersion(void) const;  // returns version of Oracle Objects
  314.     
  315.     // transaction operations
  316.     oresult  BeginTransaction(void);  // start a transaction
  317.     oresult  Commit(oboolean startnew = FALSE);   // commit (may start new transaction)
  318.     oresult  Rollback(oboolean startnew = FALSE); // rolls back transaction (may start new transaction)
  319.     oresult  ResetTransaction(void);  // unconditionally rollback (no advisories)
  320.     
  321.     // function used by other classes to construct OSession objects (don't call this!)
  322.     oresult OpenHelper(void *idisp, void *otheri);
  323.  
  324. private:
  325.     char      *m_name;
  326.     char      *m_errtext;
  327.     char      *m_version;
  328.     
  329.     // internal helper routines
  330.     oresult Cleanup(void);
  331.     oresult Copy(const OSession &other);
  332.     
  333. };
  334.  
  335. // ----- OSessionCollection -----------------------------------------------
  336.  
  337. class OEXPORT OSessionCollection : public OOracleCollection
  338. {
  339. public:
  340.     OSession GetSession(int index) const;
  341.  
  342.     // function used by other classes to construct OSessionCollection objects (don't call this!)
  343.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  344. };
  345.  
  346. // ----- ODatabase -----------------------------------------------
  347.  
  348. class OEXPORT ODatabase : public OOracleObject
  349. {
  350. public:
  351.     // construction & destruction
  352.     ODatabase(void);
  353.     ODatabase(const ODatabase &other);
  354.     ~ODatabase(void); 
  355.     
  356.     // construct & open
  357.     ODatabase(const OSession &dbsess, const char *dbname, const char *username, const char *pwd, long options = ODATABASE_DEFAULT);
  358.     ODatabase(const char *dbname, const char *username, const char *pwd, long options = ODATABASE_DEFAULT);
  359.     
  360.     // for the Open calls, if pwd is NULL it is assumed that username contains username/password
  361.     
  362.     // open a database on a new session (implicitly creates a session)
  363.     oresult Open(const char *dbname, const char *username, const char *pwd, long options = ODATABASE_DEFAULT);
  364.     
  365.     // open a database on an existing session
  366.     oresult Open(const OSession &dbsess, const char *dbname, const char *username, const char *pwd, long options = ODATABASE_DEFAULT);
  367.     oresult Close(void);
  368.     
  369.     // getting other objects
  370.     OSession GetSession(void) const;
  371.     OConnection GetConnection(void) const;
  372.     OParameterCollection GetParameters(void) const;
  373.     
  374.     // overloaded operators
  375.     ODatabase &operator=(const ODatabase &other);
  376.     
  377.     // execute an arbitrary SQL statement
  378.     oresult ExecuteSQL(const char *sqlstmt) const;
  379.     long    GetRowsProcessed(void) const;
  380.     
  381.     // properties
  382.     const char *GetName(void) const;     // return database name (from the connection)
  383.     const char *GetConnectString(void) const;  // return connect string (without password)
  384.     long        GetOptions(void) const;
  385.     
  386.     // error handling
  387.     long ServerErrorNumber(void) const;
  388.     const char *GetServerErrorText(void) const;
  389.     oresult ServerErrorReset(void);
  390.     int ServerErrorSQLPos(void) const;
  391.     
  392.     // function used by other classes to construct ODatabase objects (don't call this!)
  393.     oresult OpenHelper(void *idisp, void *otheri);
  394.  
  395. private:
  396.     long    m_numrows;
  397.     char    *m_dbname;
  398.     char    *m_dbconnect;
  399.     char    *m_errtext;
  400.     
  401.     // internal helper routines
  402.     oresult Cleanup(void);
  403.     oresult Copy(const ODatabase &other);
  404. };
  405.  
  406. // ----- OValue -----------------------------------------------
  407.  
  408. class OEXPORT OValue
  409. {
  410. public:
  411.     // construction & destruction
  412.     OValue(void);
  413.     OValue(int intval);       // allows OValue val = 3
  414.     OValue(long longval);     // allows OValue val = 99L;
  415.     OValue(double doubleval); // allows initialization with a double
  416.     OValue(const char *tval); // allows initialization with a string
  417.     OValue(const OValue &other); // copy constructor
  418.     ~OValue(void);
  419.     
  420.     OValue &operator=(const OValue &other);
  421.     int operator==(const OValue &other) const;
  422.     int operator!=(const OValue &other) const;
  423.     
  424.     // setting the data & type
  425.     oresult Clear(void);    // clear the values
  426.     oresult SetValue(const OValue &val);
  427.     oresult SetValue(const char *val); // sets string value (copies text)
  428.     oresult SetValue(int val);     // sets to int value
  429.     oresult SetValue(long val);
  430.     oresult SetValue(double dval); // sets to double value 
  431.     // oresult SetValue(const void *longval, long len);  // set to long value (not implemented)
  432.     
  433.     oboolean IsNull(void) const;  // returns TRUE if value is NULL (which includes uninitialized)
  434.     
  435.     // getting data (overloaded cast operators)
  436.     operator int() const;
  437.     operator long() const;
  438.     operator const char *() const; // returns 0 if instance isn't string (no allocation)
  439.     operator double() const;
  440.     
  441.     // conversions to implementation-specific representations (used by OField)
  442.     oresult FromLocalType(void *localv);
  443.  
  444.     // helper routine for implementation of other classes
  445.     void *Internal(void) const;    
  446. private:
  447.     OOLEvar  *m_value;  // pointer to data representation 
  448.     
  449.     // helper routines
  450.     oresult Copy(const OValue &other);
  451.     oresult Cleanup(void);
  452. };
  453.  
  454. // ----- ODynaset -----------------------------------------------
  455.  
  456. class OEXPORT ODynaset : public OOracleObject
  457. {
  458. public:
  459.     // construction & destruction
  460.     ODynaset(void);
  461.     ODynaset(const ODynaset &other);
  462.     ODynaset(const ODatabase &odb, const char *sql_statement,
  463.              long options = ODYNASET_DEFAULT);  // construct & open
  464.     
  465.     ~ODynaset(void);
  466.     
  467.     // Open takes an SQL query as an argument.  This constructs a set of records which can
  468.     //    then be accessed.
  469.     oresult Open(const ODatabase &odb, const char *sql_statement, long options = ODYNASET_DEFAULT);  // creates a dynaset object
  470.     // The clone of a dynaset is looking at the original data, but has a different navigational
  471.     //    position.  Useful if you want to navigate through a set of data without side-effects
  472.     oresult Close(void);
  473.     
  474.     // getting other objects
  475.     ODynaset Clone(void) const;  // clone a dynaset
  476.     ODatabase GetDatabase(void) const;    
  477.     OFieldCollection GetFields(void) const;
  478.     OSession GetSession(void) const;
  479.     OField GetField(int index) const;
  480.     OField GetField(const char *fieldname) const;
  481.     OConnection GetConnection(void) const;
  482.     ODynasetMark GetMark(void) const;  // bookmark at current position
  483.     ODynasetMark GetLastModifiedMark(void) const;  // get bookmark at last modified record 
  484.     
  485.     // overloaded operators
  486.     ODynaset &operator=(const ODynaset &other);
  487.     
  488.     // the sql statement of the dynaset
  489.     oresult SetSQL(const char *sql_statement);  // sets new sql statement for the dynaset
  490.     const char *GetSQL(void) const;  // gets sql statement
  491.     oresult Refresh(void);  // refresh dynaset with current sql statement
  492.  
  493.     // navigation methods
  494.     oresult MoveFirst(void);   // go to first record in the set
  495.     oresult MoveLast(void);    // go to last record in the set.  Note that this requires that all the records
  496.                             //    in the query be downloaded from the server.  Can be expensive.
  497.     
  498.     // MovePrev and MoveNext take a "gopast" argument.  If it is TRUE we can navigate to an
  499.     //   invalid record before the first or after the last.  If "gopast" is FALSE, then we won't
  500.     //   go before the first or after the last record.  
  501.     oresult MovePrev(oboolean gopast = TRUE);    // go to previous record
  502.     oresult MoveNext(oboolean gopast = TRUE);    // go to next record - the most frequently used
  503.     oresult MoveToMark(const ODynasetMark &odmark);  // repositions to mark (see ODynasetMark class)
  504.     oboolean IsEOF(void) const;  // true if at end of dynaset.  Set to TRUE when you have tried to go
  505.                                 //     beyond the end
  506.     oboolean IsBOF(void) const;  // true if at begin of dynaset
  507.     oboolean IsValidRecord(void) const;  // true if current row is valid
  508.     
  509.     // editing
  510.     oboolean CanTransact(void) const;  // returns TRUE if transaction processing is enabled 
  511.     oboolean CanUpdate(void) const;  // returns TRUE if this dynaset is updateable
  512.     int GetEditMode(void) const;  // returns current edit mode: ODYNASET_EDIT_*
  513.     oresult StartEdit(void);  // starts edit operation
  514.     oresult CancelEdit(void); // cancels edit operation
  515.     oresult Update(void);     // finishes editing
  516.     oresult DuplicateRecord(void);  // copy the current record, adds a new record, sets field to copied values
  517.     
  518.     // others
  519.     oboolean CanRefresh(void) const;  // our dynasets can always requery
  520.     oboolean CanScroll(void) const;    // always scrollable
  521.     oboolean CanMark(void) const;
  522.     
  523.     long GetOptions(void) const;
  524.     
  525.     // record manipulation
  526.     oresult AddNewRecord(void);
  527.     oresult DeleteRecord(void);
  528.     
  529.     // record access
  530.     int GetFieldCount(void) const;  // returns # of fields in a record
  531.     long GetRecordCount(void) const;  // (dangerous!) gets total number of records in dynaset
  532.                          // this routine downloads the entire dynaset to the client   
  533.     int GetFieldIndex(const char *fieldname) const;  // gets the index of a field by name
  534.     
  535.     // all the Get and Set methods can refer to a column either by index (column position in the
  536.     //    query) or by fieldname (the name of the column as specified in the query).  GetFieldIndex
  537.     //    can be used to find the index of columns - which is more efficient
  538.     short GetFieldServerType(int index) const;
  539.     short GetFieldServerType(const char *fieldname) const;
  540.     short GetFieldPrecision(int index) const;
  541.     short GetFieldPrecision(const char *fieldname) const;
  542.     short GetFieldScale(int index) const;
  543.     short GetFieldScale(const char *fieldname) const;
  544.     oboolean IsFieldNullOK(int index) const;
  545.     oboolean IsFieldNullOK(const char *fieldname) const;
  546.     
  547.     long GetFieldSize(int index) const;
  548.     long GetFieldSize(const char *fieldname) const;
  549.     long GetFieldServerSize(int index) const;
  550.     long GetFieldServerSize(const char *fieldname) const;
  551.     oboolean IsFieldTruncated(int index) const;
  552.     oboolean IsFieldTruncated(const char *fieldname) const;
  553.     
  554.     // get data from a field, either by name or index
  555.     oresult GetFieldValue(int index, OValue *val) const;
  556.     oresult GetFieldValue(const char *fieldname, OValue *val) const;
  557.     oresult GetFieldValue(int index, int *val) const;
  558.     oresult GetFieldValue(const char *fieldname, int *val) const;
  559.     oresult GetFieldValue(int index, long *val) const;
  560.     oresult GetFieldValue(const char *fieldname, long *val) const;
  561.     oresult GetFieldValue(int index, double *val) const;
  562.     oresult GetFieldValue(const char *fieldname, double *val) const;
  563.     oresult GetFieldValue(int index, char *val, unsigned short maxlen) const;
  564.     oresult GetFieldValue(const char *fieldname, char *val, unsigned short maxlen) const;
  565.     oresult GetFieldValue(int index, void __huge *longval, long len, long *readlen) const;
  566.     oresult GetFieldValue(const char *fieldname, void __huge *longval, long len, long *readlen) const;
  567.     oresult GetFieldChunk(int index, void *chunkp, long offset, unsigned short len) const;
  568.     oresult GetFieldChunk(const char *fieldname, void *chunkp, long offset, unsigned short len) const;
  569.     
  570.     // set data in a field, either by name or index
  571.     oresult SetFieldValue(int index, const OValue &val);
  572.     oresult SetFieldValue(const char *fieldname, const OValue &val);
  573.     oresult SetFieldValue(int index, int val);
  574.     oresult SetFieldValue(const char *fieldname, int val);
  575.     oresult SetFieldValue(int index, long val);
  576.     oresult SetFieldValue(const char *fieldname, long val);
  577.     oresult SetFieldValue(int index, double val);
  578.     oresult SetFieldValue(const char *fieldname, double val);
  579.     oresult SetFieldValue(int index, const char *val);
  580.     oresult SetFieldValue(const char *fieldname, const char *val);
  581.     oresult SetFieldValue(int index, const void __huge *longval, long len);
  582.     oresult SetFieldValue(const char *fieldname, const void __huge *longval, long len);
  583.     oresult AppendFieldChunk(int index, const void *chunkp, unsigned short len);
  584.     oresult AppendFieldChunk(const char *fieldname, const void *chunkp, unsigned short len);
  585.  
  586.     // function used by other classes to construct ODynaset objects (don't call this!)
  587.     oresult OpenHelper(void *idisp, void *otheri); 
  588.  
  589.     oboolean IsFirst(void) const;
  590.     oboolean IsLast(void) const;
  591.        
  592. private:
  593.     char *m_sqlstmt;  // the sql statement that creates the dynaset
  594.     
  595.     // internal helper routines
  596.     oresult Copy(const ODynaset &other);
  597.     oresult Cleanup(void);
  598. };
  599.  
  600. // ----- ODynasetMark -----------------------------------------------
  601.   
  602. class OEXPORT ODynasetMark : public OOracleObject
  603. {
  604. public:
  605.     // construction & destruction
  606.     ODynasetMark(void); 
  607.     ODynasetMark(const ODynasetMark &other);
  608.     ~ODynasetMark(void);
  609.     
  610.     // overloaded operators
  611.     ODynasetMark &operator=(const ODynasetMark &other);
  612.     int operator==(const ODynasetMark &other) const;
  613.     int operator!=(const ODynasetMark &other) const;
  614.                                
  615.     
  616.     oresult Close(void);
  617.     oboolean IsOpen(void) const;
  618.     
  619.     // function used by other classes to construct ODynasetMark objects (don't call this!)
  620.     oresult OpenHelper(void *idisp, void *otheri);
  621.     
  622.     char *Internal(void) const;
  623.  
  624. private:
  625.     char  *m_markdata;  // holds data for bookmark
  626.     
  627.     oresult Cleanup(void);
  628. };
  629.  
  630. // ----- OField -----------------------------------------------
  631.  
  632. class OEXPORT OField : public OOracleObject
  633. {
  634. public:
  635.     // construction & destruction
  636.     OField(void);
  637.     OField(const OField &other);
  638.     ~OField(void);              
  639.     
  640.     oresult Close(void);
  641.     
  642.     // overloaded operators
  643.     OField &operator=(const OField &other);
  644.     
  645.     // other objects
  646.     ODynaset GetDynaset(void) const;
  647.     
  648.     // properties
  649.     const char *GetName(void) const; // returns name of field (user doesn't need to free)
  650.     long GetSize(void) const;  // returns length of field
  651.     long GetServerSize(void) const;  // returns length of a field (in server)
  652.     short GetServerType(void) const;
  653.     short GetPrecision(void) const;
  654.     short GetScale(void) const;
  655.     oboolean IsNullOK(void) const;
  656.     oboolean IsTruncated(void) const;
  657.     
  658.     // field value
  659.     oresult GetValue(OValue *val) const;  // returns value of field in val
  660.     oresult GetValue(int *val) const;
  661.     oresult GetValue(long *val) const;
  662.     oresult GetValue(double *val) const;
  663.     oresult GetValue(const char **val) const;
  664.     oresult GetValue(void __huge *longval, long len, long *readlen) const;
  665.     oresult SetValue(const OValue &val);  // sets the field to new value
  666.     oresult SetValue(int val);
  667.     oresult SetValue(long val);
  668.     oresult SetValue(double val);
  669.     oresult SetValue(const char *val);
  670.     oresult SetValue(const void __huge *longval, long len); 
  671.     
  672.     // for long fields
  673.     oresult AppendChunk(const void *chunkp, unsigned short numbytes);
  674.     oresult GetChunk(const char **chunkp, long offset, unsigned short numbytes) const;                                            
  675.     
  676.     // getting data (overloaded cast operators)
  677.     operator int() const;
  678.     operator long() const;
  679.     operator double() const;
  680.     operator const char *() const;
  681.  
  682.     // function used by other classes to construct OField objects (don't call this!)
  683.     oresult OpenHelper(void *idisp, void *otheri);
  684.  
  685. private:
  686.     short  m_index;
  687.     char  *m_name;
  688.     char  *m_data;
  689.  
  690.     // internal helper routines
  691.     oresult Copy(const OField &other);
  692.     oresult Cleanup(void);   
  693. };
  694.  
  695. // ----- OFieldCollection -----------------------------------------------
  696.  
  697. class OEXPORT OFieldCollection : public OOracleCollection
  698. {
  699. public:
  700.     OField GetField(int index) const;
  701.  
  702.     // function used by other classes to construct OFieldCollection objects (don't call this!)
  703.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  704. };
  705.  
  706. // ----- OClient -----------------------------------------------
  707.  
  708. class OEXPORT OClient : public OOracleObject
  709. {
  710. public:
  711.     // construction & destruction
  712.     OClient(void);
  713.     OClient(const OClient &other);
  714.     ~OClient(void);
  715.     
  716.     // use OSession::GetClient to open a client object
  717.     oresult Close(void);
  718.  
  719.     // Getting other objects
  720.     OSessionCollection GetSessions(void) const;  // get set of sessions
  721.  
  722.     // overloaded operators
  723.     OClient &operator=(const OClient &other);
  724.     
  725.     // get properties
  726.     const char        *GetName(void) const;        // returns client name.
  727.     
  728.     // function used by other classes to construct OSession objects (don't call this!)
  729.     oresult OpenHelper(void *idisp, void *otheri);
  730.  
  731. private:
  732.     char *m_name;
  733.  
  734.     // internal helper routines
  735.     oresult Copy(const OClient &other);
  736.     oresult Cleanup(void);   
  737. };
  738.  
  739. // ----- OConnection -----------------------------------------------
  740.  
  741. class OEXPORT OConnection : public OOracleObject
  742. {
  743. public:
  744.     // construction & destruction
  745.     OConnection(void);
  746.     OConnection(const OConnection &other);
  747.     ~OConnection(void);
  748.     
  749.     oresult Close(void);
  750.     
  751.     // getting other objects
  752.     OSession GetSession(void) const;   
  753.  
  754.     // overloaded operators
  755.     OConnection &operator=(const OConnection &other);
  756.     
  757.     // properties
  758.     const char  *GetConnectString(void) const;  // returns connect string
  759.     const char  *GetDatabaseName(void) const;  // returns database name for this connection
  760.     
  761.     // function used by other classes to construct OConnection objects (don't call this!)
  762.     oresult OpenHelper(void *idisp, void *otheri);
  763.  
  764. private:
  765.     char *m_dbname;
  766.     char *m_dbconnect;
  767.  
  768.     // internal helper routines
  769.     oresult Copy(const OConnection &other);
  770.     oresult Cleanup(void);   
  771. };
  772.  
  773. // ----- OConnectionCollection -----------------------------------------------
  774.  
  775. class OEXPORT OConnectionCollection : public OOracleCollection
  776. {
  777. public:
  778.     OConnection GetConnection(int index) const;
  779.  
  780.     // function used by other classes to construct OConnectionCollection objects (don't call this!)
  781.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  782. };
  783.  
  784. // ----- OAdvise -----------------------------------------------
  785.  
  786. class OEXPORT OAdvise : public OOracleObject
  787. {
  788. public:
  789.     OAdvise(void);
  790.     OAdvise(const OAdvise &other);
  791.     OAdvise(const ODynaset &odyn);  // construct & open
  792.     virtual ~OAdvise(void);
  793.     
  794.     virtual oresult Open(const ODynaset &odyn);
  795.     virtual oresult Close(void);  // stop the advisory sink
  796.     
  797.     // getting other objects
  798.     ODynaset GetDynaset(void) const;
  799.     
  800.     // overloaded operators
  801.     OAdvise &operator=(const OAdvise &other);
  802.     
  803.     // called before an action takes place
  804.     virtual oboolean ActionRequest(int movekind);  // returns TRUE if action is allowed, FALSE to cancel
  805.     
  806.     // routines called to to notify that action occured
  807.     virtual void ActionNotify(int movekind); 
  808.     
  809.     // routine called on status change
  810.     virtual void StatusChange(int statuskind);
  811.     
  812. private:
  813.     ODynaset  m_oDyn;    // the dynaset we're getting notices from
  814.     
  815.     // private helper routines
  816.     oresult Cleanup(void);
  817.     oresult Copy(const OAdvise &other);
  818. };
  819.  
  820. // ----- OParameter -----------------------------------------------
  821.  
  822. class OEXPORT OParameter : public OOracleObject
  823. {
  824. public:
  825.     OParameter(void);
  826.     OParameter(const OParameter &other);
  827.     ~OParameter(void);
  828.     
  829.     oresult Close(void);
  830.     
  831.     // overloaded operators
  832.     OParameter &operator=(const OParameter &other);
  833.     
  834.     // parameter name
  835.     const char *GetName(void) const;
  836.     
  837.     short GetServerType(void) const;
  838.     
  839.     // parameter value
  840.     oresult GetValue(OValue *val) const;
  841.     oresult GetValue(int *val) const;
  842.     oresult GetValue(long *val) const;
  843.     oresult GetValue(double *val) const;
  844.     oresult GetValue(const char **val) const;
  845.     
  846.     oresult Clear(void);
  847.     oresult SetValue(const OValue &val);
  848.     oresult SetValue(int val);
  849.     oresult SetValue(long val);
  850.     oresult SetValue(double val);
  851.     oresult SetValue(const char *val);
  852.     
  853.     // getting data (overloaded cast operators)
  854.     operator int() const;
  855.     operator long() const;
  856.     operator double() const;
  857.     operator const char *() const;
  858.  
  859.     // other status information
  860.     int GetStatus(void) const;
  861.     
  862.     // enabling
  863.     oresult AutoEnable(oboolean enable);
  864.  
  865.     // function used by other classes to construct OParameter objects (don't call this!)
  866.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the object
  867.  
  868. private:
  869.     char *m_name; 
  870.     char *m_data;
  871.  
  872.     // internal helper routines
  873.     oresult Copy(const OParameter &other);
  874.     oresult Cleanup(void);
  875.     oresult HelpGetValue(OOLEvar *tempv) const;
  876. };
  877.  
  878. // ----- OParameterCollection -----------------------------------------------
  879.  
  880. class OEXPORT OParameterCollection : public OOracleObject
  881. {
  882. public:
  883.     OParameterCollection(void);
  884.     OParameterCollection(const OParameterCollection &other);
  885.     ~OParameterCollection(void);
  886.     
  887.     oresult Close(void);
  888.     
  889.     // overloaded operators
  890.     OParameterCollection &operator=(const OParameterCollection &other);
  891.     
  892.     // getting other objects
  893.     OParameter GetParameter(int index) const;
  894.     OParameter GetParameter(const char *pname) const;
  895.     
  896.     // adding a new parameter
  897.     OParameter Add(const char *name, int value, int iotype, int serverType);
  898.     OParameter Add(const char *name, long value, int iotype, int serverType);
  899.     OParameter Add(const char *name, double value, int iotype, int serverType);
  900.     OParameter Add(const char *name, const char *value, int iotype, int serverType);     
  901. //BUG #262723
  902.     OParameter Add(const char *name, const OValue &value, int iotype, int serverType);     
  903.     
  904.     // removing a parameter
  905.     oresult Remove(int index);
  906.     oresult Remove(const char *name);
  907.     
  908.     // getting # of parameters
  909.     long GetCount(void) const;
  910.     
  911.     // function used by other classes to construct OParameterCollection objects (don't call this!)
  912.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  913.  
  914. private:
  915.     // internal helper routines
  916.     oresult Copy(const OParameterCollection &other);
  917.     oresult Cleanup(void);   
  918.     OParameter AddHelp(const char *name, const OValue &val, int iotype, int serverType);
  919.  
  920. };
  921.  
  922. #endif // ORACL_ORACLE
  923.