ORACL.H
上传用户:sygkzy
上传日期:2013-03-13
资源大小:150k
文件大小:49k
源码类别:

Oracle数据库

开发平台:

Visual C++

  1. /* Copyright (c) Oracle Corporation 1994.  All Rights Reserved */
  2. /*
  3.     This source code is provided as a debugging aid for developers
  4.     who have purchased Oracle Objects for OLE    .  Please see the
  5.     online help for documentation of these classes.
  6. */
  7. /*
  8.     Oracle Objects for OLE     C++ Classes
  9.     
  10.     This file is the header for the basic classes.  That is, all the
  11.     classes except OBound and OBinder (which use the obound.h header)
  12.                            
  13.     CREATED    ********   11/22/94
  14.     RWOOLARD MODIFIED 03/20/95
  15.      bug# 262914 *ErrorText should return const char *
  16.      262723 Added overloaded OParameter.Add(..., OValue)
  17.     PCHARI      MODIFIED        03/19/98
  18. bug#    624443  *NT 3.5.1 does not support CoInitializeEx
  19. and so this fix to explicitly link with ole32.dll
  20. */
  21. #ifndef ORACL_ORACLE
  22. #define ORACL_ORACLE
  23. // compiler specific defines
  24. #ifdef WIN32
  25.   #define  __huge
  26.   #define OHUGESP
  27.   #ifdef _MSC_VER
  28.   #define OEXPORT  __declspec(dllexport)
  29.   #endif   // _MSC_VER
  30.   #ifdef __BORLANDC__
  31.      #define OEXPORT _export
  32.   #endif     // __BORLANDC__
  33. #else     // WIN16
  34.   #define OEXPORT _export
  35.   #define OHUGESP
  36. #endif    //WIN32
  37. #ifndef OEXPORT
  38. #define OEXPORT
  39. #define OHUGESP
  40. #endif
  41. #include "windows.h"
  42. #ifdef WIN32
  43. # ifdef ORAANSI
  44. #  include <ole2.h>
  45. #  include <winnls.h>
  46. # endif
  47. #else
  48. # include <ole2.h>
  49. # include <dispatch.h>
  50. # ifdef _CID_MS15
  51. #  define OLECHAR char
  52. # endif
  53. #endif
  54. // handy boolean type
  55. typedef int oboolean;
  56. // simple success return value
  57. typedef int oresult;
  58. // oresults can have one of the following values
  59. #define OSUCCESS 0
  60. #define OFAILURE 101
  61. // error numbers returned by the ErrorNumber method.
  62. // ----- error numbers
  63. #define OERROR_NONE 0  // there isn't an error
  64. #define OERROR_NOINTER 11  // we couldn't get a needed interface
  65. #define OERROR_MEMORY 12  // memory allocation problem              
  66. #define OERROR_BADERR 13  // error in error handling (!)
  67. #define OERROR_INVPARENT 14 // parent object on open is invalid (not open)
  68. #define OERROR_SYSTEM 15     // some system error
  69. #define OERROR_NOTOPEN 16   // attempt to use unopened object
  70. #define OERROR_BADARG 17    // bad argument to routine
  71. #define OERROR_INVRECORD 18 // the current record is invalid
  72. #define OERROR_BADTYPE 19   // invalid operation on an Oracle data type
  73. #define OERROR_ADVISEULINK 4096  // not an advisory connection
  74. #define OERROR_DBCONNECT 4097  // connection not made
  75. #define OERROR_POSITION 4098  // invalid database position
  76. #define OERROR_NOFIELDNAME 4099  // field not found
  77. #define OERROR_NOFIELDINDEX 4100  // invalid field index
  78. #define OERROR_TRANSIP 4101  // transaction already in progress
  79. #define OERROR_SCHEMAERR 4102  // error retreiving table definition
  80. #define OERROR_ORLONERR 4103  // unable to make connection
  81. #define OERROR_TRANSNIPC 4104  // commit when no transaction 
  82. #define OERROR_TRANSNIPR 4105 // rollback when no transaction
  83. #define OERROR_NODSET 4106  // no such dynaset attached to connection
  84. #define OERROR_INVROWNUM 4108  // invalid row reference
  85. #define OERROR_TEMPFILE 4109  // error creating temporary file
  86. #define OERROR_DUPSESSION 4110  // duplicate session name
  87. #define OERROR_NOSESSION 4111   // no such session on detach
  88. #define OERROR_NOOBJECTN 4112  // no object with specified name
  89. #define OERROR_DUPCONN 4113  // duplicate connection
  90. #define OERROR_NOCONN 4114  // no such connection on detach
  91. #define OERROR_BFINDEX 4115  // invalid field index
  92. #define OERROR_CURNREADY 4116  // cursor not ready
  93. #define OERROR_NOUPDATES 4117  // updates not allowed
  94. #define OERROR_NOTEDITING 4118  // not currently editing
  95. #define OERROR_DATACHANGE 4119  // data has changed since last read
  96. #define OERROR_NOBUFMEM 4120  // no memory for binding buffers
  97. #define OERROR_INVBKMRK 4121  // invalid bookmark
  98. #define OERROR_BNDVNOEN 4122  // bind variable not enabled
  99. #define OERROR_DUPPARAM 4123  // duplicate parameter name
  100. #define OERROR_INVARGVAL 4124  // invalid argument value
  101. #define OERROR_INVFLDTYPE 4125  // invalid field type
  102. #define OERROR_NOTIMPL 4126  // operation not implemented
  103. #define OERROR_TRANSFORUP 4127  // For Update detected, no transaction
  104. #define OERROR_NOTUPFORUP 4128  // For Update detected, not updatable
  105. #define OERROR_TRANSLOCK 4129 // Commit/Rollback, but trans locked
  106. #define OERROR_CACHEPARM 4130 // Invalid cache parameter
  107. #define OERROR_FLDRQROWID 4131 // Field processing requires ROWID
  108. #define OERROR_OUTOFMEMORY 4132 // Out of Memory
  109. #define OERROR_POINTER 4133 // Invalid pointer
  110. #define OERROR_INVNUMBER 4134 // Invalid number
  111. #define OERROR_MAXSIZE 4135 // Maximum size execeeded.
  112. #define OERROR_INVDIMENSION 4136 // Invalid Dimension
  113. #define OERROR_MAXBUFFER 4137 // Maximum buffer exceeds 32512 bytes.
  114. #define OERROR_ARRAYSIZ 4138 // Array elements not same size
  115. // Find Methods parser errors
  116. #define OERROR_STACK_OVER 4496 // Parser : Stack Overflow
  117. #define OERROR_SYNTAX ERROR 4497 // Parser : Syntax Error near
  118. #define OERROR_MISPLACED_PAREN 4498 // Parser : Misplaced parentheses
  119. #define OERROR_MISPLACED_QUOTE 4499 // Parser : Misplaced quotation marks
  120. #define OERROR_MISSING PAREN 4500 // Parser : WARNING - Missing closing Parenthesis
  121. #define OERROR_EXPECTED_PAREN 4501 // Parser : Usually open parentheses expected
  122. #define OERROR_PARSER_UNKNOWN 4502 // Parser : Unknown parser error condition
  123. #define OERROR_INVALID_FUNCTION 4503 // Parser : Syntax not supported
  124. #define OERROR_INVALID_COLUMN 4504 // Parser : Invalid Column Name
  125. #define OERROR_MAX_TOKEN 4505 // Parser : Maximum Token size exceeded
  126. #define OERROR_PARSER_DATA_TYPE 4506 // Parser : Unsupported data type
  127. #define OERROR_UNEXPECTED_TOKEN 4507 // Parser : Unexpected token found
  128. #define OERROR_END_OF_CLAUSE 4508 // Parser : Unexpected end of clause
  129. // Find Methods runtime errors
  130. #define OERROR_INVALID_INSTR 4516 // Runtime : Internal Error : Invalid Instruction
  131. #define OERROR_STACK_ERROR 4517 // Runtime : Internal Error : Stack over/under-flow
  132. #define OERROR_CONVERT_TYPES 4518 // Runtime : Invalid type conversion
  133. #define OERROR_RUNTIME_DATA_TYPE 4519 // Runtime : Invalid datatype
  134. #define OERROR_INVALID_SQL_ARG 4520 // Runtime : SQL function missing argument"
  135. #define OERROR_INVALID_COMPARE 4521 // Runtime : Invalid comparison
  136. #define OERROR_SELECT_DUAL 4522 // Runtime : Select from dual failed
  137. #define OERROR_DUAL_DATATYPE 4523 // Runtime : Invalid datatype in Select from dual
  138. #define OERROR_ECURSOR 8192  // cannot create cursor
  139. #define OERROR_FETCHERR 8193  // error fetching field
  140. #define OERROR_BINDERR 8194  // output data binding error
  141. #define OERROR_SQLERR 8195  // error in SQL statement
  142. #define OERROR_ESQLEXEC 8196  // SQL execution error
  143. #define OERROR_COMERR 8197  // error during commit
  144. #define OERROR_ROLERR 8198  // error during rollback
  145. #define OERROR_OPTERR 8299  // error setting options
  146. #define OERROR_CONNERR 8200  // unable to make connection
  147. #define OERROR_RDBMSVER 8201 // Database version not available
  148. // server data types
  149. #define OTYPE_VARCHAR2 1
  150. #define OTYPE_NUMBER 2
  151. #define OTYPE_SINT 3
  152. #define OTYPE_FLOAT 4
  153. #define OTYPE_STRING    5
  154. #define OTYPE_LONG 8
  155. #define OTYPE_VARCHAR 9
  156. #define OTYPE_ROWID 11
  157. #define OTYPE_DATE 12
  158. #define OTYPE_RAW 23
  159. #define OTYPE_LONGRAW 24
  160. #define OTYPE_UINT      68
  161. #define OTYPE_CHAR 96
  162. #define OTYPE_CHARZ 97
  163. #define OTYPE_CURSOR    102
  164. #define OTYPE_MSLABEL 106
  165. // edit modes for dynaset
  166. #define ODYNASET_EDIT_NOEDIT 0
  167. #define ODYNASET_EDIT_EDITING 1
  168. #define ODYNASET_EDIT_NEWRECORD 2
  169. // parameter io types
  170. #define OPARAMETER_INVAR 1
  171. #define OPARAMETER_OUTVAR 2
  172. #define OPARAMETER_INOUTVAR 3
  173. // parameter status flags
  174. #define OPARAMETER_STATUS_IN 1
  175. #define OPARAMETER_STATUS_OUT 2
  176. #define OPARAMETER_STATUS_AUTOENABLED 4
  177. #define OPARAMETER_STATUS_ENABLED 8
  178. // Options for creating database
  179. #define ODATABASE_DEFAULT 0
  180. #define ODATABASE_PARTIAL_INSERT 1
  181. #define ODATABASE_ORAMODE 1 // Same as PARTIAL_INSERT 
  182. #define ODATABASE_EDIT_NOWAIT 2
  183. #define ODATABASE_NO_REFETCH 4
  184. #define ODATABASE_NONBLOCK 8
  185. // Options for creating dynaset
  186. #define ODYNASET_DEFAULT 0
  187. #define ODYNASET_NOBIND 1
  188. #define ODYNASET_KEEP_BLANKS 2
  189. #define ODYNASET_READONLY 4
  190. #define ODYNASET_NOCACHE 8
  191. #define ODYNASET_PARTIAL_INSERT 16 // V2DEV - Added
  192. #define ODYNASET_ORAMODE 16 // V2DEV - Added
  193. #define ODYNASET_NO_REFETCH 32
  194. #define ODYNASET_NO_MOVEFIRST 64
  195. #define ODYNASET_DIRTY_WRITE 128
  196. #define ODYNASET_VIEW_LONG 256 // V2.1 Added
  197. // Options for creating  SqlStmt object
  198. #define  OSQLSTMT_DEFAULT  0
  199. #define  OSQLSTMT_NOBIND   1
  200. // Bug 533086 : Add the option for forcing return on exec errors, for stmt object.
  201. #define OSQLSTMT_FAILEXEC  2
  202. // Threading Model Options
  203. #define OSTARTUP_MULTITHREADED 0
  204. #define OSTARTUP_APARTMENTTHREADED 1
  205. // definitions of actions used in the callback routines
  206. #define OADVISE_MOVE_FIRST 1
  207. #define OADVISE_MOVE_NEXT 2
  208. #define OADVISE_MOVE_PREV 3
  209. #define OADVISE_MOVE_LAST 4
  210. #define OADVISE_FIND_FIRST 5
  211. #define OADVISE_FIND_NEXT 6
  212. #define OADVISE_FIND_PREV 7
  213. #define OADVISE_FIND_LAST 8
  214. #define OADVISE_DELETE 9
  215. #define OADVISE_ADDNEW 10
  216. #define OADVISE_REFRESH 11
  217. #define OADVISE_MOVE_TOMARK 12
  218. #define OADVISE_ROLLBACK 13
  219. //#define OADVISE_CLOSE 14
  220. //#define OADVISE_DATAFIELDCHANGED 15
  221. //#define OADVISE_SAVEDATA 16
  222. //#define OADVISE_READDATA 17
  223. #define OADVISE_UPDATE 18
  224. //#define DATA_UNLOAD 19
  225. #define OADVISE_MOVE_NEXTN 20
  226. #define OADVISE_MOVE_PREVN 21
  227. #define OADVISE_MOVETO 22
  228. #define OADVISE_FOUNDLAST 151
  229. #define OADVISE_OTHER 99
  230. // definitions for UpdateSource sources
  231. enum updsrcs {SYSDATE, TIMESTAMP, DATESTAMP, FUNCTION, OTHFIELD, STRLITERAL};
  232. // forward references
  233. class OEXPORT OSession;
  234. class OEXPORT OSessionCollection;
  235. class OEXPORT OClient;
  236. class OEXPORT OConnection;
  237. class OEXPORT OConnectionCollection;
  238. class OEXPORT ODatabase;
  239. class OEXPORT ODynaset;
  240. class OEXPORT ODynasetMark;
  241. class OEXPORT OField;
  242. class OEXPORT OFieldCollection;
  243. class OEXPORT OAdvise;
  244. class OEXPORT OParameter;
  245. class OEXPORT OParamArray;
  246. class OEXPORT OParameterCollection;
  247. class OEXPORT OSqlStmt;
  248. class OOLEvar;
  249. // ------------------------------------------------------------
  250. // functions that are not class methods
  251. // routine to initialize library.  Should be called once at startup 
  252. //    returns TRUE if successful, FALSE if not
  253. oboolean OEXPORT OStartup(int ThreadingModel = OSTARTUP_APARTMENTTHREADED); // Threading Model Options
  254. // routine to close down the library.  Should be called once
  255. //   at application shutdown
  256. void OEXPORT OShutdown(void);
  257. // ----- OOracleObject -----------------------------------------------
  258. // base object class
  259. //   This class is the base for the OO4W classes.  By itself
  260. //   it provides the error reporting interface and helps with
  261. //   the various copying mechanisms
  262. class OEXPORT OOracleObject
  263. {
  264. public:
  265.     // constructors & destructors
  266.     OOracleObject(void);
  267.     OOracleObject(const OOracleObject &other);
  268.     virtual ~OOracleObject(void);
  269.     
  270.     // overloaded operators
  271.     OOracleObject &operator=(const OOracleObject &other);
  272.     int operator==(const OOracleObject &other) const;
  273.     int operator!=(const OOracleObject &other) const;
  274.     
  275.     // properties
  276.     virtual oboolean IsOpen(void) const;
  277.     
  278.     // Error handling methods
  279.     long  ErrorNumber(void) const; // return error "number"
  280. //BUG #262914    
  281.     const char *LookupErrorText(long errnum) const;  // get error text for given error number
  282.     const char *GetErrorText(void) const;  // get description of last error
  283.     // set error information
  284.     void  ErrorReset(void) const;  // reset error state to "no error"
  285.     // SetOtherError and SetInternalError are really for internal use
  286.     void  SetOtherError(void *otheri) const;
  287.     void  SetInternalError(long errnum) const;
  288.     
  289.     void *Internal(void) const;
  290.     
  291. protected:
  292.     // copy and cleanup routines (used to implement destructor, constructor, =)
  293.     virtual oresult Copy(const OOracleObject &other);
  294.     virtual oresult Cleanup(void);
  295.     
  296.     // access to object interface
  297.  oresult SetObjectInterface(void *obji, oboolean geterror = TRUE);
  298.     oresult ActionStart(void) const;  // start of most of the methods
  299.     oresult ActionGetStart(const OOracleObject *nobj) const;
  300. private:
  301.     void   *m_obji;   // pointer to object interface
  302.     void   *m_erri;   // pointer to error interface of object
  303.     void   *m_errotheri;  // pointer to error interface on other object
  304.     char   *m_lasterrstring;  // last error string we've handled
  305.     
  306.     int     m_errstate;   // where did the error come from (values in implementation)
  307. long    m_errno;  // error number (see below, or negative for internal values)
  308. };
  309. // ----- OOracleCollection -----------------------------------------------
  310. // general set class
  311. // This is a base class used for collections of sessions, connections and fields
  312. // It has no utility on its own.  Routines to get items from the collection are
  313. // in the subclasses
  314. class OEXPORT OOracleCollection : public OOracleObject
  315. {
  316. public:
  317.     // constructors & destructors
  318.     OOracleCollection(void);
  319.     OOracleCollection(const OOracleCollection &other);
  320.     ~OOracleCollection(void);
  321.     
  322.     // Open & Close
  323.     oresult Close(void);   // close the set
  324.     
  325.     // overloaded operators
  326.     OOracleCollection &operator=(const OOracleCollection &other);
  327.     
  328.  // # of items in the set
  329.     long   GetCount(void) const;
  330. protected:
  331.     oresult OpenSetHelper(void *idisp, void *otheri, unsigned char stype);  // finish the work of opening the set
  332.     void  *GetItem(unsigned char stype, int index) const;
  333.     void  *GetItem(oboolean oflag, const char *name) const;
  334. private:
  335.     unsigned char m_settype;
  336.     
  337.  // internal helper routines
  338.     oresult Cleanup(void);
  339.  oresult Copy(const OOracleCollection &other);
  340. }                                                       ;
  341. // ----- OSession -----------------------------------------------
  342. class OEXPORT OSession : public OOracleObject
  343. {
  344. public:
  345.     // construction & destruction
  346.     OSession(void);
  347.     OSession(const OSession &other); // copy constructor
  348.     OSession(const char *sname);     // construct & open (NULL sname means open default session)
  349.  ~OSession(void);
  350.     
  351.     // open the session
  352.     oresult Open(void);               // open the default session
  353.     oresult Open(const char *sname);  // open a new session with specific name
  354.     oresult Close(void);
  355.     
  356.     // Getting other objects
  357.     OConnectionCollection GetConnections(void) const;
  358.     OClient GetClient(void) const; 
  359.     static OSession GetNamedSession(const char *sname);
  360.     // overloaded operators
  361.     OSession &operator=(const OSession &other);
  362. oresult CreateDatabasePool
  363.     (long initSize, long maxSize, long timeOut, 
  364.  const char *dbname, const char *username, 
  365.  const char *pwd,long options = ODATABASE_DEFAULT);
  366. ODatabase OSession::GetDatabaseFromPool(long waitTime);
  367. oresult OSession::GetUserPwd(const char *username, const char *pwd, char **retname);
  368. oresult OSession::DestroyDatabasePool();
  369. long OSession::GetDbPoolMaxSize() const;
  370. long OSession::GetDbPoolCurrentSize() const; 
  371. long OSession::GetDbPoolInitialSize() const;
  372. long OSession::GetDbPoolUsedCount() const;
  373.     // error handling
  374.     long ServerErrorNumber(void) const;
  375.     const char *GetServerErrorText(void) const;
  376.     oresult ServerErrorReset(void);
  377.     
  378.     // get properties
  379.     const char       *GetName(void) const;   // returns session name 
  380.     const char       *GetVersion(void) const;  // returns version of Oracle Objects
  381.     
  382.     // transaction operations
  383.     oresult  BeginTransaction(void);  // start a transaction
  384.     oresult  Commit(oboolean startnew = FALSE);   // commit (may start new transaction)
  385.     oresult  Rollback(oboolean startnew = FALSE); // rolls back transaction (may start new transaction)
  386.     oresult  ResetTransaction(void);  // unconditionally rollback (no advisories)
  387.     
  388.     // function used by other classes to construct OSession objects (don't call this!)
  389.     oresult OpenHelper(void *idisp, void *otheri);
  390.     // Memory Management Routines
  391.     oresult  MemoryManager (int flags = -1);
  392.     oresult  MemoryLog (int flags = -1);
  393. private:
  394.  char      *m_name;
  395.  char      *m_errtext;
  396.     char      *m_version;
  397.     
  398.     // internal helper routines
  399.     oresult Cleanup(void);
  400.     oresult Copy(const OSession &other);
  401.     
  402. };
  403. // ----- OSessionCollection -----------------------------------------------
  404. class OEXPORT OSessionCollection : public OOracleCollection
  405. {
  406. public:
  407.     OSession GetSession(int index) const;
  408.     // function used by other classes to construct OSessionCollection objects (don't call this!)
  409.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  410. };
  411. // ----- ODatabase -----------------------------------------------
  412. class OEXPORT ODatabase : public OOracleObject
  413. {
  414. public:
  415.     // construction & destruction
  416.     ODatabase(void);
  417.     ODatabase(const ODatabase &other);
  418.     ~ODatabase(void); 
  419.     
  420.     // construct & open
  421.  ODatabase(const OSession &dbsess, const char *dbname, const char *username,
  422. const char *pwd, long options = ODATABASE_DEFAULT);
  423.  ODatabase(const char *dbname, const char *username, const char *pwd,
  424. long options = ODATABASE_DEFAULT);
  425.  // for the Open calls, if pwd is NULL it is assumed that username contains username/password
  426.  // open a database on a new session (implicitly creates a session)
  427.  oresult Open(const char *dbname, const char *username, const char *pwd,
  428. long options = ODATABASE_DEFAULT);
  429.  // open a database on an existing session
  430.  oresult Open(const OSession &dbsess, const char *dbname,
  431. const char *username, const char *pwd,
  432. long options = ODATABASE_DEFAULT);
  433.  oresult Close(void);
  434.  // getting other objects
  435.  OSession GetSession(void) const;
  436.  OConnection GetConnection(void) const;
  437.  OParameterCollection GetParameters(void) const;
  438.     // overloaded operators
  439.     ODatabase &operator=(const ODatabase &other);
  440.     
  441.     // execute an arbitrary SQL statement
  442.     oresult ExecuteSQL(const char *sqlstmt) const;
  443.     long GetRowsProcessed(void) const;
  444.     
  445.  // properties
  446.     const char *GetName(void) const;     // return database name (from the connection)
  447.     const char *GetConnectString(void) const;  // return connect string (without password)
  448.  const char *GetRdbmsVersion(void) const; // V2DEV - returns RDBMS Version
  449.  long        GetOptions(void) const;
  450.     
  451.     // error handling
  452.     long ServerErrorNumber(void) const;
  453.     const char *GetServerErrorText(void) const;
  454.     oresult ServerErrorReset(void);
  455.     int ServerErrorSQLPos(void) const;
  456.     
  457.     // function used by other classes to construct ODatabase objects (don't call this!)
  458.     oresult OpenHelper(void *idisp, void *otheri);
  459. private:
  460.     long m_numrows;
  461.     char    *m_dbname;
  462.     char    *m_dbconnect;
  463.  char    *m_errtext;
  464.  char *m_version;
  465.     
  466.     // internal helper routines
  467.     oresult Cleanup(void);
  468.     oresult Copy(const ODatabase &other);
  469.  oresult GetUserPwd(const char *username, const char *pwd, char **retname);
  470. };
  471. // ----- OValue -----------------------------------------------
  472. class OEXPORT OValue
  473. {
  474. public:
  475.     // construction & destruction
  476.     OValue(void);
  477.     OValue(int intval);       // allows OValue val = 3
  478.     OValue(long longval);     // allows OValue val = 99L;
  479.     OValue(double doubleval); // allows initialization with a double
  480.     OValue(const char *tval); // allows initialization with a string
  481.     OValue(const OValue &other); // copy constructor
  482.  OValue(short *intval); // Added for ARRAYINSERT
  483.  OValue(int *intval); // Added for ARRAYINSERT
  484.  OValue(long *longval); // Added for ARRAYINSERT
  485.  OValue(double *doubleval);// Added for ARRAYINSERT
  486.  OValue(char **tval); // Added for ARRAYINSERT
  487.  ~OValue(void);
  488.     
  489.  OValue &operator=(const OValue &other);
  490.     int operator==(const OValue &other) const;
  491.     int operator!=(const OValue &other) const;
  492.     
  493.     // setting the data & type
  494.     oresult Clear(void);    // clear the values
  495.     oresult SetValue(const OValue &val);
  496.     oresult SetValue(const char *val); // sets string value (copies text)
  497.     oresult SetValue(int val);     // sets to int value
  498.     oresult SetValue(long val);
  499.     oresult SetValue(double dval); // sets to double value 
  500.     // oresult SetValue(const void *longval, long len);  // set to long value (not implemented)
  501.  oresult SetValue(char **val); // Added for ARRAYINSERT
  502.  oresult SetValue(short *val); // Added for ARRAYINSERT
  503.  oresult SetValue(int *val); // Added for ARRAYINSERT
  504.  oresult SetValue(long *val); // Added for ARRAYINSERT
  505.  oresult SetValue(double *dval); // Added for ARRAYINSERT
  506.     oboolean IsNull(void) const;  // returns TRUE if value is NULL (which includes uninitialized)
  507.     
  508.     // getting data (overloaded cast operators)
  509.     operator int() const;
  510.     operator long() const;
  511.     operator const char *() const; // returns 0 if instance isn't string (no allocation)
  512.     operator double() const;
  513.     
  514.     // conversions to implementation-specific representations (used by OField)
  515.     oresult FromLocalType(void *localv);
  516.     // helper routine for implementation of other classes
  517.     void *Internal(void) const;    
  518. private:
  519.     OOLEvar  *m_value;  // pointer to data representation 
  520.     // helper routines
  521.     oresult Copy(const OValue &other);
  522.     oresult Cleanup(void);
  523. };
  524. // ----- ODynaset -----------------------------------------------
  525. class OEXPORT ODynaset : public OOracleObject
  526. {
  527. public:
  528.     // construction & destruction
  529.     ODynaset(void);
  530.  ODynaset(const ODynaset &other);
  531.  ODynaset(const ODatabase &odb, const char *sql_statement,
  532. long options = ODYNASET_DEFAULT);  // construct & open
  533. // Added for V2DEV custom dynaset
  534. ODynaset(const ODatabase &odb, const char *sql_statement,
  535. unsigned int slicesize, unsigned int perblock,
  536. unsigned int blocks, unsigned int fetchlimit,
  537. unsigned int fetchsize, long options = ODYNASET_DEFAULT);
  538. ~ODynaset(void);
  539. // Open takes an SQL query as an argument.  This constructs a set of records which can
  540. //    then be accessed.
  541. oresult Open(const ODatabase &odb, const char *sql_statement,
  542. long options = ODYNASET_DEFAULT);  // creates a dynaset object
  543. // Added for V2DEV custom dynaset
  544. oresult Open(const ODatabase &odb, const char *sql_statement,
  545. unsigned int slicesize, unsigned int perblock,
  546. unsigned int blocks, unsigned int fetchlimit,
  547. unsigned int fetchsize, long options = ODYNASET_DEFAULT);
  548.  // The clone of a dynaset is looking at the original data, but has a different navigational
  549.     //    position.  Useful if you want to navigate through a set of data without side-effects
  550.     oresult Close(void);
  551.     // getting other objects
  552.     ODynaset Clone(void) const;  // clone a dynaset
  553.  ODatabase GetDatabase(void) const;
  554.     OFieldCollection GetFields(void) const;
  555.     OSession GetSession(void) const;
  556.  OField GetField(int index) const;
  557.     OField GetField(const char *fieldname) const;
  558. int GetFieldOriginalNameIndex(const char *fieldname) const;
  559.     OConnection GetConnection(void) const;
  560.  ODynasetMark GetMark(void) const;  // bookmark at current position
  561.     ODynasetMark GetLastModifiedMark(void) const;  // get bookmark at last modified record 
  562.     
  563.  // overloaded operators
  564.     ODynaset &operator=(const ODynaset &other);
  565.     
  566.  // the sql statement of the dynaset
  567.     oresult SetSQL(const char *sql_statement);  // sets new sql statement for the dynaset
  568.     const char *GetSQL(void) const;  // gets sql statement
  569.  oresult Refresh(void);  // refresh dynaset with current sql statement
  570.     // navigation methods
  571.  oresult MoveFirst(void);   // go to first record in the set
  572.     oresult MoveLast(void);    // go to last record in the set.  Note that this requires that all the records
  573.                             //    in the query be downloaded from the server.  Can be expensive.
  574.  // MovePrev and MoveNext take a "gopast" argument.  If it is TRUE we can navigate to an
  575.  //   invalid record before the first or after the last.  If "gopast" is FALSE, then we won't
  576.     //   go before the first or after the last record.  
  577.  oresult MovePrev(oboolean gopast = TRUE);    // go to previous record
  578.  oresult MoveNext(oboolean gopast = TRUE);    // go to next record - the most frequently used
  579. // V2DEV - extra move methods
  580.  oresult MovePrevN(long rows, oboolean gopast = TRUE);    // go to previous (n) record
  581.  oresult MoveNextN(long rows, oboolean gopast = TRUE);    // go to next (n) record
  582.  oresult MoveRel(long rows, oboolean gopast = TRUE);    // go to relative record (n)
  583.  oresult MoveTo(long rownum, oboolean gopast = TRUE);    // go to record (n)
  584.  oresult MoveToMark(const ODynasetMark &odmark);  // repositions to mark (see ODynasetMark class)
  585.     oboolean IsEOF(void) const;  // true if at end of dynaset.  Set to TRUE when you have tried to go
  586.                                 //     beyond the end
  587.  oboolean IsBOF(void) const;  // true if at begin of dynaset
  588.     oboolean IsValidRecord(void) const;  // true if current row is valid
  589.     
  590.  // editing
  591.     oboolean CanTransact(void) const;  // returns TRUE if transaction processing is enabled 
  592.     oboolean CanUpdate(void) const;  // returns TRUE if this dynaset is updatable
  593.  int GetEditMode(void) const;  // returns current edit mode: ODYNASET_EDIT_*
  594.  oresult StartEdit(void);  // starts edit operation
  595.  oresult CancelEdit(void); // cancels edit operation
  596.     oresult Update(void);     // finishes editing
  597.  oresult DuplicateRecord(void);  // copy the current record, adds a new record, sets field to copied values
  598.  // V2DEV - Find methods
  599.  oresult FindFirst(const char *sql);
  600.  oresult FindNext(const char *sql = 0);
  601.  oresult FindPrevious(const char *sql = 0);
  602.  oresult FindLast(const char *sql);
  603.  oboolean NoMatch(void); // TRUE if find failed
  604.  // V2DEV - Tunable cache and fetch parameters
  605.  unsigned int GetCacheSliceSize (void);
  606.  unsigned int GetCacheSlicePerBlock (void);
  607.  unsigned int GetCacheBlocks (void);
  608.  unsigned int GetFetchLimit (void);
  609.  unsigned int GetFetchSize (void);
  610.  void SetCacheSliceSize (unsigned int slice);
  611.  void SetCacheSlicePerBlock (unsigned int perblock);
  612.  void SetCacheBlocks (unsigned int blocks);
  613.  void SetFetchLimit (unsigned int flimit);
  614.  void SetFetchSize (unsigned int fsize);
  615.  oboolean IsCacheChanged(void); // TRUE if cache or fetch parameters changed
  616.  // V2.1 dev - paste to clipboard functions
  617.  oresult PlsqlOpen(const ODatabase &odb, const char *sqlst, 
  618. const char *CursorName, long options);
  619.  oresult PlsqlOpen(const ODatabase &odb, const char *sqlst, const char *CursorName, 
  620. unsigned int slicesize, unsigned int perblock,
  621. unsigned int blocks, unsigned int fetchlimit,
  622. unsigned int fetchsize, long options);
  623.  // others
  624.  oboolean CanRefresh(void) const;  // our dynasets can always requery
  625.     oboolean CanScroll(void) const;    // always scrollable
  626.  oboolean CanMark(void) const;
  627.     
  628.     long GetOptions(void) const;
  629.     // record manipulation
  630.     oresult AddNewRecord(void);
  631.  oresult DeleteRecord(void);
  632.     
  633.     // record access
  634.  int GetFieldCount(void) const;  // returns # of fields in a record
  635.     long GetRecordCount(void) const;  // (dangerous!) gets total number of records in dynaset
  636.                          // this routine downloads the entire dynaset to the client   
  637.  int GetFieldIndex(const char *fieldname) const;  // gets the index of a field by name
  638.  // all the Get and Set methods can refer to a column either by index (column position in the
  639.     //    query) or by fieldname (the name of the column as specified in the query).  GetFieldIndex
  640.  //    can be used to find the index of columns - which is more efficient
  641.     short GetFieldServerType(int index) const;
  642.     short GetFieldServerType(const char *fieldname) const;
  643.  short GetFieldPrecision(int index) const;
  644.     short GetFieldPrecision(const char *fieldname) const;
  645.     short GetFieldScale(int index) const;
  646.  short GetFieldScale(const char *fieldname) const;
  647.     oboolean IsFieldNullOK(int index) const;
  648.     oboolean IsFieldNullOK(const char *fieldname) const;
  649.     long GetFieldSize(int index) const;
  650.     long GetFieldSize(const char *fieldname) const;
  651.  long GetFieldServerSize(int index) const;
  652.     long GetFieldServerSize(const char *fieldname) const;
  653.  oboolean IsFieldTruncated(int index) const;
  654.  oboolean IsFieldTruncated(const char *fieldname) const;
  655.     
  656.  // get data from a field, either by name or index
  657.     oresult GetFieldValue(int index, OValue *val) const;
  658.  oresult GetFieldValue(const char *fieldname, OValue *val) const;
  659.     oresult GetFieldValue(int index, int *val) const;
  660.  oresult GetFieldValue(const char *fieldname, int *val) const;
  661.     oresult GetFieldValue(int index, long *val) const;
  662.  oresult GetFieldValue(const char *fieldname, long *val) const;
  663.     oresult GetFieldValue(int index, double *val) const;
  664.  oresult GetFieldValue(const char *fieldname, double *val) const;
  665.  oresult GetFieldValue(int index, char *val, unsigned short maxlen) const;
  666.  oresult GetFieldValue(const char *fieldname, char *val, unsigned short maxlen) const;
  667.  oresult GetFieldValue(int index, void __huge *longval, long len, long *readlen) const;
  668.     oresult GetFieldValue(const char *fieldname, void __huge *longval, long len, long *readlen) const;
  669.  oresult GetFieldChunk(int index, void *chunkp, long offset, unsigned short len) const;
  670.  oresult GetFieldChunk(const char *fieldname, void *chunkp, long offset,
  671. unsigned short len) const;
  672.  oresult GetFieldChunk(int index, void *chunkp, long offset,
  673. unsigned short len, unsigned short *bytesread) const;
  674.  oresult GetFieldChunk(const char *fieldname, void *chunkp, long offset,
  675. unsigned short len, unsigned short *bytesread) const;
  676.     // set data in a field, either by name or index
  677.  oresult SetFieldValue(int index, const OValue &val);
  678.     oresult SetFieldValue(const char *fieldname, const OValue &val);
  679.  oresult SetFieldValue(int index, int val);
  680.     oresult SetFieldValue(const char *fieldname, int val);
  681.  oresult SetFieldValue(int index, long val);
  682.     oresult SetFieldValue(const char *fieldname, long val);
  683.  oresult SetFieldValue(int index, double val);
  684.     oresult SetFieldValue(const char *fieldname, double val);
  685.  oresult SetFieldValue(int index, const char *val);
  686.  oresult SetFieldValue(const char *fieldname, const char *val);
  687.  oresult SetFieldValue(int index, const void __huge *longval, long len);
  688.  oresult SetFieldValue(const char *fieldname, const void __huge *longval, long len);
  689.  oresult AppendFieldChunk(int index, const void *chunkp, unsigned short len);
  690.  oresult AppendFieldChunk(const char *fieldname, const void *chunkp, unsigned short len);
  691.  // function used by other classes to construct ODynaset objects (don't call this!)
  692.  oresult OpenHelper(void *idisp, void *otheri);
  693. oboolean IsFirst(void) const;
  694. oboolean IsLast(void) const;
  695.     oboolean IsFieldUpdatable(int index) const;
  696.     oboolean IsFieldUpdatable(const char *fieldname) const;
  697.     oresult SetFieldUpdatable(int index, oboolean update) const;
  698.     oresult SetFieldUpdatable(const char *fieldname, oboolean update) const;
  699. // V2.1 dev - Original Column name and update source
  700. oresult GetOrigFieldIndex(const char *fieldname) const;
  701. const char * GetFieldName(int index) const;
  702. const char * GetFieldOriginalName(int index) const;
  703.   oresult UpdateSource(int index, updsrcs updsrc, const char *source=NULL);
  704. oresult UpdateSource(const char *fieldname, updsrcs updsrc, const char *source=NULL);
  705. oresult CopyToClipboard(long NumOfRows);
  706. oresult CopyToClipboard(long NumOfRows, char colsep, char rowsep);
  707. private:
  708.  char *m_sqlstmt;  // the sql statement that creates the dynaset
  709.  // internal helper routines
  710.  oresult Copy(const ODynaset &other);
  711.  oresult Cleanup(void);
  712. };
  713. // ----- ODynasetMark -----------------------------------------------
  714. class OEXPORT ODynasetMark : public OOracleObject
  715. {
  716. public:
  717.  // construction & destruction
  718.     ODynasetMark(void); 
  719.  ODynasetMark(const ODynasetMark &other);
  720.  ~ODynasetMark(void);
  721.     
  722.     // overloaded operators
  723.  ODynasetMark &operator=(const ODynasetMark &other);
  724.  int operator==(const ODynasetMark &other) const;
  725.     int operator!=(const ODynasetMark &other) const;
  726.     
  727.     oresult Close(void);
  728.     oboolean IsOpen(void) const;
  729.     
  730.     // function used by other classes to construct ODynasetMark objects (don't call this!)
  731.     oresult OpenHelper(void *idisp, void *otheri);
  732.     
  733.     char *Internal(void) const;
  734. private:
  735.     char  *m_markdata;  // holds data for bookmark
  736.     
  737.     oresult Cleanup(void);
  738. };
  739. // ----- OField -----------------------------------------------
  740. class OEXPORT OField : public OOracleObject
  741. {
  742. public:
  743.     // construction & destruction
  744.     OField(void);
  745.     OField(const OField &other);
  746.     ~OField(void);              
  747.     
  748.     oresult Close(void);
  749.     
  750.     // overloaded operators
  751.     OField &operator=(const OField &other);
  752.     
  753.     // other objects
  754.     ODynaset GetDynaset(void) const;
  755.     
  756.     // properties
  757.     const char *GetName(void) const; // returns name of field (user doesn't need to free)
  758.     long GetSize(void) const;  // returns length of field
  759.     long GetServerSize(void) const;  // returns length of a field (in server)
  760.     short GetServerType(void) const;
  761.     short GetPrecision(void) const;
  762.     short GetScale(void) const;
  763.     oboolean IsNullOK(void) const;
  764.  oboolean IsTruncated(void) const;
  765.  // V2DEV - Added
  766.  oboolean IsUpdatable(void) const;
  767.  oresult SetUpdatable(oboolean upd = TRUE);
  768.     // field value
  769.     oresult GetValue(OValue *val) const;  // returns value of field in val
  770.     oresult GetValue(int *val) const;
  771.     oresult GetValue(long *val) const;
  772.     oresult GetValue(double *val) const;
  773.     oresult GetValue(const char **val) const;
  774.     oresult GetValue(void __huge *longval, long len, long *readlen) const;
  775.     oresult SetValue(const OValue &val);  // sets the field to new value
  776.     oresult SetValue(int val);
  777.     oresult SetValue(long val);
  778.     oresult SetValue(double val);
  779.     oresult SetValue(const char *val);
  780.     oresult SetValue(const void __huge *longval, long len); 
  781.     
  782.     // for long fields
  783.     oresult AppendChunk(const void *chunkp, unsigned short numbytes);
  784. oresult GetChunk(const char **chunkp, long offset, unsigned short numbytes) const;
  785. // V2DEV - Added
  786. oresult GetChunk(const char **chunkp, long offset, unsigned short numbytes,
  787. unsigned short *bytesread) const;
  788. // Added for testing
  789. oresult GetChunk(const void **chunkp, long offset, unsigned short numbytes,
  790. unsigned short *bytesread) const;
  791. oresult AppendChunk(const char *chunkp, unsigned short numbytes);
  792.     // getting data (overloaded cast operators)
  793.     operator int() const;
  794.     operator long() const;
  795.     operator double() const;
  796.     operator const char *() const;
  797.     // function used by other classes to construct OField objects (don't call this!)
  798.     oresult OpenHelper(void *idisp, void *otheri);
  799. // V2.1 dev - Original field name
  800. const char *GetOriginalName (void) const;
  801. int GetIndex () {return m_index;}
  802. oresult UpdateSource(updsrcs updsrc, const char *source=NULL);
  803. private:
  804.     short  m_index;
  805.     char  *m_name;
  806.     char  *m_data;
  807.     // internal helper routines
  808.     oresult Copy(const OField &other);
  809.     oresult Cleanup(void);   
  810. };
  811. // ----- OFieldCollection -----------------------------------------------
  812. class OEXPORT OFieldCollection : public OOracleCollection
  813. {
  814. public:
  815.     OField GetField(int index) const;
  816. OField GetField(const char *name) const;
  817. OField GetFieldOname(const char *oname) const;
  818.      OField GetFieldByOriginalName(const char *oname) const;
  819.     // function used by other classes to construct OFieldCollection objects (don't call this!)
  820.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  821. };
  822. // ----- OClient -----------------------------------------------
  823. class OEXPORT OClient : public OOracleObject
  824. {
  825. public:
  826.     // construction & destruction
  827.     OClient(void);
  828.     OClient(const OClient &other);
  829.     ~OClient(void);
  830.     
  831.     // use OSession::GetClient to open a client object
  832.     oresult Close(void);
  833.     // Getting other objects
  834.     OSessionCollection GetSessions(void) const;  // get set of sessions
  835.     // overloaded operators
  836.     OClient &operator=(const OClient &other);
  837.     
  838.     // get properties
  839.     const char        *GetName(void) const;        // returns client name.
  840.     
  841.     // function used by other classes to construct OSession objects (don't call this!)
  842.     oresult OpenHelper(void *idisp, void *otheri);
  843. private:
  844.     char *m_name;
  845.     // internal helper routines
  846.     oresult Copy(const OClient &other);
  847.     oresult Cleanup(void);   
  848. };
  849. // ----- OConnection -----------------------------------------------
  850. class OEXPORT OConnection : public OOracleObject
  851. {
  852. public:
  853.     // construction & destruction
  854.     OConnection(void);
  855.     OConnection(const OConnection &other);
  856.     ~OConnection(void);
  857.     
  858.     oresult Close(void);
  859.     
  860.     // getting other objects
  861.     OSession GetSession(void) const;   
  862.     // overloaded operators
  863.     OConnection &operator=(const OConnection &other);
  864.     
  865.     // properties
  866.     const char  *GetConnectString(void) const;  // returns connect string
  867.     const char  *GetDatabaseName(void) const;  // returns database name for this connection
  868.   // V2.1 dev - transactions on database
  869. oresult  BeginTransaction(void);  // start a transaction
  870.     oresult  Commit(oboolean startnew = FALSE);   // commit (may start new transaction)
  871.     oresult  Rollback(oboolean startnew = FALSE); // rolls back transaction (may start new transaction)
  872.     oresult  ResetTransaction(void);  // unconditionally rollback (no advisories)
  873.     
  874.     // function used by other classes to construct OConnection objects (don't call this!)
  875.     oresult OpenHelper(void *idisp, void *otheri);
  876. private:
  877.     char *m_dbname;
  878.     char *m_dbconnect;
  879.     // internal helper routines
  880.     oresult Copy(const OConnection &other);
  881.     oresult Cleanup(void);   
  882. };
  883.  
  884. // ----- OConnectionCollection -----------------------------------------------
  885. class OEXPORT OConnectionCollection : public OOracleCollection
  886. {
  887. public:
  888.     OConnection GetConnection(int index) const;
  889.     // function used by other classes to construct OConnectionCollection objects (don't call this!)
  890.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  891. };
  892. // ----- OAdvise -----------------------------------------------
  893.  
  894. class OEXPORT OAdvise : public OOracleObject
  895. {
  896. public:
  897.     OAdvise(void);
  898.     OAdvise(const OAdvise &other);
  899.     OAdvise(const ODynaset &odyn);  // construct & open
  900.     virtual ~OAdvise(void);
  901.     
  902.     virtual oresult Open(const ODynaset &odyn);
  903.     virtual oresult Close(void);  // stop the advisory sink
  904.     
  905.     // getting other objects
  906.     ODynaset GetDynaset(void) const;
  907.     
  908.     // overloaded operators
  909.     OAdvise &operator=(const OAdvise &other);
  910.     
  911.     // called before an action takes place
  912.     virtual oboolean ActionRequest(int movekind);  // returns TRUE if action is allowed, FALSE to cancel
  913.     
  914.     // routines called to to notify that action occured
  915.     virtual void ActionNotify(int movekind); 
  916.     
  917.     // routine called on status change
  918.     virtual void StatusChange(int statuskind);
  919.     
  920. private:
  921.     ODynaset  m_oDyn;    // the dynaset we're getting notices from
  922.     
  923.     // private helper routines
  924.     oresult Cleanup(void);
  925.  oresult Copy(const OAdvise &other);
  926. };
  927. // ----- OParameter -----------------------------------------------
  928. class OEXPORT OParameter : public OOracleObject
  929. {
  930. public:
  931.     OParameter(void);
  932.     OParameter(const OParameter &other);
  933.     ~OParameter(void);
  934.     
  935.     oresult Close(void);
  936.     
  937.     // overloaded operators
  938.     OParameter &operator=(const OParameter &other);
  939.     
  940.     // parameter name
  941.     const char *GetName(void) const;
  942.     short GetServerType(void) const;    
  943.     const char *GetLastErrorText(void ) ;
  944.     
  945.     // parameter value
  946.  oresult GetValue(OValue *val) const;
  947.  oresult GetValue(int *val) const;
  948.  oresult GetValue(long *val) const;
  949.  oresult GetValue(double *val) const;
  950.  oresult GetValue(const char **val) const;
  951.  //V2.2 development , multiple cursor return
  952.  oresult GetValue(ODynaset *odyn) const;
  953.     int     Count (void);
  954.     
  955.     oresult Clear(void);
  956.  oresult SetValue(const OValue &val);
  957.  oresult SetValue(int val);
  958.  oresult SetValue(long val);
  959.  oresult SetValue(double val);
  960.  oresult SetValue(const char *val);
  961.     oresult MinimumSize (long size);
  962.     long    MinimumSize (void);
  963.     // getting data (overloaded cast operators)
  964.     operator int() const;
  965.     operator long() const;
  966.     operator double() const;
  967.     operator const char *() const;
  968.     // other status information
  969.     int GetStatus(void) const;
  970.     
  971.     // enabling
  972.     oresult AutoEnable(oboolean enable);
  973.     // function used by other classes to construct OParameter objects (don't call this!)
  974.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the object
  975. // PL/SQL cursor return options
  976. void SetDynasetOption(long options);
  977. void SetDynasetCacheParams(long SliceSize, long perblock, long Blocks, long FetchLimit, long FetchSize) ;
  978. private:
  979.     char *m_name; 
  980.     char *m_data;
  981.     // internal helper routines
  982.     oresult Copy(const OParameter &other);
  983.  oresult Cleanup(void);
  984.  oresult HelpGetValue(OOLEvar *tempv) const;
  985. };
  986. // ----- OParameterCollection -----------------------------------------------
  987. class OEXPORT OParameterCollection : public OOracleObject
  988. {
  989. public:
  990.     OParameterCollection(void);
  991.     OParameterCollection(const OParameterCollection &other);
  992.     ~OParameterCollection(void);
  993.     
  994.     oresult Close(void);
  995.     
  996.     // overloaded operators
  997.     OParameterCollection &operator=(const OParameterCollection &other);
  998.     
  999.     // getting other objects
  1000.     OParameter GetParameter(int index) const;
  1001.     OParameter GetParameter(const char *pname) const;
  1002.  OParamArray GetParamArray(int index) const;
  1003.  OParamArray GetParamArray(const char *pname) const;
  1004.     // adding a new parameter
  1005.     OParameter Add(const char *name, int value, int iotype, int serverType);
  1006.     OParameter Add(const char *name, long value, int iotype, int serverType);
  1007.     OParameter Add(const char *name, double value, int iotype, int serverType);
  1008.     OParameter Add(const char *name, const char *value, int iotype, int serverType);     
  1009. //BUG #262723
  1010.     OParameter Add(const char *name, const OValue &value, int iotype, int serverType);     
  1011. // PL/SQL table parameter
  1012.  OParamArray AddTable(const char *name, int iotype, int serverType, int Dimension, int Size=0 );
  1013.     
  1014.     // removing a parameter
  1015.     oresult Remove(int index);
  1016.     oresult Remove(const char *name);
  1017.     // getting # of parameters
  1018.  long GetCount(void) const;
  1019.     // function used by other classes to construct OParameterCollection objects (don't call this!)
  1020.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the set
  1021. private:
  1022.     // internal helper routines
  1023.  int m_arraysize ; // ARRAYINSERT
  1024.  oresult Copy(const OParameterCollection &other);
  1025.     oresult Cleanup(void);   
  1026.  OParameter AddHelp(const char *name, const OValue &val, int iotype, int serverType);
  1027. };
  1028. // V2DEV -- New classes
  1029. // ----- OSqlStmt -----------------------------------------------
  1030. class OEXPORT OSqlStmt : public OOracleObject
  1031. {
  1032. public:
  1033.     // construction & destruction
  1034.  OSqlStmt(void);
  1035.  OSqlStmt(const OSqlStmt &other);
  1036.  OSqlStmt(const ODatabase &odb, const char *sql_statement,
  1037. long options = OSQLSTMT_DEFAULT);  // construct & open
  1038.  ~OSqlStmt(void);
  1039.  // Open takes an SQL query as an argument.  This constructs a set of records which can
  1040.  //    then be accessed.
  1041.  oresult Open(const ODatabase &odb, const char *sql_statement,
  1042. long options = OSQLSTMT_DEFAULT);  // creates a dynaset object
  1043.  oresult Close(void);
  1044.     // getting other objects
  1045.  ODatabase GetDatabase(void) const;
  1046.  OSession GetSession(void) const;
  1047.  OConnection GetConnection(void) const;
  1048.  // overloaded operators
  1049.  OSqlStmt &operator=(const OSqlStmt &other);
  1050.     
  1051.  // the sql statement of the object
  1052.  oresult SetSQL(const char *sql_statement);  // sets new sql statement
  1053.     const char *GetSQL(void) const;  // gets sql statement
  1054.  oresult Refresh(void);  // refresh with current sql statement
  1055.  // editing
  1056.  oboolean CanTransact(void) const;  // returns TRUE if transaction processing is enabled
  1057.  // others
  1058.  oboolean CanRefresh(void) const;  // our sql statement can always requery
  1059.  long GetOptions(void) const;
  1060.  long GetRecordCount(void) const;
  1061.  // function used by other classes to construct ODynaset objects (don't call this!)
  1062.  oresult OpenHelper(void *idisp, void *otheri);
  1063. private:
  1064.  char *m_sqlstmt;  // the sql statement that creates the dynaset
  1065.  // internal helper routines
  1066.  oresult Copy(const OSqlStmt &other);
  1067.  oresult Cleanup(void);
  1068. };
  1069. // ----- OParamArray -----------------------------------------------
  1070. class OEXPORT OParamArray : public OOracleObject
  1071. {
  1072. public:
  1073.  OParamArray(void);
  1074.  OParamArray(const OParamArray &other);
  1075.  ~OParamArray(void);
  1076.     
  1077.     oresult Close(void);
  1078.     
  1079.     // overloaded operators
  1080.  OParamArray &operator=(const OParamArray &other);
  1081.     
  1082.     // parameter name
  1083.     const char *GetName(void) const;
  1084.     short GetServerType(void) const;    
  1085.  const char *GetLastErrorText(void ) ;
  1086.     
  1087.     // parameter value
  1088.  oresult GetValue(OValue *val, int index) const;
  1089.  oresult GetValue(int *val, int index) const;
  1090.  oresult GetValue(long *val, int index) const;
  1091.  oresult GetValue(double *val, int index) const;
  1092.  oresult GetValue(const char **val, int index) const;
  1093.  oresult Clear(void);
  1094.  oresult SetValue(const OValue &val, int index);
  1095.  oresult SetValue(int val, int index);
  1096.  oresult SetValue(long val, int index);
  1097.  oresult SetValue(double val, int index);
  1098.  oresult SetValue(const char *val, int index);
  1099.     oresult MinimumSize (long size);
  1100.     long    MinimumSize (void);
  1101.     // other status information
  1102.     int GetStatus(void) const;
  1103.  const char *GetLastError(void); // V2DEV - PL/SQL table parameters
  1104.  int GetArraySize(void);
  1105.  // enabling
  1106.     oresult AutoEnable(oboolean enable);
  1107.     // function used by other classes to construct OParameter objects (don't call this!)
  1108.     oresult OpenHelper(void *idisp, void *otheri);  // finish the work of opening the object
  1109. private:
  1110.     char *m_name; 
  1111.     char **m_data;
  1112.     char *m_errtext;
  1113.     // internal helper routines
  1114.  oresult Copy(const OParamArray &other);
  1115.     oresult Cleanup(void);
  1116.  oresult HelpGetValue(OOLEvar *tempv, unsigned int index) const;
  1117. };
  1118. #ifdef ORAANSI
  1119. typedef char FAR* BSTRA;
  1120. typedef BSTRA * LPBSTRA;
  1121. typedef struct FARSTRUCT tagVARIANTA  VARIANTA;
  1122. typedef struct FARSTRUCT tagVARIANTA FAR * LPVARIANTA;
  1123. typedef struct FARSTRUCT tagVARIANTA VARIANTARGA;
  1124. typedef struct FARSTRUCT tagVARIANTA FAR * LPVARIANTARGA;
  1125. struct FARSTRUCT tagVARIANTA{
  1126. VARTYPE vt;
  1127. unsigned short wReserved1;
  1128. unsigned short wReserved2;
  1129. unsigned short wReserved3;
  1130. union {
  1131.   unsigned char bVal;              /* VT_UI1                */
  1132.   short    iVal;              /* VT_I2                */
  1133.   long     lVal;              /* VT_I4                */
  1134.   float    fltVal;            /* VT_R4                */
  1135.   double       dblVal;            /* VT_R8                */
  1136.   VARIANT_BOOL boolvar;              /* VT_BOOL              */
  1137.   SCODE    scode;             /* VT_ERROR             */
  1138.   CY       cyVal;             /* VT_CY                */
  1139.   DATE     date;              /* VT_DATE              */
  1140.   BSTRA    bstrVal;           /* VT_BSTR              */
  1141.   IUnknown     FAR* punkVal;      /* VT_UNKNOWN           */
  1142.   IDispatch  FAR* pdispVal;     /* VT_DISPATCH          */
  1143.   SAFEARRAY   FAR* parray;       /* VT_ARRAY|*           */
  1144.   unsigned char    FAR* pbVal;        /* VT_BYREF|VT_UI1       */
  1145.   short    FAR* piVal;        /* VT_BYREF|VT_I2       */
  1146.   long     FAR* plVal;        /* VT_BYREF|VT_I4       */
  1147.   float    FAR* pfltVal;      /* VT_BYREF|VT_R4       */
  1148.   double       FAR* pdblVal;      /* VT_BYREF|VT_R8       */
  1149.   VARIANT_BOOL FAR* pbool;        /* VT_BYREF|VT_BOOL     */
  1150.   SCODE    FAR* pscode;       /* VT_BYREF|VT_ERROR    */
  1151.   CY       FAR* pcyVal;       /* VT_BYREF|VT_CY       */
  1152.   DATE     FAR* pdate;        /* VT_BYREF|VT_DATE     */
  1153.   BSTRA    FAR* pbstrVal;     /* VT_BYREF|VT_BSTR     */
  1154.   IUnknown   FAR* FAR* ppunkVal;  /* VT_BYREF|VT_UNKNOWN  */
  1155.   IDispatch FAR* FAR* ppdispVal; /* VT_BYREF|VT_DISPATCH */
  1156.   SAFEARRAY FAR* FAR* pparray;   /* VT_BYREF|VT_ARRAY|*  */
  1157.   VARIANT    FAR* pvarVal;      /* VT_BYREF|VT_VARIANT  */
  1158.   void     FAR* byref;        /* Generic ByRef        */
  1159. }
  1160. #if defined(NONAMELESSUNION) || (defined(_MAC) && !defined(__cplusplus) && !defined(_CID_MS20))
  1161. u
  1162. #endif
  1163. ;
  1164. };
  1165. STDAPI_(BSTRA) SysAllocStringA(const char FAR*);
  1166. #define SysAllocStringLenA SysAllocStringByteLen
  1167. inline void SysFreeStringA(BSTRA bstr) { SysFreeString((BSTR)bstr); }
  1168. STDAPI_(int)   SysReAllocStringLenA(BSTRA FAR*, const char FAR*, unsigned int);
  1169. HRESULT ConvertVariantToA(LPVARIANTA);
  1170. HRESULT ConvertVariantToW(LPVARIANT);
  1171. STDAPI  VariantChangeTypeA( VARIANTARGA FAR* pvargDest,VARIANTARGA FAR* pvarSrc,unsigned short wFlags,VARTYPE vt);
  1172. #endif // WRAPPER
  1173. #endif // ORACL_ORACLE