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