home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 May / PCFMay2001.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / icrsint.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  4.4 KB  |  193 lines

  1. //--------------------------------------------------------------------
  2. // Microsoft ADO
  3. //
  4. // (c) 1996-1998 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. //
  7. //
  8. // ADO C/C++ Record Binding Definitions
  9. //
  10. //--------------------------------------------------------------------
  11.  
  12. #ifndef _ICRSINT_H_
  13. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  14. #define _ICRSINT_H_
  15.  
  16. #include <olectl.h>
  17. #include <stddef.h>
  18.  
  19. // forwards
  20. class CADORecordBinding;
  21.  
  22. #define classoffset(base, derived) ((DWORD)(static_cast<base*>((derived*)8))-8)
  23.  
  24. enum ADOFieldStatusEnum
  25. {    
  26.     adFldOK = 0,
  27.     adFldBadAccessor = 1,
  28.     adFldCantConvertValue = 2,
  29.     adFldNull = 3,
  30.     adFldTruncated = 4,
  31.     adFldSignMismatch = 5,
  32.     adFldDataOverFlow = 6,
  33.     adFldCantCreate = 7,
  34.     adFldUnavailable = 8,
  35.     adFldPermissionDenied = 9,
  36.     adFldIntegrityViolation = 10,
  37.     adFldSchemaViolation = 11,
  38.     adFldBadStatus = 12,
  39.     adFldDefault = 13
  40. };
  41.  
  42. typedef struct stADO_BINDING_ENTRY
  43. {
  44.     ULONG            ulOrdinal;
  45.     WORD            wDataType;
  46.     BYTE            bPrecision;
  47.     BYTE            bScale;
  48.     ULONG            ulSize;
  49.     ULONG            ulBufferOffset;
  50.     ULONG            ulStatusOffset;
  51.     ULONG            ulLengthOffset;
  52.     ULONG            ulADORecordBindingOffSet;
  53.     BOOL            fModify;
  54. } ADO_BINDING_ENTRY;
  55.  
  56. #define BEGIN_ADO_BINDING(cls) public: \
  57.     typedef cls ADORowClass; \
  58.     const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \
  59.     static const ADO_BINDING_ENTRY rgADOBindingEntries[] = { 
  60.  
  61. //
  62. // Fixed length non-numeric data
  63. //
  64. #define ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)\
  65.     {Ordinal, \
  66.     DataType, \
  67.     0, \
  68.     0, \
  69.     0, \
  70.     offsetof(ADORowClass, Buffer), \
  71.     offsetof(ADORowClass, Status), \
  72.     0, \
  73.     classoffset(CADORecordBinding, ADORowClass), \
  74.     Modify},
  75.  
  76. #define ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)\
  77.     {Ordinal, \
  78.     DataType, \
  79.     0, \
  80.     0, \
  81.     0, \
  82.     offsetof(ADORowClass, Buffer), \
  83.     0, \
  84.     0, \
  85.     classoffset(CADORecordBinding, ADORowClass), \
  86.     Modify},
  87.  
  88. //
  89. // Numeric data
  90. // 
  91. #define ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)\
  92.     {Ordinal, \
  93.     DataType, \
  94.     Precision, \
  95.     Scale, \
  96.     0, \
  97.     offsetof(ADORowClass, Buffer), \
  98.     offsetof(ADORowClass, Status), \
  99.     0, \
  100.     classoffset(CADORecordBinding, ADORowClass), \
  101.     Modify},
  102.  
  103. #define ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)\
  104.     {Ordinal, \
  105.     DataType, \
  106.     Precision, \
  107.     Scale, \
  108.     0, \
  109.     offsetof(ADORowClass, Buffer), \
  110.     0, \
  111.     0, \
  112.     classoffset(CADORecordBinding, ADORowClass), \
  113.     Modify},
  114.  
  115. //
  116. // Variable length data
  117. //
  118. #define ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)\
  119.     {Ordinal, \
  120.     DataType, \
  121.     0, \
  122.     0, \
  123.     Size, \
  124.     offsetof(ADORowClass, Buffer), \
  125.     offsetof(ADORowClass, Status), \
  126.     offsetof(ADORowClass, Length), \
  127.     classoffset(CADORecordBinding, ADORowClass), \
  128.     Modify},
  129.  
  130. #define ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)\
  131.     {Ordinal, \
  132.     DataType, \
  133.     0, \
  134.     0, \
  135.     Size, \
  136.     offsetof(ADORowClass, Buffer), \
  137.     offsetof(ADORowClass, Status), \
  138.     0, \
  139.     classoffset(CADORecordBinding, ADORowClass), \
  140.     Modify},
  141.  
  142. #define ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)\
  143.     {Ordinal, \
  144.     DataType, \
  145.     0, \
  146.     0, \
  147.     Size, \
  148.     offsetof(ADORowClass, Buffer), \
  149.     0, \
  150.     offsetof(ADORowClass, Length), \
  151.     classoffset(CADORecordBinding, ADORowClass), \
  152.     Modify},
  153.  
  154. #define ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)\
  155.     {Ordinal, \
  156.     DataType, \
  157.     0, \
  158.     0, \
  159.     Size, \
  160.     offsetof(ADORowClass, Buffer), \
  161.     0, \
  162.     0, \
  163.     classoffset(CADORecordBinding, ADORowClass), \
  164.     Modify},
  165.  
  166. #define END_ADO_BINDING()   {0, adEmpty, 0, 0, 0, 0, 0, 0, 0, FALSE}};\
  167.     return rgADOBindingEntries;}
  168.  
  169. //
  170. // Interface that the client 'record' class needs to support. The ADO Binding entries
  171. // provide the implementation for this interface.
  172. //
  173. class CADORecordBinding
  174. {
  175. public:
  176.     STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries) (VOID) PURE;
  177. };
  178.  
  179. //
  180. // Interface that allows a client to fetch a record of data into class data members.
  181. //
  182. struct __declspec(uuid("00000544-0000-0010-8000-00aa006d2ea4")) IADORecordBinding;
  183. DECLARE_INTERFACE_(IADORecordBinding, IUnknown)
  184. {
  185. public:
  186.     STDMETHOD(BindToRecordset) (CADORecordBinding *pAdoRecordBinding) PURE;
  187.     STDMETHOD(AddNew) (CADORecordBinding *pAdoRecordBinding) PURE;
  188.     STDMETHOD(Update) (CADORecordBinding *pAdoRecordBinding) PURE;
  189. };
  190.  
  191. #pragma option pop /*P_O_Pop*/
  192. #endif // !_ICRSINT_H_
  193.