home *** CD-ROM | disk | FTP | other *** search
- //--------------------------------------------------------------------
- // Microsoft ADO
- //
- // (c) 1996-1998 Microsoft Corporation. All Rights Reserved.
- //
- //
- //
- // ADO C/C++ Record Binding Definitions
- //
- //--------------------------------------------------------------------
-
- #ifndef _ICRSINT_H_
- #pragma option push -b -a8 -pc -A- /*P_O_Push*/
- #define _ICRSINT_H_
-
- #include <olectl.h>
- #include <stddef.h>
-
- // forwards
- class CADORecordBinding;
-
- #define classoffset(base, derived) ((DWORD)(static_cast<base*>((derived*)8))-8)
-
- enum ADOFieldStatusEnum
- {
- adFldOK = 0,
- adFldBadAccessor = 1,
- adFldCantConvertValue = 2,
- adFldNull = 3,
- adFldTruncated = 4,
- adFldSignMismatch = 5,
- adFldDataOverFlow = 6,
- adFldCantCreate = 7,
- adFldUnavailable = 8,
- adFldPermissionDenied = 9,
- adFldIntegrityViolation = 10,
- adFldSchemaViolation = 11,
- adFldBadStatus = 12,
- adFldDefault = 13
- };
-
- typedef struct stADO_BINDING_ENTRY
- {
- ULONG ulOrdinal;
- WORD wDataType;
- BYTE bPrecision;
- BYTE bScale;
- ULONG ulSize;
- ULONG ulBufferOffset;
- ULONG ulStatusOffset;
- ULONG ulLengthOffset;
- ULONG ulADORecordBindingOffSet;
- BOOL fModify;
- } ADO_BINDING_ENTRY;
-
- #define BEGIN_ADO_BINDING(cls) public: \
- typedef cls ADORowClass; \
- const ADO_BINDING_ENTRY* STDMETHODCALLTYPE GetADOBindingEntries() { \
- static const ADO_BINDING_ENTRY rgADOBindingEntries[] = {
-
- //
- // Fixed length non-numeric data
- //
- #define ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- 0, \
- offsetof(ADORowClass, Buffer), \
- offsetof(ADORowClass, Status), \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- 0, \
- offsetof(ADORowClass, Buffer), \
- 0, \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- //
- // Numeric data
- //
- #define ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)\
- {Ordinal, \
- DataType, \
- Precision, \
- Scale, \
- 0, \
- offsetof(ADORowClass, Buffer), \
- offsetof(ADORowClass, Status), \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)\
- {Ordinal, \
- DataType, \
- Precision, \
- Scale, \
- 0, \
- offsetof(ADORowClass, Buffer), \
- 0, \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- //
- // Variable length data
- //
- #define ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- Size, \
- offsetof(ADORowClass, Buffer), \
- offsetof(ADORowClass, Status), \
- offsetof(ADORowClass, Length), \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- Size, \
- offsetof(ADORowClass, Buffer), \
- offsetof(ADORowClass, Status), \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- Size, \
- offsetof(ADORowClass, Buffer), \
- 0, \
- offsetof(ADORowClass, Length), \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)\
- {Ordinal, \
- DataType, \
- 0, \
- 0, \
- Size, \
- offsetof(ADORowClass, Buffer), \
- 0, \
- 0, \
- classoffset(CADORecordBinding, ADORowClass), \
- Modify},
-
- #define END_ADO_BINDING() {0, adEmpty, 0, 0, 0, 0, 0, 0, 0, FALSE}};\
- return rgADOBindingEntries;}
-
- //
- // Interface that the client 'record' class needs to support. The ADO Binding entries
- // provide the implementation for this interface.
- //
- class CADORecordBinding
- {
- public:
- STDMETHOD_(const ADO_BINDING_ENTRY*, GetADOBindingEntries) (VOID) PURE;
- };
-
- //
- // Interface that allows a client to fetch a record of data into class data members.
- //
- struct __declspec(uuid("00000544-0000-0010-8000-00aa006d2ea4")) IADORecordBinding;
- DECLARE_INTERFACE_(IADORecordBinding, IUnknown)
- {
- public:
- STDMETHOD(BindToRecordset) (CADORecordBinding *pAdoRecordBinding) PURE;
- STDMETHOD(AddNew) (CADORecordBinding *pAdoRecordBinding) PURE;
- STDMETHOD(Update) (CADORecordBinding *pAdoRecordBinding) PURE;
- };
-
- #pragma option pop /*P_O_Pop*/
- #endif // !_ICRSINT_H_
-