/*** Autogenerated by WIDL 11.8 from ../wine/include/msado15_backcompat.idl - Do not edit ***/

#ifdef _WIN32
#ifndef __REQUIRED_RPCNDR_H_VERSION__
#define __REQUIRED_RPCNDR_H_VERSION__ 475
#endif
#include <rpc.h>
#include <rpcndr.h>
#endif

#ifndef COM_NO_WINDOWS_H
#include <windows.h>
#include <ole2.h>
#endif

#ifndef __msado15_backcompat_h__
#define __msado15_backcompat_h__

/* Forward declarations */

#ifndef __Property_FWD_DEFINED__
#define __Property_FWD_DEFINED__
typedef interface Property Property;
#ifdef __cplusplus
interface Property;
#endif /* __cplusplus */
#endif

#ifndef ___Collection_FWD_DEFINED__
#define ___Collection_FWD_DEFINED__
typedef interface _Collection _Collection;
#ifdef __cplusplus
interface _Collection;
#endif /* __cplusplus */
#endif

#ifndef __Properties_FWD_DEFINED__
#define __Properties_FWD_DEFINED__
typedef interface Properties Properties;
#ifdef __cplusplus
interface Properties;
#endif /* __cplusplus */
#endif

#ifndef ___ADO_FWD_DEFINED__
#define ___ADO_FWD_DEFINED__
typedef interface _ADO _ADO;
#ifdef __cplusplus
interface _ADO;
#endif /* __cplusplus */
#endif

#ifndef __Field20_FWD_DEFINED__
#define __Field20_FWD_DEFINED__
typedef interface Field20 Field20;
#ifdef __cplusplus
interface Field20;
#endif /* __cplusplus */
#endif

#ifndef __Field_FWD_DEFINED__
#define __Field_FWD_DEFINED__
typedef interface Field Field;
#ifdef __cplusplus
interface Field;
#endif /* __cplusplus */
#endif

#ifndef __Fields15_FWD_DEFINED__
#define __Fields15_FWD_DEFINED__
typedef interface Fields15 Fields15;
#ifdef __cplusplus
interface Fields15;
#endif /* __cplusplus */
#endif

#ifndef __Fields20_FWD_DEFINED__
#define __Fields20_FWD_DEFINED__
typedef interface Fields20 Fields20;
#ifdef __cplusplus
interface Fields20;
#endif /* __cplusplus */
#endif

#ifndef __Fields_FWD_DEFINED__
#define __Fields_FWD_DEFINED__
typedef interface Fields Fields;
#ifdef __cplusplus
interface Fields;
#endif /* __cplusplus */
#endif

#ifndef __Recordset15_FWD_DEFINED__
#define __Recordset15_FWD_DEFINED__
typedef interface Recordset15 Recordset15;
#ifdef __cplusplus
interface Recordset15;
#endif /* __cplusplus */
#endif

#ifndef __Recordset20_FWD_DEFINED__
#define __Recordset20_FWD_DEFINED__
typedef interface Recordset20 Recordset20;
#ifdef __cplusplus
interface Recordset20;
#endif /* __cplusplus */
#endif

#ifndef __Recordset21_FWD_DEFINED__
#define __Recordset21_FWD_DEFINED__
typedef interface Recordset21 Recordset21;
#ifdef __cplusplus
interface Recordset21;
#endif /* __cplusplus */
#endif

#ifndef ___Recordset_FWD_DEFINED__
#define ___Recordset_FWD_DEFINED__
typedef interface _Recordset _Recordset;
#ifdef __cplusplus
interface _Recordset;
#endif /* __cplusplus */
#endif

#ifndef __Error_FWD_DEFINED__
#define __Error_FWD_DEFINED__
typedef interface Error Error;
#ifdef __cplusplus
interface Error;
#endif /* __cplusplus */
#endif

#ifndef __Errors_FWD_DEFINED__
#define __Errors_FWD_DEFINED__
typedef interface Errors Errors;
#ifdef __cplusplus
interface Errors;
#endif /* __cplusplus */
#endif

#ifndef __Connection15_FWD_DEFINED__
#define __Connection15_FWD_DEFINED__
typedef interface Connection15 Connection15;
#ifdef __cplusplus
interface Connection15;
#endif /* __cplusplus */
#endif

#ifndef ___Connection_FWD_DEFINED__
#define ___Connection_FWD_DEFINED__
typedef interface _Connection _Connection;
#ifdef __cplusplus
interface _Connection;
#endif /* __cplusplus */
#endif

#ifndef ___Parameter_FWD_DEFINED__
#define ___Parameter_FWD_DEFINED__
typedef interface _Parameter _Parameter;
#ifdef __cplusplus
interface _Parameter;
#endif /* __cplusplus */
#endif

#ifndef ___DynaCollection_FWD_DEFINED__
#define ___DynaCollection_FWD_DEFINED__
typedef interface _DynaCollection _DynaCollection;
#ifdef __cplusplus
interface _DynaCollection;
#endif /* __cplusplus */
#endif

#ifndef __Parameters_FWD_DEFINED__
#define __Parameters_FWD_DEFINED__
typedef interface Parameters Parameters;
#ifdef __cplusplus
interface Parameters;
#endif /* __cplusplus */
#endif

#ifndef __Command15_FWD_DEFINED__
#define __Command15_FWD_DEFINED__
typedef interface Command15 Command15;
#ifdef __cplusplus
interface Command15;
#endif /* __cplusplus */
#endif

#ifndef __Command25_FWD_DEFINED__
#define __Command25_FWD_DEFINED__
typedef interface Command25 Command25;
#ifdef __cplusplus
interface Command25;
#endif /* __cplusplus */
#endif

#ifndef ___Command_FWD_DEFINED__
#define ___Command_FWD_DEFINED__
typedef interface _Command _Command;
#ifdef __cplusplus
interface _Command;
#endif /* __cplusplus */
#endif

#ifndef __ConnectionEventsVt_FWD_DEFINED__
#define __ConnectionEventsVt_FWD_DEFINED__
typedef interface ConnectionEventsVt ConnectionEventsVt;
#ifdef __cplusplus
interface ConnectionEventsVt;
#endif /* __cplusplus */
#endif

#ifndef __ConnectionEvents_FWD_DEFINED__
#define __ConnectionEvents_FWD_DEFINED__
typedef interface ConnectionEvents ConnectionEvents;
#ifdef __cplusplus
interface ConnectionEvents;
#endif /* __cplusplus */
#endif

#ifndef ___Record_FWD_DEFINED__
#define ___Record_FWD_DEFINED__
typedef interface _Record _Record;
#ifdef __cplusplus
interface _Record;
#endif /* __cplusplus */
#endif

#ifndef ___Stream_FWD_DEFINED__
#define ___Stream_FWD_DEFINED__
typedef interface _Stream _Stream;
#ifdef __cplusplus
interface _Stream;
#endif /* __cplusplus */
#endif

#ifndef __RecordsetEvents_FWD_DEFINED__
#define __RecordsetEvents_FWD_DEFINED__
typedef interface RecordsetEvents RecordsetEvents;
#ifdef __cplusplus
interface RecordsetEvents;
#endif /* __cplusplus */
#endif

#ifndef __ADODebugging_FWD_DEFINED__
#define __ADODebugging_FWD_DEFINED__
typedef interface ADODebugging ADODebugging;
#ifdef __cplusplus
interface ADODebugging;
#endif /* __cplusplus */
#endif

#ifndef __ADOConnectionConstruction15_FWD_DEFINED__
#define __ADOConnectionConstruction15_FWD_DEFINED__
typedef interface ADOConnectionConstruction15 ADOConnectionConstruction15;
#ifdef __cplusplus
interface ADOConnectionConstruction15;
#endif /* __cplusplus */
#endif

#ifndef __ADOConnectionConstruction_FWD_DEFINED__
#define __ADOConnectionConstruction_FWD_DEFINED__
typedef interface ADOConnectionConstruction ADOConnectionConstruction;
#ifdef __cplusplus
interface ADOConnectionConstruction;
#endif /* __cplusplus */
#endif

#ifndef __ADOCommandConstruction_FWD_DEFINED__
#define __ADOCommandConstruction_FWD_DEFINED__
typedef interface ADOCommandConstruction ADOCommandConstruction;
#ifdef __cplusplus
interface ADOCommandConstruction;
#endif /* __cplusplus */
#endif

#ifndef __ADORecordsetConstruction_FWD_DEFINED__
#define __ADORecordsetConstruction_FWD_DEFINED__
typedef interface ADORecordsetConstruction ADORecordsetConstruction;
#ifdef __cplusplus
interface ADORecordsetConstruction;
#endif /* __cplusplus */
#endif

#ifndef __Connection_FWD_DEFINED__
#define __Connection_FWD_DEFINED__
#ifdef __cplusplus
typedef class Connection Connection;
#else
typedef struct Connection Connection;
#endif /* defined __cplusplus */
#endif /* defined __Connection_FWD_DEFINED__ */

#ifndef __Command_FWD_DEFINED__
#define __Command_FWD_DEFINED__
#ifdef __cplusplus
typedef class Command Command;
#else
typedef struct Command Command;
#endif /* defined __cplusplus */
#endif /* defined __Command_FWD_DEFINED__ */

#ifndef __Recordset_FWD_DEFINED__
#define __Recordset_FWD_DEFINED__
#ifdef __cplusplus
typedef class Recordset Recordset;
#else
typedef struct Recordset Recordset;
#endif /* defined __cplusplus */
#endif /* defined __Recordset_FWD_DEFINED__ */

#ifndef __Parameter_FWD_DEFINED__
#define __Parameter_FWD_DEFINED__
#ifdef __cplusplus
typedef class Parameter Parameter;
#else
typedef struct Parameter Parameter;
#endif /* defined __cplusplus */
#endif /* defined __Parameter_FWD_DEFINED__ */

#ifndef __Record_FWD_DEFINED__
#define __Record_FWD_DEFINED__
#ifdef __cplusplus
typedef class Record Record;
#else
typedef struct Record Record;
#endif /* defined __cplusplus */
#endif /* defined __Record_FWD_DEFINED__ */

#ifndef __Stream_FWD_DEFINED__
#define __Stream_FWD_DEFINED__
#ifdef __cplusplus
typedef class Stream Stream;
#else
typedef struct Stream Stream;
#endif /* defined __cplusplus */
#endif /* defined __Stream_FWD_DEFINED__ */

/* Headers for imported files */

#include <oaidl.h>

#ifdef __cplusplus
extern "C" {
#endif

#ifndef ___ADO_FWD_DEFINED__
#define ___ADO_FWD_DEFINED__
typedef interface _ADO _ADO;
#ifdef __cplusplus
interface _ADO;
#endif /* __cplusplus */
#endif

#ifndef ___Collection_FWD_DEFINED__
#define ___Collection_FWD_DEFINED__
typedef interface _Collection _Collection;
#ifdef __cplusplus
interface _Collection;
#endif /* __cplusplus */
#endif

#ifndef ___Command_FWD_DEFINED__
#define ___Command_FWD_DEFINED__
typedef interface _Command _Command;
#ifdef __cplusplus
interface _Command;
#endif /* __cplusplus */
#endif

#ifndef ___Connection_FWD_DEFINED__
#define ___Connection_FWD_DEFINED__
typedef interface _Connection _Connection;
#ifdef __cplusplus
interface _Connection;
#endif /* __cplusplus */
#endif

#ifndef ___DynaCollection_FWD_DEFINED__
#define ___DynaCollection_FWD_DEFINED__
typedef interface _DynaCollection _DynaCollection;
#ifdef __cplusplus
interface _DynaCollection;
#endif /* __cplusplus */
#endif

#ifndef ___Parameter_FWD_DEFINED__
#define ___Parameter_FWD_DEFINED__
typedef interface _Parameter _Parameter;
#ifdef __cplusplus
interface _Parameter;
#endif /* __cplusplus */
#endif

#ifndef ___Record_FWD_DEFINED__
#define ___Record_FWD_DEFINED__
typedef interface _Record _Record;
#ifdef __cplusplus
interface _Record;
#endif /* __cplusplus */
#endif

#ifndef ___Recordset_FWD_DEFINED__
#define ___Recordset_FWD_DEFINED__
typedef interface _Recordset _Recordset;
#ifdef __cplusplus
interface _Recordset;
#endif /* __cplusplus */
#endif

#ifndef ___Stream_FWD_DEFINED__
#define ___Stream_FWD_DEFINED__
typedef interface _Stream _Stream;
#ifdef __cplusplus
interface _Stream;
#endif /* __cplusplus */
#endif

#ifndef __ADODebugging_FWD_DEFINED__
#define __ADODebugging_FWD_DEFINED__
typedef interface ADODebugging ADODebugging;
#ifdef __cplusplus
interface ADODebugging;
#endif /* __cplusplus */
#endif

#ifndef __ADOConnectionConstruction_FWD_DEFINED__
#define __ADOConnectionConstruction_FWD_DEFINED__
typedef interface ADOConnectionConstruction ADOConnectionConstruction;
#ifdef __cplusplus
interface ADOConnectionConstruction;
#endif /* __cplusplus */
#endif

#ifndef __ADOCommandConstruction_FWD_DEFINED__
#define __ADOCommandConstruction_FWD_DEFINED__
typedef interface ADOCommandConstruction ADOCommandConstruction;
#ifdef __cplusplus
interface ADOCommandConstruction;
#endif /* __cplusplus */
#endif

#ifndef __ADORecordsetConstruction_FWD_DEFINED__
#define __ADORecordsetConstruction_FWD_DEFINED__
typedef interface ADORecordsetConstruction ADORecordsetConstruction;
#ifdef __cplusplus
interface ADORecordsetConstruction;
#endif /* __cplusplus */
#endif

#ifndef __Command15_FWD_DEFINED__
#define __Command15_FWD_DEFINED__
typedef interface Command15 Command15;
#ifdef __cplusplus
interface Command15;
#endif /* __cplusplus */
#endif

#ifndef __Command25_FWD_DEFINED__
#define __Command25_FWD_DEFINED__
typedef interface Command25 Command25;
#ifdef __cplusplus
interface Command25;
#endif /* __cplusplus */
#endif

#ifndef __Error_FWD_DEFINED__
#define __Error_FWD_DEFINED__
typedef interface Error Error;
#ifdef __cplusplus
interface Error;
#endif /* __cplusplus */
#endif

#ifndef __Errors_FWD_DEFINED__
#define __Errors_FWD_DEFINED__
typedef interface Errors Errors;
#ifdef __cplusplus
interface Errors;
#endif /* __cplusplus */
#endif

#ifndef __Field_FWD_DEFINED__
#define __Field_FWD_DEFINED__
typedef interface Field Field;
#ifdef __cplusplus
interface Field;
#endif /* __cplusplus */
#endif

#ifndef __Field15_FWD_DEFINED__
#define __Field15_FWD_DEFINED__
typedef interface Field15 Field15;
#ifdef __cplusplus
interface Field15;
#endif /* __cplusplus */
#endif

#ifndef __Field20_FWD_DEFINED__
#define __Field20_FWD_DEFINED__
typedef interface Field20 Field20;
#ifdef __cplusplus
interface Field20;
#endif /* __cplusplus */
#endif

#ifndef __Fields_FWD_DEFINED__
#define __Fields_FWD_DEFINED__
typedef interface Fields Fields;
#ifdef __cplusplus
interface Fields;
#endif /* __cplusplus */
#endif

#ifndef __Fields15_FWD_DEFINED__
#define __Fields15_FWD_DEFINED__
typedef interface Fields15 Fields15;
#ifdef __cplusplus
interface Fields15;
#endif /* __cplusplus */
#endif

#ifndef __Fields20_FWD_DEFINED__
#define __Fields20_FWD_DEFINED__
typedef interface Fields20 Fields20;
#ifdef __cplusplus
interface Fields20;
#endif /* __cplusplus */
#endif

#ifndef __Parameters_FWD_DEFINED__
#define __Parameters_FWD_DEFINED__
typedef interface Parameters Parameters;
#ifdef __cplusplus
interface Parameters;
#endif /* __cplusplus */
#endif

#ifndef __Properties_FWD_DEFINED__
#define __Properties_FWD_DEFINED__
typedef interface Properties Properties;
#ifdef __cplusplus
interface Properties;
#endif /* __cplusplus */
#endif

#ifndef __Property_FWD_DEFINED__
#define __Property_FWD_DEFINED__
typedef interface Property Property;
#ifdef __cplusplus
interface Property;
#endif /* __cplusplus */
#endif

#ifndef __Recordset15_FWD_DEFINED__
#define __Recordset15_FWD_DEFINED__
typedef interface Recordset15 Recordset15;
#ifdef __cplusplus
interface Recordset15;
#endif /* __cplusplus */
#endif

#ifndef __Recordset20_FWD_DEFINED__
#define __Recordset20_FWD_DEFINED__
typedef interface Recordset20 Recordset20;
#ifdef __cplusplus
interface Recordset20;
#endif /* __cplusplus */
#endif

#ifndef __Recordset21_FWD_DEFINED__
#define __Recordset21_FWD_DEFINED__
typedef interface Recordset21 Recordset21;
#ifdef __cplusplus
interface Recordset21;
#endif /* __cplusplus */
#endif

#ifndef __ConnectionEventsVt_FWD_DEFINED__
#define __ConnectionEventsVt_FWD_DEFINED__
typedef interface ConnectionEventsVt ConnectionEventsVt;
#ifdef __cplusplus
interface ConnectionEventsVt;
#endif /* __cplusplus */
#endif

#ifndef __ConnectionEvents_FWD_DEFINED__
#define __ConnectionEvents_FWD_DEFINED__
typedef interface ConnectionEvents ConnectionEvents;
#ifdef __cplusplus
interface ConnectionEvents;
#endif /* __cplusplus */
#endif

#ifndef __RecordsetEvents_FWD_DEFINED__
#define __RecordsetEvents_FWD_DEFINED__
typedef interface RecordsetEvents RecordsetEvents;
#ifdef __cplusplus
interface RecordsetEvents;
#endif /* __cplusplus */
#endif

typedef LONG_PTR ADO_LONGPTR;
typedef enum ErrorValueEnum {
    adErrInvalidArgument = 3001,
    adErrOpeningFile = 3002,
    adErrReadFile = 3003,
    adErrWriteFile = 3004,
    adErrNoCurrentRecord = 3021,
    adErrIllegalOperation = 3219,
    adErrCantChangeProvider = 3220,
    adErrInTransaction = 3246,
    adErrFeatureNotAvailable = 3251,
    adErrItemNotFound = 3265,
    adErrObjectInCollection = 3367,
    adErrObjectNotSet = 3420,
    adErrDataConversion = 3421,
    adErrObjectClosed = 3704,
    adErrObjectOpen = 3705,
    adErrProviderNotFound = 3706,
    adErrBoundToCommand = 3707,
    adErrInvalidParamInfo = 3708,
    adErrInvalidConnection = 3709,
    adErrNotReentrant = 3710,
    adErrStillExecuting = 3711,
    adErrOperationCancelled = 3712,
    adErrStillConnecting = 3713,
    adErrInvalidTransaction = 3714,
    adErrNotExecuting = 3715,
    adErrUnsafeOperation = 3716,
    adWrnSecurityDialog = 3717,
    adWrnSecurityDialogHeader = 3718,
    adErrIntegrityViolation = 3719,
    adErrPermissionDenied = 3720,
    adErrDataOverflow = 3721,
    adErrSchemaViolation = 3722,
    adErrSignMismatch = 3723,
    adErrCantConvertvalue = 3724,
    adErrCantCreate = 3725,
    adErrColumnNotOnThisRow = 3726,
    adErrURLDoesNotExist = 3727,
    adErrTreePermissionDenied = 3728,
    adErrInvalidURL = 3729,
    adErrResourceLocked = 3730,
    adErrResourceExists = 3731,
    adErrCannotComplete = 3732,
    adErrVolumeNotFound = 3733,
    adErrOutOfSpace = 3734,
    adErrResourceOutOfScope = 3735,
    adErrUnavailable = 3736,
    adErrURLNamedRowDoesNotExist = 3737,
    adErrDelResOutOfScope = 3738,
    adErrPropInvalidColumn = 3739,
    adErrPropInvalidOption = 3740,
    adErrPropInvalidValue = 3741,
    adErrPropConflicting = 3742,
    adErrPropNotAllSettable = 3743,
    adErrPropNotSet = 3744,
    adErrPropNotSettable = 3745,
    adErrPropNotSupported = 3746,
    adErrCatalogNotSet = 3747,
    adErrCantChangeConnection = 3748,
    adErrFieldsUpdateFailed = 3749,
    adErrDenyNotSupported = 3750,
    adErrDenyTypeNotSupported = 3751,
    adErrProviderNotSpecified = 3753,
    adErrConnectionStringTooLong = 3754
} ErrorValueEnum;
typedef enum PositionEnum {
    adPosUnknown = -1,
    adPosBOF = -2,
    adPosEOF = -3
} PositionEnum;
typedef ADO_LONGPTR PositionEnum_Param;
typedef enum DataTypeEnum {
    adEmpty = 0,
    adTinyInt = 16,
    adSmallInt = 2,
    adInteger = 3,
    adBigInt = 20,
    adUnsignedTinyInt = 17,
    adUnsignedSmallInt = 18,
    adUnsignedInt = 19,
    adUnsignedBigInt = 21,
    adSingle = 4,
    adDouble = 5,
    adCurrency = 6,
    adDecimal = 14,
    adNumeric = 131,
    adBoolean = 11,
    adError = 10,
    adUserDefined = 132,
    adVariant = 12,
    adIDispatch = 9,
    adIUnknown = 13,
    adGUID = 72,
    adDate = 7,
    adDBDate = 133,
    adDBTime = 134,
    adDBTimeStamp = 135,
    adBSTR = 8,
    adChar = 129,
    adVarChar = 200,
    adLongVarChar = 201,
    adWChar = 130,
    adVarWChar = 202,
    adLongVarWChar = 203,
    adBinary = 128,
    adVarBinary = 204,
    adLongVarBinary = 205,
    adChapter = 136,
    adFileTime = 64,
    adPropVariant = 138,
    adVarNumeric = 139,
    adArray = 0x2000
} DataTypeEnum;
typedef enum PersistFormatEnum {
    adPersistADTG = 0,
    adPersistXML = 1
} PersistFormatEnum;
typedef enum SeekEnum {
    adSeekFirstEQ = 1,
    adSeekLastEQ = 2,
    adSeekAfterEQ = 4,
    adSeekAfter = 8,
    adSeekBeforeEQ = 16,
    adSeekBefore = 32
} SeekEnum;
typedef enum CursorTypeEnum {
    adOpenUnspecified = -1,
    adOpenForwardOnly = 0,
    adOpenKeyset = 1,
    adOpenDynamic = 2,
    adOpenStatic = 3
} CursorTypeEnum;
typedef enum FieldAttributeEnum {
    adFldUnspecified = -1,
    adFldMayDefer = 0x2,
    adFldUpdatable = 0x4,
    adFldUnknownUpdatable = 0x8,
    adFldFixed = 0x10,
    adFldIsNullable = 0x20,
    adFldMayBeNull = 0x40,
    adFldLong = 0x80,
    adFldRowID = 0x100,
    adFldRowVersion = 0x200,
    adFldCacheDeferred = 0x1000,
    adFldIsChapter = 0x2000,
    adFldNegativeScale = 0x4000,
    adFldKeyColumn = 0x8000,
    adFldIsRowURL = 0x10000,
    adFldIsDefaultStream = 0x20000,
    adFldIsCollection = 0x40000
} FieldAttributeEnum;
typedef enum ResyncEnum {
    adResyncUnderlyingValues = 1,
    adResyncAllValues = 2
} ResyncEnum;
typedef enum LockTypeEnum {
    adLockUnspecified = -1,
    adLockReadOnly = 1,
    adLockPessimistic = 2,
    adLockOptimistic = 3,
    adLockBatchOptimistic = 4
} LockTypeEnum;
typedef enum AffectEnum {
    adAffectCurrent = 1,
    adAffectGroup = 2,
    adAffectAll = 3,
    adAffectAllChapters = 4
} AffectEnum;
typedef enum EditModeEnum {
    adEditNone = 0,
    adEditInProgress = 1,
    adEditAdd = 2,
    adEditDelete = 4
} EditModeEnum;
typedef enum CursorLocationEnum {
    adUseNone = 1,
    adUseServer = 2,
    adUseClient = 3,
    adUseClientBatch = 3
} CursorLocationEnum;
typedef enum CursorOptionEnum {
    adHoldRecords = 0x100,
    adMovePrevious = 0x200,
    adBookmark = 0x2000,
    adApproxPosition = 0x4000,
    adUpdateBatch = 0x10000,
    adResync = 0x20000,
    adNotify = 0x40000,
    adFind = 0x80000,
    adSeek = 0x400000,
    adIndex = 0x800000,
    adAddNew = 0x1000400,
    adDelete = 0x1000800,
    adUpdate = 0x1008000
} CursorOptionEnum;
typedef enum MarshalOptionsEnum {
    adMarshalAll = 0,
    adMarshalModifiedOnly = 1
} MarshalOptionsEnum;
typedef enum SearchDirectionEnum {
    adSearchForward = 1,
    adSearchBackward = -1
} SearchDirectionEnum;
typedef enum StringFormatEnum {
    adClipString = 2
} StringFormatEnum;
typedef enum CompareEnum {
    adCompareLessThan = 0,
    adCompareEqual = 1,
    adCompareGreaterThan = 2,
    adCompareNotEqual = 3,
    adCompareNotComparable = 4
} CompareEnum;
typedef enum IsolationLevelEnum {
    adXactUnspecified = -1,
    adXactChaos = 16,
    adXactReadUncommitted = 256,
    adXactBrowse = 256,
    adXactCursorStability = 4096,
    adXactReadCommitted = 4096,
    adXactRepeatableRead = 65536,
    adXactSerializable = 1048576,
    adXactIsolated = 1048576
} IsolationLevelEnum;
typedef enum ConnectModeEnum {
    adModeUnknown = 0,
    adModeRead = 1,
    adModeWrite = 2,
    adModeReadWrite = 3,
    adModeShareDenyRead = 4,
    adModeShareDenyWrite = 8,
    adModeShareExclusive = 12,
    adModeShareDenyNone = 16,
    adModeRecursive = 4194304
} ConnectModeEnum;
typedef enum SchemaEnum {
    adSchemaProviderSpecific = -1,
    adSchemaAsserts = 0,
    adSchemaCatalogs = 1,
    adSchemaCharacterSets = 2,
    adSchemaCollations = 3,
    adSchemaColumns = 4,
    adSchemaCheckConstraints = 5,
    adSchemaConstraintColumnUsage = 6,
    adSchemaConstraintTableUsage = 7,
    adSchemaKeyColumnUsage = 8,
    adSchemaReferentialContraints = 9,
    adSchemaReferentialConstraints = 9,
    adSchemaTableConstraints = 10,
    adSchemaColumnsDomainUsage = 11,
    adSchemaIndexes = 12,
    adSchemaColumnPrivileges = 13,
    adSchemaTablePrivileges = 14,
    adSchemaUsagePrivileges = 15,
    adSchemaProcedures = 16,
    adSchemaSchemata = 17,
    adSchemaSQLLanguages = 18,
    adSchemaStatistics = 19,
    adSchemaTables = 20,
    adSchemaTranslations = 21,
    adSchemaProviderTypes = 22,
    adSchemaViews = 23,
    adSchemaViewColumnUsage = 24,
    adSchemaViewTableUsage = 25,
    adSchemaProcedureParameters = 26,
    adSchemaForeignKeys = 27,
    adSchemaPrimaryKeys = 28,
    adSchemaProcedureColumns = 29,
    adSchemaDBInfoKeywords = 30,
    adSchemaDBInfoLiterals = 31,
    adSchemaCubes = 32,
    adSchemaDimensions = 33,
    adSchemaHierarchies = 34,
    adSchemaLevels = 35,
    adSchemaMeasures = 36,
    adSchemaProperties = 37,
    adSchemaMembers = 38,
    adSchemaTrustees = 39,
    adSchemaFunctions = 40,
    adSchemaActions = 41,
    adSchemaCommands = 42,
    adSchemaSets = 43
} SchemaEnum;
typedef enum EventStatusEnum {
    adStatusOK = 1,
    adStatusErrorsOccurred = 2,
    adStatusCantDeny = 3,
    adStatusCancel = 4,
    adStatusUnwantedEvent = 5
} EventStatusEnum;
typedef enum ParameterDirectionEnum {
    adParamUnknown = 0,
    adParamInput = 1,
    adParamOutput = 2,
    adParamInputOutput = 3,
    adParamReturnValue = 4
} ParameterDirectionEnum;
typedef enum CommandTypeEnum {
    adCmdUnspecified = -1,
    adCmdUnknown = 8,
    adCmdText = 1,
    adCmdTable = 2,
    adCmdStoredProc = 4,
    adCmdFile = 256,
    adCmdTableDirect = 512
} CommandTypeEnum;
typedef enum ObjectStateEnum {
    adStateClosed = 0,
    adStateOpen = 1,
    adStateConnecting = 2,
    adStateExecuting = 4,
    adStateFetching = 8
} ObjectStateEnum;
typedef enum MoveRecordOptionsEnum {
    adMoveUnspecified = -1,
    adMoveOverWrite = 1,
    adMoveDontUpdateLinks = 2,
    adMoveAllowEmulation = 4
} MoveRecordOptionsEnum;
typedef enum CopyRecordOptionsEnum {
    adCopyUnspecified = -1,
    adCopyOverWrite = 1,
    adCopyAllowEmulation = 4,
    adCopyNonRecursive = 2
} CopyRecordOptionsEnum;
typedef enum RecordCreateOptionsEnum {
    adCreateCollection = (int)0x2000,
    adCreateStructDoc = (int)0x80000000,
    adCreateNonCollection = (int)0x0,
    adOpenIfExists = (int)0x2000000,
    adCreateOverwrite = (int)0x4000000,
    adFailIfNotExists = (int)-1
} RecordCreateOptionsEnum;
typedef enum RecordOpenOptionsEnum {
    adOpenRecordUnspecified = -1,
    adOpenOutput = 0x800000,
    adOpenAsync = 0x1000,
    adDelayFetchStream = 0x4000,
    adDelayFetchFields = 0x8000,
    adOpenExecuteCommand = 0x10000
} RecordOpenOptionsEnum;
typedef enum RecordTypeEnum {
    adSimpleRecord = 0,
    adCollectionRecord = 1,
    adStructDoc = 2
} RecordTypeEnum;
typedef enum StreamTypeEnum {
    adTypeBinary = 1,
    adTypeText = 2
} StreamTypeEnum;
typedef enum LineSeparatorEnum {
    adLF = 10,
    adCR = 13,
    adCRLF = -1
} LineSeparatorEnum;
typedef enum __WIDL_msado15_backcompat_generated_name_0000000E {
    adReadAll = -1,
    adReadLine = -2
} StreamReadEnum;
typedef enum SaveOptionsEnum {
    adSaveCreateNotExist = 1,
    adSaveCreateOverWrite = 2
} SaveOptionsEnum;
typedef enum StreamOpenOptionsEnum {
    adOpenStreamUnspecified = -1,
    adOpenStreamAsync = 1,
    adOpenStreamFromRecord = 4
} StreamOpenOptionsEnum;
typedef enum StreamWriteEnum {
    adWriteChar = 0,
    adWriteLine = 1
} StreamWriteEnum;
typedef enum EventReasonEnum {
    adRsnAddNew = 1,
    adRsnDelete = 2,
    adRsnUpdate = 3,
    adRsnUndoUpdate = 4,
    adRsnUndoAddNew = 5,
    adRsnUndoDelete = 6,
    adRsnRequery = 7,
    adRsnResynch = 8,
    adRsnClose = 9,
    adRsnMove = 10,
    adRsnFirstChange = 11,
    adRsnMoveFirst = 12,
    adRsnMoveNext = 13,
    adRsnMovePrevious = 14,
    adRsnMoveLast = 15
} EventReasonEnum;
typedef enum ExecuteOptionEnum {
    adOptionUnspecified = -1,
    adAsyncExecute = 16,
    adAsyncFetch = 32,
    adAsyncFetchNonBlocking = 64,
    adExecuteNoRecords = 128,
    adExecuteStream = 1024,
    adExecuteRecord = 2048
} ExecuteOptionEnum;
typedef enum ConnectOptionEnum {
    adConnectUnspecified = -1,
    adAsyncConnect = 0x10
} ConnectOptionEnum;
/*****************************************************************************
 * Property interface
 */
#ifndef __Property_INTERFACE_DEFINED__
#define __Property_INTERFACE_DEFINED__

DEFINE_GUID(IID_Property, 0x00000503, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000503-0000-0010-8000-00aa006d2ea4")
Property : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Value(
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Value(
        VARIANT val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        DataTypeEnum *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Attributes(
        LONG *attributes) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Attributes(
        LONG attributes) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Property, 0x00000503, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct PropertyVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Property *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Property *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Property *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Property *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Property *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Property *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Property *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** Property methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Value)(
        Property *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *put_Value)(
        Property *This,
        VARIANT val);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        Property *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        Property *This,
        DataTypeEnum *type);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        Property *This,
        LONG *attributes);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        Property *This,
        LONG attributes);

    END_INTERFACE
} PropertyVtbl;

interface Property {
    CONST_VTBL PropertyVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Property_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Property_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Property_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Property_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Property_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Property_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Property_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** Property methods ***/
#define Property_get_Value(This,val) (This)->lpVtbl->get_Value(This,val)
#define Property_put_Value(This,val) (This)->lpVtbl->put_Value(This,val)
#define Property_get_Name(This,str) (This)->lpVtbl->get_Name(This,str)
#define Property_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
#define Property_get_Attributes(This,attributes) (This)->lpVtbl->get_Attributes(This,attributes)
#define Property_put_Attributes(This,attributes) (This)->lpVtbl->put_Attributes(This,attributes)
#else
/*** IUnknown methods ***/
static inline HRESULT Property_QueryInterface(Property* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Property_AddRef(Property* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Property_Release(Property* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Property_GetTypeInfoCount(Property* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Property_GetTypeInfo(Property* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Property_GetIDsOfNames(Property* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Property_Invoke(Property* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** Property methods ***/
static inline HRESULT Property_get_Value(Property* This,VARIANT *val) {
    return This->lpVtbl->get_Value(This,val);
}
static inline HRESULT Property_put_Value(Property* This,VARIANT val) {
    return This->lpVtbl->put_Value(This,val);
}
static inline HRESULT Property_get_Name(Property* This,BSTR *str) {
    return This->lpVtbl->get_Name(This,str);
}
static inline HRESULT Property_get_Type(Property* This,DataTypeEnum *type) {
    return This->lpVtbl->get_Type(This,type);
}
static inline HRESULT Property_get_Attributes(Property* This,LONG *attributes) {
    return This->lpVtbl->get_Attributes(This,attributes);
}
static inline HRESULT Property_put_Attributes(Property* This,LONG attributes) {
    return This->lpVtbl->put_Attributes(This,attributes);
}
#endif
#endif

#endif


#endif  /* __Property_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Collection interface
 */
#ifndef ___Collection_INTERFACE_DEFINED__
#define ___Collection_INTERFACE_DEFINED__

DEFINE_GUID(IID__Collection, 0x00000512, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000512-0000-0010-8000-00aa006d2ea4")
_Collection : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Count(
        LONG *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE _NewEnum(
        IUnknown **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Refresh(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Collection, 0x00000512, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _CollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Collection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Collection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Collection *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Collection *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Collection *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Collection *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Collection *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        _Collection *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        _Collection *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        _Collection *This);

    END_INTERFACE
} _CollectionVtbl;

interface _Collection {
    CONST_VTBL _CollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Collection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Collection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Collection_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Collection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Collection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Collection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Collection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define _Collection_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define _Collection__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define _Collection_Refresh(This) (This)->lpVtbl->Refresh(This)
#else
/*** IUnknown methods ***/
static inline HRESULT _Collection_QueryInterface(_Collection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Collection_AddRef(_Collection* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Collection_Release(_Collection* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Collection_GetTypeInfoCount(_Collection* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Collection_GetTypeInfo(_Collection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Collection_GetIDsOfNames(_Collection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Collection_Invoke(_Collection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT _Collection_get_Count(_Collection* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT _Collection__NewEnum(_Collection* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT _Collection_Refresh(_Collection* This) {
    return This->lpVtbl->Refresh(This);
}
#endif
#endif

#endif


#endif  /* ___Collection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Properties interface
 */
#ifndef __Properties_INTERFACE_DEFINED__
#define __Properties_INTERFACE_DEFINED__

DEFINE_GUID(IID_Properties, 0x00000504, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000504-0000-0010-8000-00aa006d2ea4")
Properties : public _Collection
{
    virtual HRESULT STDMETHODCALLTYPE get_Item(
        VARIANT index,
        Property **object) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Properties, 0x00000504, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct PropertiesVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Properties *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Properties *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Properties *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Properties *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Properties *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Properties *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Properties *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Properties *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Properties *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Properties *This);

    /*** Properties methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Properties *This,
        VARIANT index,
        Property **object);

    END_INTERFACE
} PropertiesVtbl;

interface Properties {
    CONST_VTBL PropertiesVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Properties_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Properties_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Properties_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Properties_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Properties_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Properties_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Properties_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Properties_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Properties__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Properties_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** Properties methods ***/
#define Properties_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
#else
/*** IUnknown methods ***/
static inline HRESULT Properties_QueryInterface(Properties* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Properties_AddRef(Properties* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Properties_Release(Properties* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Properties_GetTypeInfoCount(Properties* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Properties_GetTypeInfo(Properties* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Properties_GetIDsOfNames(Properties* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Properties_Invoke(Properties* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Properties_get_Count(Properties* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Properties__NewEnum(Properties* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Properties_Refresh(Properties* This) {
    return This->lpVtbl->Refresh(This);
}
/*** Properties methods ***/
static inline HRESULT Properties_get_Item(Properties* This,VARIANT index,Property **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
#endif
#endif

#endif


#endif  /* __Properties_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _ADO interface
 */
#ifndef ___ADO_INTERFACE_DEFINED__
#define ___ADO_INTERFACE_DEFINED__

DEFINE_GUID(IID__ADO, 0x00000534, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000534-0000-0010-8000-00aa006d2ea4")
_ADO : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Properties(
        Properties **object) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_ADO, 0x00000534, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _ADOVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _ADO *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _ADO *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _ADO *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _ADO *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _ADO *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _ADO *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _ADO *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _ADO *This,
        Properties **object);

    END_INTERFACE
} _ADOVtbl;

interface _ADO {
    CONST_VTBL _ADOVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _ADO_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _ADO_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _ADO_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _ADO_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _ADO_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _ADO_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _ADO_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _ADO_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
#else
/*** IUnknown methods ***/
static inline HRESULT _ADO_QueryInterface(_ADO* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _ADO_AddRef(_ADO* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _ADO_Release(_ADO* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _ADO_GetTypeInfoCount(_ADO* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _ADO_GetTypeInfo(_ADO* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _ADO_GetIDsOfNames(_ADO* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _ADO_Invoke(_ADO* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _ADO_get_Properties(_ADO* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
#endif
#endif

#endif


#endif  /* ___ADO_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Field20 interface
 */
#ifndef __Field20_INTERFACE_DEFINED__
#define __Field20_INTERFACE_DEFINED__

DEFINE_GUID(IID_Field20, 0x0000054c, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000054c-0000-0010-8000-00aa006d2ea4")
Field20 : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_ActualSize(
        ADO_LONGPTR *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Attributes(
        LONG *attrs) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DefinedSize(
        ADO_LONGPTR *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        DataTypeEnum *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Value(
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Value(
        VARIANT val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Precision(
        unsigned char *precision) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumericScale(
        unsigned char *scale) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendChunk(
        VARIANT data) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetChunk(
        LONG length,
        VARIANT *var) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_OriginalValue(
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_UnderlyingValue(
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DataFormat(
        IUnknown **format) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_DataFormat(
        IUnknown *format) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Precision(
        unsigned char precision) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_NumericScale(
        unsigned char scale) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Type(
        DataTypeEnum type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_DefinedSize(
        ADO_LONGPTR size) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Attributes(
        LONG attrs) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Field20, 0x0000054c, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Field20Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Field20 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Field20 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Field20 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Field20 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Field20 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Field20 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Field20 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Field20 *This,
        Properties **object);

    /*** Field20 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActualSize)(
        Field20 *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        Field20 *This,
        LONG *attrs);

    HRESULT (STDMETHODCALLTYPE *get_DefinedSize)(
        Field20 *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        Field20 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        Field20 *This,
        DataTypeEnum *type);

    HRESULT (STDMETHODCALLTYPE *get_Value)(
        Field20 *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *put_Value)(
        Field20 *This,
        VARIANT val);

    HRESULT (STDMETHODCALLTYPE *get_Precision)(
        Field20 *This,
        unsigned char *precision);

    HRESULT (STDMETHODCALLTYPE *get_NumericScale)(
        Field20 *This,
        unsigned char *scale);

    HRESULT (STDMETHODCALLTYPE *AppendChunk)(
        Field20 *This,
        VARIANT data);

    HRESULT (STDMETHODCALLTYPE *GetChunk)(
        Field20 *This,
        LONG length,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *get_OriginalValue)(
        Field20 *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *get_UnderlyingValue)(
        Field20 *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *get_DataFormat)(
        Field20 *This,
        IUnknown **format);

    HRESULT (STDMETHODCALLTYPE *putref_DataFormat)(
        Field20 *This,
        IUnknown *format);

    HRESULT (STDMETHODCALLTYPE *put_Precision)(
        Field20 *This,
        unsigned char precision);

    HRESULT (STDMETHODCALLTYPE *put_NumericScale)(
        Field20 *This,
        unsigned char scale);

    HRESULT (STDMETHODCALLTYPE *put_Type)(
        Field20 *This,
        DataTypeEnum type);

    HRESULT (STDMETHODCALLTYPE *put_DefinedSize)(
        Field20 *This,
        ADO_LONGPTR size);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        Field20 *This,
        LONG attrs);

    END_INTERFACE
} Field20Vtbl;

interface Field20 {
    CONST_VTBL Field20Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Field20_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Field20_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Field20_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Field20_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Field20_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Field20_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Field20_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Field20_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Field20 methods ***/
#define Field20_get_ActualSize(This,size) (This)->lpVtbl->get_ActualSize(This,size)
#define Field20_get_Attributes(This,attrs) (This)->lpVtbl->get_Attributes(This,attrs)
#define Field20_get_DefinedSize(This,size) (This)->lpVtbl->get_DefinedSize(This,size)
#define Field20_get_Name(This,str) (This)->lpVtbl->get_Name(This,str)
#define Field20_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
#define Field20_get_Value(This,val) (This)->lpVtbl->get_Value(This,val)
#define Field20_put_Value(This,val) (This)->lpVtbl->put_Value(This,val)
#define Field20_get_Precision(This,precision) (This)->lpVtbl->get_Precision(This,precision)
#define Field20_get_NumericScale(This,scale) (This)->lpVtbl->get_NumericScale(This,scale)
#define Field20_AppendChunk(This,data) (This)->lpVtbl->AppendChunk(This,data)
#define Field20_GetChunk(This,length,var) (This)->lpVtbl->GetChunk(This,length,var)
#define Field20_get_OriginalValue(This,val) (This)->lpVtbl->get_OriginalValue(This,val)
#define Field20_get_UnderlyingValue(This,val) (This)->lpVtbl->get_UnderlyingValue(This,val)
#define Field20_get_DataFormat(This,format) (This)->lpVtbl->get_DataFormat(This,format)
#define Field20_putref_DataFormat(This,format) (This)->lpVtbl->putref_DataFormat(This,format)
#define Field20_put_Precision(This,precision) (This)->lpVtbl->put_Precision(This,precision)
#define Field20_put_NumericScale(This,scale) (This)->lpVtbl->put_NumericScale(This,scale)
#define Field20_put_Type(This,type) (This)->lpVtbl->put_Type(This,type)
#define Field20_put_DefinedSize(This,size) (This)->lpVtbl->put_DefinedSize(This,size)
#define Field20_put_Attributes(This,attrs) (This)->lpVtbl->put_Attributes(This,attrs)
#else
/*** IUnknown methods ***/
static inline HRESULT Field20_QueryInterface(Field20* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Field20_AddRef(Field20* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Field20_Release(Field20* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Field20_GetTypeInfoCount(Field20* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Field20_GetTypeInfo(Field20* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Field20_GetIDsOfNames(Field20* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Field20_Invoke(Field20* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Field20_get_Properties(Field20* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Field20 methods ***/
static inline HRESULT Field20_get_ActualSize(Field20* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_ActualSize(This,size);
}
static inline HRESULT Field20_get_Attributes(Field20* This,LONG *attrs) {
    return This->lpVtbl->get_Attributes(This,attrs);
}
static inline HRESULT Field20_get_DefinedSize(Field20* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_DefinedSize(This,size);
}
static inline HRESULT Field20_get_Name(Field20* This,BSTR *str) {
    return This->lpVtbl->get_Name(This,str);
}
static inline HRESULT Field20_get_Type(Field20* This,DataTypeEnum *type) {
    return This->lpVtbl->get_Type(This,type);
}
static inline HRESULT Field20_get_Value(Field20* This,VARIANT *val) {
    return This->lpVtbl->get_Value(This,val);
}
static inline HRESULT Field20_put_Value(Field20* This,VARIANT val) {
    return This->lpVtbl->put_Value(This,val);
}
static inline HRESULT Field20_get_Precision(Field20* This,unsigned char *precision) {
    return This->lpVtbl->get_Precision(This,precision);
}
static inline HRESULT Field20_get_NumericScale(Field20* This,unsigned char *scale) {
    return This->lpVtbl->get_NumericScale(This,scale);
}
static inline HRESULT Field20_AppendChunk(Field20* This,VARIANT data) {
    return This->lpVtbl->AppendChunk(This,data);
}
static inline HRESULT Field20_GetChunk(Field20* This,LONG length,VARIANT *var) {
    return This->lpVtbl->GetChunk(This,length,var);
}
static inline HRESULT Field20_get_OriginalValue(Field20* This,VARIANT *val) {
    return This->lpVtbl->get_OriginalValue(This,val);
}
static inline HRESULT Field20_get_UnderlyingValue(Field20* This,VARIANT *val) {
    return This->lpVtbl->get_UnderlyingValue(This,val);
}
static inline HRESULT Field20_get_DataFormat(Field20* This,IUnknown **format) {
    return This->lpVtbl->get_DataFormat(This,format);
}
static inline HRESULT Field20_putref_DataFormat(Field20* This,IUnknown *format) {
    return This->lpVtbl->putref_DataFormat(This,format);
}
static inline HRESULT Field20_put_Precision(Field20* This,unsigned char precision) {
    return This->lpVtbl->put_Precision(This,precision);
}
static inline HRESULT Field20_put_NumericScale(Field20* This,unsigned char scale) {
    return This->lpVtbl->put_NumericScale(This,scale);
}
static inline HRESULT Field20_put_Type(Field20* This,DataTypeEnum type) {
    return This->lpVtbl->put_Type(This,type);
}
static inline HRESULT Field20_put_DefinedSize(Field20* This,ADO_LONGPTR size) {
    return This->lpVtbl->put_DefinedSize(This,size);
}
static inline HRESULT Field20_put_Attributes(Field20* This,LONG attrs) {
    return This->lpVtbl->put_Attributes(This,attrs);
}
#endif
#endif

#endif


#endif  /* __Field20_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Field interface
 */
#ifndef __Field_INTERFACE_DEFINED__
#define __Field_INTERFACE_DEFINED__

DEFINE_GUID(IID_Field, 0x00000569, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000569-0000-0010-8000-00aa006d2ea4")
Field : public Field20
{
    virtual HRESULT STDMETHODCALLTYPE get_Status(
        LONG *status) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Field, 0x00000569, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct FieldVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Field *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Field *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Field *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Field *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Field *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Field *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Field *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Field *This,
        Properties **object);

    /*** Field20 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActualSize)(
        Field *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        Field *This,
        LONG *attrs);

    HRESULT (STDMETHODCALLTYPE *get_DefinedSize)(
        Field *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        Field *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        Field *This,
        DataTypeEnum *type);

    HRESULT (STDMETHODCALLTYPE *get_Value)(
        Field *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *put_Value)(
        Field *This,
        VARIANT val);

    HRESULT (STDMETHODCALLTYPE *get_Precision)(
        Field *This,
        unsigned char *precision);

    HRESULT (STDMETHODCALLTYPE *get_NumericScale)(
        Field *This,
        unsigned char *scale);

    HRESULT (STDMETHODCALLTYPE *AppendChunk)(
        Field *This,
        VARIANT data);

    HRESULT (STDMETHODCALLTYPE *GetChunk)(
        Field *This,
        LONG length,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *get_OriginalValue)(
        Field *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *get_UnderlyingValue)(
        Field *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *get_DataFormat)(
        Field *This,
        IUnknown **format);

    HRESULT (STDMETHODCALLTYPE *putref_DataFormat)(
        Field *This,
        IUnknown *format);

    HRESULT (STDMETHODCALLTYPE *put_Precision)(
        Field *This,
        unsigned char precision);

    HRESULT (STDMETHODCALLTYPE *put_NumericScale)(
        Field *This,
        unsigned char scale);

    HRESULT (STDMETHODCALLTYPE *put_Type)(
        Field *This,
        DataTypeEnum type);

    HRESULT (STDMETHODCALLTYPE *put_DefinedSize)(
        Field *This,
        ADO_LONGPTR size);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        Field *This,
        LONG attrs);

    /*** Field methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Status)(
        Field *This,
        LONG *status);

    END_INTERFACE
} FieldVtbl;

interface Field {
    CONST_VTBL FieldVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Field_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Field_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Field_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Field_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Field_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Field_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Field_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Field_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Field20 methods ***/
#define Field_get_ActualSize(This,size) (This)->lpVtbl->get_ActualSize(This,size)
#define Field_get_Attributes(This,attrs) (This)->lpVtbl->get_Attributes(This,attrs)
#define Field_get_DefinedSize(This,size) (This)->lpVtbl->get_DefinedSize(This,size)
#define Field_get_Name(This,str) (This)->lpVtbl->get_Name(This,str)
#define Field_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
#define Field_get_Value(This,val) (This)->lpVtbl->get_Value(This,val)
#define Field_put_Value(This,val) (This)->lpVtbl->put_Value(This,val)
#define Field_get_Precision(This,precision) (This)->lpVtbl->get_Precision(This,precision)
#define Field_get_NumericScale(This,scale) (This)->lpVtbl->get_NumericScale(This,scale)
#define Field_AppendChunk(This,data) (This)->lpVtbl->AppendChunk(This,data)
#define Field_GetChunk(This,length,var) (This)->lpVtbl->GetChunk(This,length,var)
#define Field_get_OriginalValue(This,val) (This)->lpVtbl->get_OriginalValue(This,val)
#define Field_get_UnderlyingValue(This,val) (This)->lpVtbl->get_UnderlyingValue(This,val)
#define Field_get_DataFormat(This,format) (This)->lpVtbl->get_DataFormat(This,format)
#define Field_putref_DataFormat(This,format) (This)->lpVtbl->putref_DataFormat(This,format)
#define Field_put_Precision(This,precision) (This)->lpVtbl->put_Precision(This,precision)
#define Field_put_NumericScale(This,scale) (This)->lpVtbl->put_NumericScale(This,scale)
#define Field_put_Type(This,type) (This)->lpVtbl->put_Type(This,type)
#define Field_put_DefinedSize(This,size) (This)->lpVtbl->put_DefinedSize(This,size)
#define Field_put_Attributes(This,attrs) (This)->lpVtbl->put_Attributes(This,attrs)
/*** Field methods ***/
#define Field_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#else
/*** IUnknown methods ***/
static inline HRESULT Field_QueryInterface(Field* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Field_AddRef(Field* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Field_Release(Field* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Field_GetTypeInfoCount(Field* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Field_GetTypeInfo(Field* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Field_GetIDsOfNames(Field* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Field_Invoke(Field* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Field_get_Properties(Field* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Field20 methods ***/
static inline HRESULT Field_get_ActualSize(Field* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_ActualSize(This,size);
}
static inline HRESULT Field_get_Attributes(Field* This,LONG *attrs) {
    return This->lpVtbl->get_Attributes(This,attrs);
}
static inline HRESULT Field_get_DefinedSize(Field* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_DefinedSize(This,size);
}
static inline HRESULT Field_get_Name(Field* This,BSTR *str) {
    return This->lpVtbl->get_Name(This,str);
}
static inline HRESULT Field_get_Type(Field* This,DataTypeEnum *type) {
    return This->lpVtbl->get_Type(This,type);
}
static inline HRESULT Field_get_Value(Field* This,VARIANT *val) {
    return This->lpVtbl->get_Value(This,val);
}
static inline HRESULT Field_put_Value(Field* This,VARIANT val) {
    return This->lpVtbl->put_Value(This,val);
}
static inline HRESULT Field_get_Precision(Field* This,unsigned char *precision) {
    return This->lpVtbl->get_Precision(This,precision);
}
static inline HRESULT Field_get_NumericScale(Field* This,unsigned char *scale) {
    return This->lpVtbl->get_NumericScale(This,scale);
}
static inline HRESULT Field_AppendChunk(Field* This,VARIANT data) {
    return This->lpVtbl->AppendChunk(This,data);
}
static inline HRESULT Field_GetChunk(Field* This,LONG length,VARIANT *var) {
    return This->lpVtbl->GetChunk(This,length,var);
}
static inline HRESULT Field_get_OriginalValue(Field* This,VARIANT *val) {
    return This->lpVtbl->get_OriginalValue(This,val);
}
static inline HRESULT Field_get_UnderlyingValue(Field* This,VARIANT *val) {
    return This->lpVtbl->get_UnderlyingValue(This,val);
}
static inline HRESULT Field_get_DataFormat(Field* This,IUnknown **format) {
    return This->lpVtbl->get_DataFormat(This,format);
}
static inline HRESULT Field_putref_DataFormat(Field* This,IUnknown *format) {
    return This->lpVtbl->putref_DataFormat(This,format);
}
static inline HRESULT Field_put_Precision(Field* This,unsigned char precision) {
    return This->lpVtbl->put_Precision(This,precision);
}
static inline HRESULT Field_put_NumericScale(Field* This,unsigned char scale) {
    return This->lpVtbl->put_NumericScale(This,scale);
}
static inline HRESULT Field_put_Type(Field* This,DataTypeEnum type) {
    return This->lpVtbl->put_Type(This,type);
}
static inline HRESULT Field_put_DefinedSize(Field* This,ADO_LONGPTR size) {
    return This->lpVtbl->put_DefinedSize(This,size);
}
static inline HRESULT Field_put_Attributes(Field* This,LONG attrs) {
    return This->lpVtbl->put_Attributes(This,attrs);
}
/*** Field methods ***/
static inline HRESULT Field_get_Status(Field* This,LONG *status) {
    return This->lpVtbl->get_Status(This,status);
}
#endif
#endif

#endif


#endif  /* __Field_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Fields15 interface
 */
#ifndef __Fields15_INTERFACE_DEFINED__
#define __Fields15_INTERFACE_DEFINED__

DEFINE_GUID(IID_Fields15, 0x00000506, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000506-0000-0010-8000-00aa006d2ea4")
Fields15 : public _Collection
{
    virtual HRESULT STDMETHODCALLTYPE get_Item(
        VARIANT index,
        Field **object) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Fields15, 0x00000506, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Fields15Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Fields15 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Fields15 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Fields15 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Fields15 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Fields15 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Fields15 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Fields15 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Fields15 *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Fields15 *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Fields15 *This);

    /*** Fields15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Fields15 *This,
        VARIANT index,
        Field **object);

    END_INTERFACE
} Fields15Vtbl;

interface Fields15 {
    CONST_VTBL Fields15Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Fields15_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Fields15_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Fields15_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Fields15_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Fields15_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Fields15_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Fields15_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Fields15_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Fields15__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Fields15_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** Fields15 methods ***/
#define Fields15_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
#else
/*** IUnknown methods ***/
static inline HRESULT Fields15_QueryInterface(Fields15* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Fields15_AddRef(Fields15* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Fields15_Release(Fields15* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Fields15_GetTypeInfoCount(Fields15* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Fields15_GetTypeInfo(Fields15* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Fields15_GetIDsOfNames(Fields15* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Fields15_Invoke(Fields15* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Fields15_get_Count(Fields15* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Fields15__NewEnum(Fields15* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Fields15_Refresh(Fields15* This) {
    return This->lpVtbl->Refresh(This);
}
/*** Fields15 methods ***/
static inline HRESULT Fields15_get_Item(Fields15* This,VARIANT index,Field **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
#endif
#endif

#endif


#endif  /* __Fields15_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Fields20 interface
 */
#ifndef __Fields20_INTERFACE_DEFINED__
#define __Fields20_INTERFACE_DEFINED__

DEFINE_GUID(IID_Fields20, 0x0000054d, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000054d-0000-0010-8000-00aa006d2ea4")
Fields20 : public Fields15
{
    virtual HRESULT STDMETHODCALLTYPE _Append(
        BSTR name,
        DataTypeEnum type,
        ADO_LONGPTR size = 0,
        FieldAttributeEnum attr = adFldUnspecified) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        VARIANT index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Fields20, 0x0000054d, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Fields20Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Fields20 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Fields20 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Fields20 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Fields20 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Fields20 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Fields20 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Fields20 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Fields20 *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Fields20 *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Fields20 *This);

    /*** Fields15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Fields20 *This,
        VARIANT index,
        Field **object);

    /*** Fields20 methods ***/
    HRESULT (STDMETHODCALLTYPE *_Append)(
        Fields20 *This,
        BSTR name,
        DataTypeEnum type,
        ADO_LONGPTR size,
        FieldAttributeEnum attr);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Fields20 *This,
        VARIANT index);

    END_INTERFACE
} Fields20Vtbl;

interface Fields20 {
    CONST_VTBL Fields20Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Fields20_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Fields20_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Fields20_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Fields20_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Fields20_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Fields20_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Fields20_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Fields20_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Fields20__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Fields20_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** Fields15 methods ***/
#define Fields20_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
/*** Fields20 methods ***/
#define Fields20__Append(This,name,type,size,attr) (This)->lpVtbl->_Append(This,name,type,size,attr)
#define Fields20_Delete(This,index) (This)->lpVtbl->Delete(This,index)
#else
/*** IUnknown methods ***/
static inline HRESULT Fields20_QueryInterface(Fields20* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Fields20_AddRef(Fields20* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Fields20_Release(Fields20* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Fields20_GetTypeInfoCount(Fields20* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Fields20_GetTypeInfo(Fields20* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Fields20_GetIDsOfNames(Fields20* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Fields20_Invoke(Fields20* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Fields20_get_Count(Fields20* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Fields20__NewEnum(Fields20* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Fields20_Refresh(Fields20* This) {
    return This->lpVtbl->Refresh(This);
}
/*** Fields15 methods ***/
static inline HRESULT Fields20_get_Item(Fields20* This,VARIANT index,Field **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
/*** Fields20 methods ***/
static inline HRESULT Fields20__Append(Fields20* This,BSTR name,DataTypeEnum type,ADO_LONGPTR size,FieldAttributeEnum attr) {
    return This->lpVtbl->_Append(This,name,type,size,attr);
}
static inline HRESULT Fields20_Delete(Fields20* This,VARIANT index) {
    return This->lpVtbl->Delete(This,index);
}
#endif
#endif

#endif


#endif  /* __Fields20_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Fields interface
 */
#ifndef __Fields_INTERFACE_DEFINED__
#define __Fields_INTERFACE_DEFINED__

DEFINE_GUID(IID_Fields, 0x00000564, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000564-0000-0010-8000-00aa006d2ea4")
Fields : public Fields20
{
    virtual HRESULT STDMETHODCALLTYPE Append(
        BSTR name,
        DataTypeEnum type,
        ADO_LONGPTR size,
        FieldAttributeEnum attr,
        VARIANT value) = 0;

    virtual HRESULT STDMETHODCALLTYPE Update(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resync(
        ResyncEnum resync_values = adResyncAllValues) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelUpdate(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Fields, 0x00000564, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct FieldsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Fields *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Fields *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Fields *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Fields *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Fields *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Fields *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Fields *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Fields *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Fields *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Fields *This);

    /*** Fields15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Fields *This,
        VARIANT index,
        Field **object);

    /*** Fields20 methods ***/
    HRESULT (STDMETHODCALLTYPE *_Append)(
        Fields *This,
        BSTR name,
        DataTypeEnum type,
        ADO_LONGPTR size,
        FieldAttributeEnum attr);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Fields *This,
        VARIANT index);

    /*** Fields methods ***/
    HRESULT (STDMETHODCALLTYPE *Append)(
        Fields *This,
        BSTR name,
        DataTypeEnum type,
        ADO_LONGPTR size,
        FieldAttributeEnum attr,
        VARIANT value);

    HRESULT (STDMETHODCALLTYPE *Update)(
        Fields *This);

    HRESULT (STDMETHODCALLTYPE *Resync)(
        Fields *This,
        ResyncEnum resync_values);

    HRESULT (STDMETHODCALLTYPE *CancelUpdate)(
        Fields *This);

    END_INTERFACE
} FieldsVtbl;

interface Fields {
    CONST_VTBL FieldsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Fields_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Fields_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Fields_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Fields_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Fields_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Fields_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Fields_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Fields_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Fields__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Fields_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** Fields15 methods ***/
#define Fields_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
/*** Fields20 methods ***/
#define Fields__Append(This,name,type,size,attr) (This)->lpVtbl->_Append(This,name,type,size,attr)
#define Fields_Delete(This,index) (This)->lpVtbl->Delete(This,index)
/*** Fields methods ***/
#define Fields_Append(This,name,type,size,attr,value) (This)->lpVtbl->Append(This,name,type,size,attr,value)
#define Fields_Update(This) (This)->lpVtbl->Update(This)
#define Fields_Resync(This,resync_values) (This)->lpVtbl->Resync(This,resync_values)
#define Fields_CancelUpdate(This) (This)->lpVtbl->CancelUpdate(This)
#else
/*** IUnknown methods ***/
static inline HRESULT Fields_QueryInterface(Fields* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Fields_AddRef(Fields* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Fields_Release(Fields* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Fields_GetTypeInfoCount(Fields* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Fields_GetTypeInfo(Fields* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Fields_GetIDsOfNames(Fields* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Fields_Invoke(Fields* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Fields_get_Count(Fields* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Fields__NewEnum(Fields* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Fields_Refresh(Fields* This) {
    return This->lpVtbl->Refresh(This);
}
/*** Fields15 methods ***/
static inline HRESULT Fields_get_Item(Fields* This,VARIANT index,Field **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
/*** Fields20 methods ***/
static inline HRESULT Fields__Append(Fields* This,BSTR name,DataTypeEnum type,ADO_LONGPTR size,FieldAttributeEnum attr) {
    return This->lpVtbl->_Append(This,name,type,size,attr);
}
static inline HRESULT Fields_Delete(Fields* This,VARIANT index) {
    return This->lpVtbl->Delete(This,index);
}
/*** Fields methods ***/
static inline HRESULT Fields_Append(Fields* This,BSTR name,DataTypeEnum type,ADO_LONGPTR size,FieldAttributeEnum attr,VARIANT value) {
    return This->lpVtbl->Append(This,name,type,size,attr,value);
}
static inline HRESULT Fields_Update(Fields* This) {
    return This->lpVtbl->Update(This);
}
static inline HRESULT Fields_Resync(Fields* This,ResyncEnum resync_values) {
    return This->lpVtbl->Resync(This,resync_values);
}
static inline HRESULT Fields_CancelUpdate(Fields* This) {
    return This->lpVtbl->CancelUpdate(This);
}
#endif
#endif

#endif


#endif  /* __Fields_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Recordset15 interface
 */
#ifndef __Recordset15_INTERFACE_DEFINED__
#define __Recordset15_INTERFACE_DEFINED__

DEFINE_GUID(IID_Recordset15, 0x0000050e, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000050e-0000-0010-8000-00aa006d2ea4")
Recordset15 : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_AbsolutePosition(
        PositionEnum_Param *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AbsolutePosition(
        PositionEnum_Param position) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_ActiveConnection(
        IDispatch *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ActiveConnection(
        VARIANT connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveConnection(
        VARIANT *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_BOF(
        VARIANT_BOOL *bof) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Bookmark(
        VARIANT *bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Bookmark(
        VARIANT bookmark) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CacheSize(
        LONG *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CacheSize(
        LONG size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CursorType(
        CursorTypeEnum *cursor_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CursorType(
        CursorTypeEnum cursor_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EOF(
        VARIANT_BOOL *eof) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Fields(
        Fields **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LockType(
        LockTypeEnum *lock_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_LockType(
        LockTypeEnum lock_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_MaxRecords(
        ADO_LONGPTR *max_records) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_MaxRecords(
        ADO_LONGPTR max_records) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RecordCount(
        ADO_LONGPTR *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Source(
        IDispatch *source) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Source(
        BSTR source) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Source(
        VARIANT *source) = 0;

    virtual HRESULT STDMETHODCALLTYPE AddNew(
        VARIANT field_list,
        VARIANT values) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelUpdate(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        AffectEnum affect_records = adAffectCurrent) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetRows(
        LONG rows,
        VARIANT start,
        VARIANT fields,
        VARIANT *var) = 0;

    virtual HRESULT STDMETHODCALLTYPE Move(
        ADO_LONGPTR num_records,
        VARIANT start) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveNext(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MovePrevious(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveFirst(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveLast(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Open(
        VARIANT source,
        VARIANT active_connection,
        CursorTypeEnum cursor_type = adOpenUnspecified,
        LockTypeEnum lock_type = adLockUnspecified,
        LONG options = -1) = 0;

    virtual HRESULT STDMETHODCALLTYPE Requery(
        LONG options = -1) = 0;

    virtual HRESULT STDMETHODCALLTYPE _xResync(
        AffectEnum affect_records = adAffectAll) = 0;

    virtual HRESULT STDMETHODCALLTYPE Update(
        VARIANT fields,
        VARIANT values) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_AbsolutePage(
        PositionEnum_Param *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_AbsolutePage(
        PositionEnum_Param position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EditMode(
        EditModeEnum *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Filter(
        VARIANT *criteria) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Filter(
        VARIANT criteria) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PageCount(
        ADO_LONGPTR *count) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_PageSize(
        LONG *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_PageSize(
        LONG size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Sort(
        BSTR *criteria) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Sort(
        BSTR criteria) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Status(
        LONG *status) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        LONG *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE _xClone(
        _Recordset **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE UpdateBatch(
        AffectEnum affect_records = adAffectAll) = 0;

    virtual HRESULT STDMETHODCALLTYPE CancelBatch(
        AffectEnum affect_records = adAffectAll) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CursorLocation(
        CursorLocationEnum *cursor_loc) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CursorLocation(
        CursorLocationEnum cursor_loc) = 0;

    virtual HRESULT STDMETHODCALLTYPE NextRecordset(
        VARIANT *records_affected,
        _Recordset **record_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE Supports(
        CursorOptionEnum cursor_options,
        VARIANT_BOOL *ret) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Collect(
        VARIANT index,
        VARIANT *var) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Collect(
        VARIANT index,
        VARIANT var) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_MarshalOptions(
        MarshalOptionsEnum *options) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_MarshalOptions(
        MarshalOptionsEnum options) = 0;

    virtual HRESULT STDMETHODCALLTYPE Find(
        BSTR criteria,
        LONG skip_records,
        SearchDirectionEnum search_direction,
        VARIANT start) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Recordset15, 0x0000050e, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Recordset15Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Recordset15 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Recordset15 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Recordset15 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Recordset15 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Recordset15 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Recordset15 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Recordset15 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Recordset15 *This,
        Properties **object);

    /*** Recordset15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AbsolutePosition)(
        Recordset15 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePosition)(
        Recordset15 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        Recordset15 *This,
        IDispatch *connection);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        Recordset15 *This,
        VARIANT connection);

    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        Recordset15 *This,
        VARIANT *connection);

    HRESULT (STDMETHODCALLTYPE *get_BOF)(
        Recordset15 *This,
        VARIANT_BOOL *bof);

    HRESULT (STDMETHODCALLTYPE *get_Bookmark)(
        Recordset15 *This,
        VARIANT *bookmark);

    HRESULT (STDMETHODCALLTYPE *put_Bookmark)(
        Recordset15 *This,
        VARIANT bookmark);

    HRESULT (STDMETHODCALLTYPE *get_CacheSize)(
        Recordset15 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_CacheSize)(
        Recordset15 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_CursorType)(
        Recordset15 *This,
        CursorTypeEnum *cursor_type);

    HRESULT (STDMETHODCALLTYPE *put_CursorType)(
        Recordset15 *This,
        CursorTypeEnum cursor_type);

    HRESULT (STDMETHODCALLTYPE *get_EOF)(
        Recordset15 *This,
        VARIANT_BOOL *eof);

    HRESULT (STDMETHODCALLTYPE *get_Fields)(
        Recordset15 *This,
        Fields **object);

    HRESULT (STDMETHODCALLTYPE *get_LockType)(
        Recordset15 *This,
        LockTypeEnum *lock_type);

    HRESULT (STDMETHODCALLTYPE *put_LockType)(
        Recordset15 *This,
        LockTypeEnum lock_type);

    HRESULT (STDMETHODCALLTYPE *get_MaxRecords)(
        Recordset15 *This,
        ADO_LONGPTR *max_records);

    HRESULT (STDMETHODCALLTYPE *put_MaxRecords)(
        Recordset15 *This,
        ADO_LONGPTR max_records);

    HRESULT (STDMETHODCALLTYPE *get_RecordCount)(
        Recordset15 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *putref_Source)(
        Recordset15 *This,
        IDispatch *source);

    HRESULT (STDMETHODCALLTYPE *put_Source)(
        Recordset15 *This,
        BSTR source);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        Recordset15 *This,
        VARIANT *source);

    HRESULT (STDMETHODCALLTYPE *AddNew)(
        Recordset15 *This,
        VARIANT field_list,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *CancelUpdate)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Recordset15 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *GetRows)(
        Recordset15 *This,
        LONG rows,
        VARIANT start,
        VARIANT fields,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *Move)(
        Recordset15 *This,
        ADO_LONGPTR num_records,
        VARIANT start);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *MoveFirst)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *MoveLast)(
        Recordset15 *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        Recordset15 *This,
        VARIANT source,
        VARIANT active_connection,
        CursorTypeEnum cursor_type,
        LockTypeEnum lock_type,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *Requery)(
        Recordset15 *This,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *_xResync)(
        Recordset15 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *Update)(
        Recordset15 *This,
        VARIANT fields,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *get_AbsolutePage)(
        Recordset15 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePage)(
        Recordset15 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *get_EditMode)(
        Recordset15 *This,
        EditModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *get_Filter)(
        Recordset15 *This,
        VARIANT *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Filter)(
        Recordset15 *This,
        VARIANT criteria);

    HRESULT (STDMETHODCALLTYPE *get_PageCount)(
        Recordset15 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *get_PageSize)(
        Recordset15 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_PageSize)(
        Recordset15 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_Sort)(
        Recordset15 *This,
        BSTR *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Sort)(
        Recordset15 *This,
        BSTR criteria);

    HRESULT (STDMETHODCALLTYPE *get_Status)(
        Recordset15 *This,
        LONG *status);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        Recordset15 *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *_xClone)(
        Recordset15 *This,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *UpdateBatch)(
        Recordset15 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *CancelBatch)(
        Recordset15 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        Recordset15 *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        Recordset15 *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *NextRecordset)(
        Recordset15 *This,
        VARIANT *records_affected,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *Supports)(
        Recordset15 *This,
        CursorOptionEnum cursor_options,
        VARIANT_BOOL *ret);

    HRESULT (STDMETHODCALLTYPE *get_Collect)(
        Recordset15 *This,
        VARIANT index,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *put_Collect)(
        Recordset15 *This,
        VARIANT index,
        VARIANT var);

    HRESULT (STDMETHODCALLTYPE *get_MarshalOptions)(
        Recordset15 *This,
        MarshalOptionsEnum *options);

    HRESULT (STDMETHODCALLTYPE *put_MarshalOptions)(
        Recordset15 *This,
        MarshalOptionsEnum options);

    HRESULT (STDMETHODCALLTYPE *Find)(
        Recordset15 *This,
        BSTR criteria,
        LONG skip_records,
        SearchDirectionEnum search_direction,
        VARIANT start);

    END_INTERFACE
} Recordset15Vtbl;

interface Recordset15 {
    CONST_VTBL Recordset15Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Recordset15_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Recordset15_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Recordset15_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Recordset15_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Recordset15_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Recordset15_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Recordset15_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Recordset15_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Recordset15 methods ***/
#define Recordset15_get_AbsolutePosition(This,position) (This)->lpVtbl->get_AbsolutePosition(This,position)
#define Recordset15_put_AbsolutePosition(This,position) (This)->lpVtbl->put_AbsolutePosition(This,position)
#define Recordset15_putref_ActiveConnection(This,connection) (This)->lpVtbl->putref_ActiveConnection(This,connection)
#define Recordset15_put_ActiveConnection(This,connection) (This)->lpVtbl->put_ActiveConnection(This,connection)
#define Recordset15_get_ActiveConnection(This,connection) (This)->lpVtbl->get_ActiveConnection(This,connection)
#define Recordset15_get_BOF(This,bof) (This)->lpVtbl->get_BOF(This,bof)
#define Recordset15_get_Bookmark(This,bookmark) (This)->lpVtbl->get_Bookmark(This,bookmark)
#define Recordset15_put_Bookmark(This,bookmark) (This)->lpVtbl->put_Bookmark(This,bookmark)
#define Recordset15_get_CacheSize(This,size) (This)->lpVtbl->get_CacheSize(This,size)
#define Recordset15_put_CacheSize(This,size) (This)->lpVtbl->put_CacheSize(This,size)
#define Recordset15_get_CursorType(This,cursor_type) (This)->lpVtbl->get_CursorType(This,cursor_type)
#define Recordset15_put_CursorType(This,cursor_type) (This)->lpVtbl->put_CursorType(This,cursor_type)
#define Recordset15_get_EOF(This,eof) (This)->lpVtbl->get_EOF(This,eof)
#define Recordset15_get_Fields(This,object) (This)->lpVtbl->get_Fields(This,object)
#define Recordset15_get_LockType(This,lock_type) (This)->lpVtbl->get_LockType(This,lock_type)
#define Recordset15_put_LockType(This,lock_type) (This)->lpVtbl->put_LockType(This,lock_type)
#define Recordset15_get_MaxRecords(This,max_records) (This)->lpVtbl->get_MaxRecords(This,max_records)
#define Recordset15_put_MaxRecords(This,max_records) (This)->lpVtbl->put_MaxRecords(This,max_records)
#define Recordset15_get_RecordCount(This,count) (This)->lpVtbl->get_RecordCount(This,count)
#define Recordset15_putref_Source(This,source) (This)->lpVtbl->putref_Source(This,source)
#define Recordset15_put_Source(This,source) (This)->lpVtbl->put_Source(This,source)
#define Recordset15_get_Source(This,source) (This)->lpVtbl->get_Source(This,source)
#define Recordset15_AddNew(This,field_list,values) (This)->lpVtbl->AddNew(This,field_list,values)
#define Recordset15_CancelUpdate(This) (This)->lpVtbl->CancelUpdate(This)
#define Recordset15_Close(This) (This)->lpVtbl->Close(This)
#define Recordset15_Delete(This,affect_records) (This)->lpVtbl->Delete(This,affect_records)
#define Recordset15_GetRows(This,rows,start,fields,var) (This)->lpVtbl->GetRows(This,rows,start,fields,var)
#define Recordset15_Move(This,num_records,start) (This)->lpVtbl->Move(This,num_records,start)
#define Recordset15_MoveNext(This) (This)->lpVtbl->MoveNext(This)
#define Recordset15_MovePrevious(This) (This)->lpVtbl->MovePrevious(This)
#define Recordset15_MoveFirst(This) (This)->lpVtbl->MoveFirst(This)
#define Recordset15_MoveLast(This) (This)->lpVtbl->MoveLast(This)
#define Recordset15_Open(This,source,active_connection,cursor_type,lock_type,options) (This)->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options)
#define Recordset15_Requery(This,options) (This)->lpVtbl->Requery(This,options)
#define Recordset15__xResync(This,affect_records) (This)->lpVtbl->_xResync(This,affect_records)
#define Recordset15_Update(This,fields,values) (This)->lpVtbl->Update(This,fields,values)
#define Recordset15_get_AbsolutePage(This,position) (This)->lpVtbl->get_AbsolutePage(This,position)
#define Recordset15_put_AbsolutePage(This,position) (This)->lpVtbl->put_AbsolutePage(This,position)
#define Recordset15_get_EditMode(This,mode) (This)->lpVtbl->get_EditMode(This,mode)
#define Recordset15_get_Filter(This,criteria) (This)->lpVtbl->get_Filter(This,criteria)
#define Recordset15_put_Filter(This,criteria) (This)->lpVtbl->put_Filter(This,criteria)
#define Recordset15_get_PageCount(This,count) (This)->lpVtbl->get_PageCount(This,count)
#define Recordset15_get_PageSize(This,size) (This)->lpVtbl->get_PageSize(This,size)
#define Recordset15_put_PageSize(This,size) (This)->lpVtbl->put_PageSize(This,size)
#define Recordset15_get_Sort(This,criteria) (This)->lpVtbl->get_Sort(This,criteria)
#define Recordset15_put_Sort(This,criteria) (This)->lpVtbl->put_Sort(This,criteria)
#define Recordset15_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#define Recordset15_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define Recordset15__xClone(This,object) (This)->lpVtbl->_xClone(This,object)
#define Recordset15_UpdateBatch(This,affect_records) (This)->lpVtbl->UpdateBatch(This,affect_records)
#define Recordset15_CancelBatch(This,affect_records) (This)->lpVtbl->CancelBatch(This,affect_records)
#define Recordset15_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define Recordset15_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define Recordset15_NextRecordset(This,records_affected,record_set) (This)->lpVtbl->NextRecordset(This,records_affected,record_set)
#define Recordset15_Supports(This,cursor_options,ret) (This)->lpVtbl->Supports(This,cursor_options,ret)
#define Recordset15_get_Collect(This,index,var) (This)->lpVtbl->get_Collect(This,index,var)
#define Recordset15_put_Collect(This,index,var) (This)->lpVtbl->put_Collect(This,index,var)
#define Recordset15_get_MarshalOptions(This,options) (This)->lpVtbl->get_MarshalOptions(This,options)
#define Recordset15_put_MarshalOptions(This,options) (This)->lpVtbl->put_MarshalOptions(This,options)
#define Recordset15_Find(This,criteria,skip_records,search_direction,start) (This)->lpVtbl->Find(This,criteria,skip_records,search_direction,start)
#else
/*** IUnknown methods ***/
static inline HRESULT Recordset15_QueryInterface(Recordset15* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Recordset15_AddRef(Recordset15* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Recordset15_Release(Recordset15* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Recordset15_GetTypeInfoCount(Recordset15* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Recordset15_GetTypeInfo(Recordset15* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Recordset15_GetIDsOfNames(Recordset15* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Recordset15_Invoke(Recordset15* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Recordset15_get_Properties(Recordset15* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Recordset15 methods ***/
static inline HRESULT Recordset15_get_AbsolutePosition(Recordset15* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePosition(This,position);
}
static inline HRESULT Recordset15_put_AbsolutePosition(Recordset15* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePosition(This,position);
}
static inline HRESULT Recordset15_putref_ActiveConnection(Recordset15* This,IDispatch *connection) {
    return This->lpVtbl->putref_ActiveConnection(This,connection);
}
static inline HRESULT Recordset15_put_ActiveConnection(Recordset15* This,VARIANT connection) {
    return This->lpVtbl->put_ActiveConnection(This,connection);
}
static inline HRESULT Recordset15_get_ActiveConnection(Recordset15* This,VARIANT *connection) {
    return This->lpVtbl->get_ActiveConnection(This,connection);
}
static inline HRESULT Recordset15_get_BOF(Recordset15* This,VARIANT_BOOL *bof) {
    return This->lpVtbl->get_BOF(This,bof);
}
static inline HRESULT Recordset15_get_Bookmark(Recordset15* This,VARIANT *bookmark) {
    return This->lpVtbl->get_Bookmark(This,bookmark);
}
static inline HRESULT Recordset15_put_Bookmark(Recordset15* This,VARIANT bookmark) {
    return This->lpVtbl->put_Bookmark(This,bookmark);
}
static inline HRESULT Recordset15_get_CacheSize(Recordset15* This,LONG *size) {
    return This->lpVtbl->get_CacheSize(This,size);
}
static inline HRESULT Recordset15_put_CacheSize(Recordset15* This,LONG size) {
    return This->lpVtbl->put_CacheSize(This,size);
}
static inline HRESULT Recordset15_get_CursorType(Recordset15* This,CursorTypeEnum *cursor_type) {
    return This->lpVtbl->get_CursorType(This,cursor_type);
}
static inline HRESULT Recordset15_put_CursorType(Recordset15* This,CursorTypeEnum cursor_type) {
    return This->lpVtbl->put_CursorType(This,cursor_type);
}
static inline HRESULT Recordset15_get_EOF(Recordset15* This,VARIANT_BOOL *eof) {
    return This->lpVtbl->get_EOF(This,eof);
}
static inline HRESULT Recordset15_get_Fields(Recordset15* This,Fields **object) {
    return This->lpVtbl->get_Fields(This,object);
}
static inline HRESULT Recordset15_get_LockType(Recordset15* This,LockTypeEnum *lock_type) {
    return This->lpVtbl->get_LockType(This,lock_type);
}
static inline HRESULT Recordset15_put_LockType(Recordset15* This,LockTypeEnum lock_type) {
    return This->lpVtbl->put_LockType(This,lock_type);
}
static inline HRESULT Recordset15_get_MaxRecords(Recordset15* This,ADO_LONGPTR *max_records) {
    return This->lpVtbl->get_MaxRecords(This,max_records);
}
static inline HRESULT Recordset15_put_MaxRecords(Recordset15* This,ADO_LONGPTR max_records) {
    return This->lpVtbl->put_MaxRecords(This,max_records);
}
static inline HRESULT Recordset15_get_RecordCount(Recordset15* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_RecordCount(This,count);
}
static inline HRESULT Recordset15_putref_Source(Recordset15* This,IDispatch *source) {
    return This->lpVtbl->putref_Source(This,source);
}
static inline HRESULT Recordset15_put_Source(Recordset15* This,BSTR source) {
    return This->lpVtbl->put_Source(This,source);
}
static inline HRESULT Recordset15_get_Source(Recordset15* This,VARIANT *source) {
    return This->lpVtbl->get_Source(This,source);
}
static inline HRESULT Recordset15_AddNew(Recordset15* This,VARIANT field_list,VARIANT values) {
    return This->lpVtbl->AddNew(This,field_list,values);
}
static inline HRESULT Recordset15_CancelUpdate(Recordset15* This) {
    return This->lpVtbl->CancelUpdate(This);
}
static inline HRESULT Recordset15_Close(Recordset15* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT Recordset15_Delete(Recordset15* This,AffectEnum affect_records) {
    return This->lpVtbl->Delete(This,affect_records);
}
static inline HRESULT Recordset15_GetRows(Recordset15* This,LONG rows,VARIANT start,VARIANT fields,VARIANT *var) {
    return This->lpVtbl->GetRows(This,rows,start,fields,var);
}
static inline HRESULT Recordset15_Move(Recordset15* This,ADO_LONGPTR num_records,VARIANT start) {
    return This->lpVtbl->Move(This,num_records,start);
}
static inline HRESULT Recordset15_MoveNext(Recordset15* This) {
    return This->lpVtbl->MoveNext(This);
}
static inline HRESULT Recordset15_MovePrevious(Recordset15* This) {
    return This->lpVtbl->MovePrevious(This);
}
static inline HRESULT Recordset15_MoveFirst(Recordset15* This) {
    return This->lpVtbl->MoveFirst(This);
}
static inline HRESULT Recordset15_MoveLast(Recordset15* This) {
    return This->lpVtbl->MoveLast(This);
}
static inline HRESULT Recordset15_Open(Recordset15* This,VARIANT source,VARIANT active_connection,CursorTypeEnum cursor_type,LockTypeEnum lock_type,LONG options) {
    return This->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options);
}
static inline HRESULT Recordset15_Requery(Recordset15* This,LONG options) {
    return This->lpVtbl->Requery(This,options);
}
static inline HRESULT Recordset15__xResync(Recordset15* This,AffectEnum affect_records) {
    return This->lpVtbl->_xResync(This,affect_records);
}
static inline HRESULT Recordset15_Update(Recordset15* This,VARIANT fields,VARIANT values) {
    return This->lpVtbl->Update(This,fields,values);
}
static inline HRESULT Recordset15_get_AbsolutePage(Recordset15* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePage(This,position);
}
static inline HRESULT Recordset15_put_AbsolutePage(Recordset15* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePage(This,position);
}
static inline HRESULT Recordset15_get_EditMode(Recordset15* This,EditModeEnum *mode) {
    return This->lpVtbl->get_EditMode(This,mode);
}
static inline HRESULT Recordset15_get_Filter(Recordset15* This,VARIANT *criteria) {
    return This->lpVtbl->get_Filter(This,criteria);
}
static inline HRESULT Recordset15_put_Filter(Recordset15* This,VARIANT criteria) {
    return This->lpVtbl->put_Filter(This,criteria);
}
static inline HRESULT Recordset15_get_PageCount(Recordset15* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_PageCount(This,count);
}
static inline HRESULT Recordset15_get_PageSize(Recordset15* This,LONG *size) {
    return This->lpVtbl->get_PageSize(This,size);
}
static inline HRESULT Recordset15_put_PageSize(Recordset15* This,LONG size) {
    return This->lpVtbl->put_PageSize(This,size);
}
static inline HRESULT Recordset15_get_Sort(Recordset15* This,BSTR *criteria) {
    return This->lpVtbl->get_Sort(This,criteria);
}
static inline HRESULT Recordset15_put_Sort(Recordset15* This,BSTR criteria) {
    return This->lpVtbl->put_Sort(This,criteria);
}
static inline HRESULT Recordset15_get_Status(Recordset15* This,LONG *status) {
    return This->lpVtbl->get_Status(This,status);
}
static inline HRESULT Recordset15_get_State(Recordset15* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT Recordset15__xClone(Recordset15* This,_Recordset **object) {
    return This->lpVtbl->_xClone(This,object);
}
static inline HRESULT Recordset15_UpdateBatch(Recordset15* This,AffectEnum affect_records) {
    return This->lpVtbl->UpdateBatch(This,affect_records);
}
static inline HRESULT Recordset15_CancelBatch(Recordset15* This,AffectEnum affect_records) {
    return This->lpVtbl->CancelBatch(This,affect_records);
}
static inline HRESULT Recordset15_get_CursorLocation(Recordset15* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset15_put_CursorLocation(Recordset15* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset15_NextRecordset(Recordset15* This,VARIANT *records_affected,_Recordset **record_set) {
    return This->lpVtbl->NextRecordset(This,records_affected,record_set);
}
static inline HRESULT Recordset15_Supports(Recordset15* This,CursorOptionEnum cursor_options,VARIANT_BOOL *ret) {
    return This->lpVtbl->Supports(This,cursor_options,ret);
}
static inline HRESULT Recordset15_get_Collect(Recordset15* This,VARIANT index,VARIANT *var) {
    return This->lpVtbl->get_Collect(This,index,var);
}
static inline HRESULT Recordset15_put_Collect(Recordset15* This,VARIANT index,VARIANT var) {
    return This->lpVtbl->put_Collect(This,index,var);
}
static inline HRESULT Recordset15_get_MarshalOptions(Recordset15* This,MarshalOptionsEnum *options) {
    return This->lpVtbl->get_MarshalOptions(This,options);
}
static inline HRESULT Recordset15_put_MarshalOptions(Recordset15* This,MarshalOptionsEnum options) {
    return This->lpVtbl->put_MarshalOptions(This,options);
}
static inline HRESULT Recordset15_Find(Recordset15* This,BSTR criteria,LONG skip_records,SearchDirectionEnum search_direction,VARIANT start) {
    return This->lpVtbl->Find(This,criteria,skip_records,search_direction,start);
}
#endif
#endif

#endif


#endif  /* __Recordset15_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Recordset20 interface
 */
#ifndef __Recordset20_INTERFACE_DEFINED__
#define __Recordset20_INTERFACE_DEFINED__

DEFINE_GUID(IID_Recordset20, 0x0000054f, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000054f-0000-0010-8000-00aa006d2ea4")
Recordset20 : public Recordset15
{
    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DataSource(
        IUnknown **data_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_DataSource(
        IUnknown *data_source) = 0;

    virtual HRESULT STDMETHODCALLTYPE _xSave(
        BSTR filename,
        PersistFormatEnum persist_format = adPersistADTG) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ActiveCommand(
        IDispatch **cmd) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_StayInSync(
        VARIANT_BOOL stay_in_sync) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_StayInSync(
        VARIANT_BOOL *stay_in_sync) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetString(
        StringFormatEnum string_format,
        LONG num_rows,
        BSTR column_delimiter,
        BSTR row_delimiter,
        BSTR null_expr,
        BSTR *ret_string) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DataMember(
        BSTR *data_member) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_DataMember(
        BSTR data_member) = 0;

    virtual HRESULT STDMETHODCALLTYPE CompareBookmarks(
        VARIANT bookmark1,
        VARIANT bookmark2,
        CompareEnum *compare) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clone(
        LockTypeEnum lock_type,
        _Recordset **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Resync(
        AffectEnum affect_records = adAffectAll,
        ResyncEnum resync_values = adResyncAllValues) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Recordset20, 0x0000054f, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Recordset20Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Recordset20 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Recordset20 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Recordset20 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Recordset20 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Recordset20 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Recordset20 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Recordset20 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Recordset20 *This,
        Properties **object);

    /*** Recordset15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AbsolutePosition)(
        Recordset20 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePosition)(
        Recordset20 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        Recordset20 *This,
        IDispatch *connection);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        Recordset20 *This,
        VARIANT connection);

    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        Recordset20 *This,
        VARIANT *connection);

    HRESULT (STDMETHODCALLTYPE *get_BOF)(
        Recordset20 *This,
        VARIANT_BOOL *bof);

    HRESULT (STDMETHODCALLTYPE *get_Bookmark)(
        Recordset20 *This,
        VARIANT *bookmark);

    HRESULT (STDMETHODCALLTYPE *put_Bookmark)(
        Recordset20 *This,
        VARIANT bookmark);

    HRESULT (STDMETHODCALLTYPE *get_CacheSize)(
        Recordset20 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_CacheSize)(
        Recordset20 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_CursorType)(
        Recordset20 *This,
        CursorTypeEnum *cursor_type);

    HRESULT (STDMETHODCALLTYPE *put_CursorType)(
        Recordset20 *This,
        CursorTypeEnum cursor_type);

    HRESULT (STDMETHODCALLTYPE *get_EOF)(
        Recordset20 *This,
        VARIANT_BOOL *eof);

    HRESULT (STDMETHODCALLTYPE *get_Fields)(
        Recordset20 *This,
        Fields **object);

    HRESULT (STDMETHODCALLTYPE *get_LockType)(
        Recordset20 *This,
        LockTypeEnum *lock_type);

    HRESULT (STDMETHODCALLTYPE *put_LockType)(
        Recordset20 *This,
        LockTypeEnum lock_type);

    HRESULT (STDMETHODCALLTYPE *get_MaxRecords)(
        Recordset20 *This,
        ADO_LONGPTR *max_records);

    HRESULT (STDMETHODCALLTYPE *put_MaxRecords)(
        Recordset20 *This,
        ADO_LONGPTR max_records);

    HRESULT (STDMETHODCALLTYPE *get_RecordCount)(
        Recordset20 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *putref_Source)(
        Recordset20 *This,
        IDispatch *source);

    HRESULT (STDMETHODCALLTYPE *put_Source)(
        Recordset20 *This,
        BSTR source);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        Recordset20 *This,
        VARIANT *source);

    HRESULT (STDMETHODCALLTYPE *AddNew)(
        Recordset20 *This,
        VARIANT field_list,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *CancelUpdate)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Recordset20 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *GetRows)(
        Recordset20 *This,
        LONG rows,
        VARIANT start,
        VARIANT fields,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *Move)(
        Recordset20 *This,
        ADO_LONGPTR num_records,
        VARIANT start);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *MoveFirst)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *MoveLast)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        Recordset20 *This,
        VARIANT source,
        VARIANT active_connection,
        CursorTypeEnum cursor_type,
        LockTypeEnum lock_type,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *Requery)(
        Recordset20 *This,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *_xResync)(
        Recordset20 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *Update)(
        Recordset20 *This,
        VARIANT fields,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *get_AbsolutePage)(
        Recordset20 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePage)(
        Recordset20 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *get_EditMode)(
        Recordset20 *This,
        EditModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *get_Filter)(
        Recordset20 *This,
        VARIANT *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Filter)(
        Recordset20 *This,
        VARIANT criteria);

    HRESULT (STDMETHODCALLTYPE *get_PageCount)(
        Recordset20 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *get_PageSize)(
        Recordset20 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_PageSize)(
        Recordset20 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_Sort)(
        Recordset20 *This,
        BSTR *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Sort)(
        Recordset20 *This,
        BSTR criteria);

    HRESULT (STDMETHODCALLTYPE *get_Status)(
        Recordset20 *This,
        LONG *status);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        Recordset20 *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *_xClone)(
        Recordset20 *This,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *UpdateBatch)(
        Recordset20 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *CancelBatch)(
        Recordset20 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        Recordset20 *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        Recordset20 *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *NextRecordset)(
        Recordset20 *This,
        VARIANT *records_affected,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *Supports)(
        Recordset20 *This,
        CursorOptionEnum cursor_options,
        VARIANT_BOOL *ret);

    HRESULT (STDMETHODCALLTYPE *get_Collect)(
        Recordset20 *This,
        VARIANT index,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *put_Collect)(
        Recordset20 *This,
        VARIANT index,
        VARIANT var);

    HRESULT (STDMETHODCALLTYPE *get_MarshalOptions)(
        Recordset20 *This,
        MarshalOptionsEnum *options);

    HRESULT (STDMETHODCALLTYPE *put_MarshalOptions)(
        Recordset20 *This,
        MarshalOptionsEnum options);

    HRESULT (STDMETHODCALLTYPE *Find)(
        Recordset20 *This,
        BSTR criteria,
        LONG skip_records,
        SearchDirectionEnum search_direction,
        VARIANT start);

    /*** Recordset20 methods ***/
    HRESULT (STDMETHODCALLTYPE *Cancel)(
        Recordset20 *This);

    HRESULT (STDMETHODCALLTYPE *get_DataSource)(
        Recordset20 *This,
        IUnknown **data_source);

    HRESULT (STDMETHODCALLTYPE *putref_DataSource)(
        Recordset20 *This,
        IUnknown *data_source);

    HRESULT (STDMETHODCALLTYPE *_xSave)(
        Recordset20 *This,
        BSTR filename,
        PersistFormatEnum persist_format);

    HRESULT (STDMETHODCALLTYPE *get_ActiveCommand)(
        Recordset20 *This,
        IDispatch **cmd);

    HRESULT (STDMETHODCALLTYPE *put_StayInSync)(
        Recordset20 *This,
        VARIANT_BOOL stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *get_StayInSync)(
        Recordset20 *This,
        VARIANT_BOOL *stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        Recordset20 *This,
        StringFormatEnum string_format,
        LONG num_rows,
        BSTR column_delimiter,
        BSTR row_delimiter,
        BSTR null_expr,
        BSTR *ret_string);

    HRESULT (STDMETHODCALLTYPE *get_DataMember)(
        Recordset20 *This,
        BSTR *data_member);

    HRESULT (STDMETHODCALLTYPE *put_DataMember)(
        Recordset20 *This,
        BSTR data_member);

    HRESULT (STDMETHODCALLTYPE *CompareBookmarks)(
        Recordset20 *This,
        VARIANT bookmark1,
        VARIANT bookmark2,
        CompareEnum *compare);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        Recordset20 *This,
        LockTypeEnum lock_type,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *Resync)(
        Recordset20 *This,
        AffectEnum affect_records,
        ResyncEnum resync_values);

    END_INTERFACE
} Recordset20Vtbl;

interface Recordset20 {
    CONST_VTBL Recordset20Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Recordset20_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Recordset20_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Recordset20_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Recordset20_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Recordset20_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Recordset20_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Recordset20_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Recordset20_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Recordset15 methods ***/
#define Recordset20_get_AbsolutePosition(This,position) (This)->lpVtbl->get_AbsolutePosition(This,position)
#define Recordset20_put_AbsolutePosition(This,position) (This)->lpVtbl->put_AbsolutePosition(This,position)
#define Recordset20_putref_ActiveConnection(This,connection) (This)->lpVtbl->putref_ActiveConnection(This,connection)
#define Recordset20_put_ActiveConnection(This,connection) (This)->lpVtbl->put_ActiveConnection(This,connection)
#define Recordset20_get_ActiveConnection(This,connection) (This)->lpVtbl->get_ActiveConnection(This,connection)
#define Recordset20_get_BOF(This,bof) (This)->lpVtbl->get_BOF(This,bof)
#define Recordset20_get_Bookmark(This,bookmark) (This)->lpVtbl->get_Bookmark(This,bookmark)
#define Recordset20_put_Bookmark(This,bookmark) (This)->lpVtbl->put_Bookmark(This,bookmark)
#define Recordset20_get_CacheSize(This,size) (This)->lpVtbl->get_CacheSize(This,size)
#define Recordset20_put_CacheSize(This,size) (This)->lpVtbl->put_CacheSize(This,size)
#define Recordset20_get_CursorType(This,cursor_type) (This)->lpVtbl->get_CursorType(This,cursor_type)
#define Recordset20_put_CursorType(This,cursor_type) (This)->lpVtbl->put_CursorType(This,cursor_type)
#define Recordset20_get_EOF(This,eof) (This)->lpVtbl->get_EOF(This,eof)
#define Recordset20_get_Fields(This,object) (This)->lpVtbl->get_Fields(This,object)
#define Recordset20_get_LockType(This,lock_type) (This)->lpVtbl->get_LockType(This,lock_type)
#define Recordset20_put_LockType(This,lock_type) (This)->lpVtbl->put_LockType(This,lock_type)
#define Recordset20_get_MaxRecords(This,max_records) (This)->lpVtbl->get_MaxRecords(This,max_records)
#define Recordset20_put_MaxRecords(This,max_records) (This)->lpVtbl->put_MaxRecords(This,max_records)
#define Recordset20_get_RecordCount(This,count) (This)->lpVtbl->get_RecordCount(This,count)
#define Recordset20_putref_Source(This,source) (This)->lpVtbl->putref_Source(This,source)
#define Recordset20_put_Source(This,source) (This)->lpVtbl->put_Source(This,source)
#define Recordset20_get_Source(This,source) (This)->lpVtbl->get_Source(This,source)
#define Recordset20_AddNew(This,field_list,values) (This)->lpVtbl->AddNew(This,field_list,values)
#define Recordset20_CancelUpdate(This) (This)->lpVtbl->CancelUpdate(This)
#define Recordset20_Close(This) (This)->lpVtbl->Close(This)
#define Recordset20_Delete(This,affect_records) (This)->lpVtbl->Delete(This,affect_records)
#define Recordset20_GetRows(This,rows,start,fields,var) (This)->lpVtbl->GetRows(This,rows,start,fields,var)
#define Recordset20_Move(This,num_records,start) (This)->lpVtbl->Move(This,num_records,start)
#define Recordset20_MoveNext(This) (This)->lpVtbl->MoveNext(This)
#define Recordset20_MovePrevious(This) (This)->lpVtbl->MovePrevious(This)
#define Recordset20_MoveFirst(This) (This)->lpVtbl->MoveFirst(This)
#define Recordset20_MoveLast(This) (This)->lpVtbl->MoveLast(This)
#define Recordset20_Open(This,source,active_connection,cursor_type,lock_type,options) (This)->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options)
#define Recordset20_Requery(This,options) (This)->lpVtbl->Requery(This,options)
#define Recordset20__xResync(This,affect_records) (This)->lpVtbl->_xResync(This,affect_records)
#define Recordset20_Update(This,fields,values) (This)->lpVtbl->Update(This,fields,values)
#define Recordset20_get_AbsolutePage(This,position) (This)->lpVtbl->get_AbsolutePage(This,position)
#define Recordset20_put_AbsolutePage(This,position) (This)->lpVtbl->put_AbsolutePage(This,position)
#define Recordset20_get_EditMode(This,mode) (This)->lpVtbl->get_EditMode(This,mode)
#define Recordset20_get_Filter(This,criteria) (This)->lpVtbl->get_Filter(This,criteria)
#define Recordset20_put_Filter(This,criteria) (This)->lpVtbl->put_Filter(This,criteria)
#define Recordset20_get_PageCount(This,count) (This)->lpVtbl->get_PageCount(This,count)
#define Recordset20_get_PageSize(This,size) (This)->lpVtbl->get_PageSize(This,size)
#define Recordset20_put_PageSize(This,size) (This)->lpVtbl->put_PageSize(This,size)
#define Recordset20_get_Sort(This,criteria) (This)->lpVtbl->get_Sort(This,criteria)
#define Recordset20_put_Sort(This,criteria) (This)->lpVtbl->put_Sort(This,criteria)
#define Recordset20_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#define Recordset20_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define Recordset20__xClone(This,object) (This)->lpVtbl->_xClone(This,object)
#define Recordset20_UpdateBatch(This,affect_records) (This)->lpVtbl->UpdateBatch(This,affect_records)
#define Recordset20_CancelBatch(This,affect_records) (This)->lpVtbl->CancelBatch(This,affect_records)
#define Recordset20_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define Recordset20_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define Recordset20_NextRecordset(This,records_affected,record_set) (This)->lpVtbl->NextRecordset(This,records_affected,record_set)
#define Recordset20_Supports(This,cursor_options,ret) (This)->lpVtbl->Supports(This,cursor_options,ret)
#define Recordset20_get_Collect(This,index,var) (This)->lpVtbl->get_Collect(This,index,var)
#define Recordset20_put_Collect(This,index,var) (This)->lpVtbl->put_Collect(This,index,var)
#define Recordset20_get_MarshalOptions(This,options) (This)->lpVtbl->get_MarshalOptions(This,options)
#define Recordset20_put_MarshalOptions(This,options) (This)->lpVtbl->put_MarshalOptions(This,options)
#define Recordset20_Find(This,criteria,skip_records,search_direction,start) (This)->lpVtbl->Find(This,criteria,skip_records,search_direction,start)
/*** Recordset20 methods ***/
#define Recordset20_Cancel(This) (This)->lpVtbl->Cancel(This)
#define Recordset20_get_DataSource(This,data_source) (This)->lpVtbl->get_DataSource(This,data_source)
#define Recordset20_putref_DataSource(This,data_source) (This)->lpVtbl->putref_DataSource(This,data_source)
#define Recordset20__xSave(This,filename,persist_format) (This)->lpVtbl->_xSave(This,filename,persist_format)
#define Recordset20_get_ActiveCommand(This,cmd) (This)->lpVtbl->get_ActiveCommand(This,cmd)
#define Recordset20_put_StayInSync(This,stay_in_sync) (This)->lpVtbl->put_StayInSync(This,stay_in_sync)
#define Recordset20_get_StayInSync(This,stay_in_sync) (This)->lpVtbl->get_StayInSync(This,stay_in_sync)
#define Recordset20_GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string) (This)->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string)
#define Recordset20_get_DataMember(This,data_member) (This)->lpVtbl->get_DataMember(This,data_member)
#define Recordset20_put_DataMember(This,data_member) (This)->lpVtbl->put_DataMember(This,data_member)
#define Recordset20_CompareBookmarks(This,bookmark1,bookmark2,compare) (This)->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare)
#define Recordset20_Clone(This,lock_type,object) (This)->lpVtbl->Clone(This,lock_type,object)
#define Recordset20_Resync(This,affect_records,resync_values) (This)->lpVtbl->Resync(This,affect_records,resync_values)
#else
/*** IUnknown methods ***/
static inline HRESULT Recordset20_QueryInterface(Recordset20* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Recordset20_AddRef(Recordset20* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Recordset20_Release(Recordset20* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Recordset20_GetTypeInfoCount(Recordset20* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Recordset20_GetTypeInfo(Recordset20* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Recordset20_GetIDsOfNames(Recordset20* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Recordset20_Invoke(Recordset20* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Recordset20_get_Properties(Recordset20* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Recordset15 methods ***/
static inline HRESULT Recordset20_get_AbsolutePosition(Recordset20* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePosition(This,position);
}
static inline HRESULT Recordset20_put_AbsolutePosition(Recordset20* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePosition(This,position);
}
static inline HRESULT Recordset20_putref_ActiveConnection(Recordset20* This,IDispatch *connection) {
    return This->lpVtbl->putref_ActiveConnection(This,connection);
}
static inline HRESULT Recordset20_put_ActiveConnection(Recordset20* This,VARIANT connection) {
    return This->lpVtbl->put_ActiveConnection(This,connection);
}
static inline HRESULT Recordset20_get_ActiveConnection(Recordset20* This,VARIANT *connection) {
    return This->lpVtbl->get_ActiveConnection(This,connection);
}
static inline HRESULT Recordset20_get_BOF(Recordset20* This,VARIANT_BOOL *bof) {
    return This->lpVtbl->get_BOF(This,bof);
}
static inline HRESULT Recordset20_get_Bookmark(Recordset20* This,VARIANT *bookmark) {
    return This->lpVtbl->get_Bookmark(This,bookmark);
}
static inline HRESULT Recordset20_put_Bookmark(Recordset20* This,VARIANT bookmark) {
    return This->lpVtbl->put_Bookmark(This,bookmark);
}
static inline HRESULT Recordset20_get_CacheSize(Recordset20* This,LONG *size) {
    return This->lpVtbl->get_CacheSize(This,size);
}
static inline HRESULT Recordset20_put_CacheSize(Recordset20* This,LONG size) {
    return This->lpVtbl->put_CacheSize(This,size);
}
static inline HRESULT Recordset20_get_CursorType(Recordset20* This,CursorTypeEnum *cursor_type) {
    return This->lpVtbl->get_CursorType(This,cursor_type);
}
static inline HRESULT Recordset20_put_CursorType(Recordset20* This,CursorTypeEnum cursor_type) {
    return This->lpVtbl->put_CursorType(This,cursor_type);
}
static inline HRESULT Recordset20_get_EOF(Recordset20* This,VARIANT_BOOL *eof) {
    return This->lpVtbl->get_EOF(This,eof);
}
static inline HRESULT Recordset20_get_Fields(Recordset20* This,Fields **object) {
    return This->lpVtbl->get_Fields(This,object);
}
static inline HRESULT Recordset20_get_LockType(Recordset20* This,LockTypeEnum *lock_type) {
    return This->lpVtbl->get_LockType(This,lock_type);
}
static inline HRESULT Recordset20_put_LockType(Recordset20* This,LockTypeEnum lock_type) {
    return This->lpVtbl->put_LockType(This,lock_type);
}
static inline HRESULT Recordset20_get_MaxRecords(Recordset20* This,ADO_LONGPTR *max_records) {
    return This->lpVtbl->get_MaxRecords(This,max_records);
}
static inline HRESULT Recordset20_put_MaxRecords(Recordset20* This,ADO_LONGPTR max_records) {
    return This->lpVtbl->put_MaxRecords(This,max_records);
}
static inline HRESULT Recordset20_get_RecordCount(Recordset20* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_RecordCount(This,count);
}
static inline HRESULT Recordset20_putref_Source(Recordset20* This,IDispatch *source) {
    return This->lpVtbl->putref_Source(This,source);
}
static inline HRESULT Recordset20_put_Source(Recordset20* This,BSTR source) {
    return This->lpVtbl->put_Source(This,source);
}
static inline HRESULT Recordset20_get_Source(Recordset20* This,VARIANT *source) {
    return This->lpVtbl->get_Source(This,source);
}
static inline HRESULT Recordset20_AddNew(Recordset20* This,VARIANT field_list,VARIANT values) {
    return This->lpVtbl->AddNew(This,field_list,values);
}
static inline HRESULT Recordset20_CancelUpdate(Recordset20* This) {
    return This->lpVtbl->CancelUpdate(This);
}
static inline HRESULT Recordset20_Close(Recordset20* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT Recordset20_Delete(Recordset20* This,AffectEnum affect_records) {
    return This->lpVtbl->Delete(This,affect_records);
}
static inline HRESULT Recordset20_GetRows(Recordset20* This,LONG rows,VARIANT start,VARIANT fields,VARIANT *var) {
    return This->lpVtbl->GetRows(This,rows,start,fields,var);
}
static inline HRESULT Recordset20_Move(Recordset20* This,ADO_LONGPTR num_records,VARIANT start) {
    return This->lpVtbl->Move(This,num_records,start);
}
static inline HRESULT Recordset20_MoveNext(Recordset20* This) {
    return This->lpVtbl->MoveNext(This);
}
static inline HRESULT Recordset20_MovePrevious(Recordset20* This) {
    return This->lpVtbl->MovePrevious(This);
}
static inline HRESULT Recordset20_MoveFirst(Recordset20* This) {
    return This->lpVtbl->MoveFirst(This);
}
static inline HRESULT Recordset20_MoveLast(Recordset20* This) {
    return This->lpVtbl->MoveLast(This);
}
static inline HRESULT Recordset20_Open(Recordset20* This,VARIANT source,VARIANT active_connection,CursorTypeEnum cursor_type,LockTypeEnum lock_type,LONG options) {
    return This->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options);
}
static inline HRESULT Recordset20_Requery(Recordset20* This,LONG options) {
    return This->lpVtbl->Requery(This,options);
}
static inline HRESULT Recordset20__xResync(Recordset20* This,AffectEnum affect_records) {
    return This->lpVtbl->_xResync(This,affect_records);
}
static inline HRESULT Recordset20_Update(Recordset20* This,VARIANT fields,VARIANT values) {
    return This->lpVtbl->Update(This,fields,values);
}
static inline HRESULT Recordset20_get_AbsolutePage(Recordset20* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePage(This,position);
}
static inline HRESULT Recordset20_put_AbsolutePage(Recordset20* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePage(This,position);
}
static inline HRESULT Recordset20_get_EditMode(Recordset20* This,EditModeEnum *mode) {
    return This->lpVtbl->get_EditMode(This,mode);
}
static inline HRESULT Recordset20_get_Filter(Recordset20* This,VARIANT *criteria) {
    return This->lpVtbl->get_Filter(This,criteria);
}
static inline HRESULT Recordset20_put_Filter(Recordset20* This,VARIANT criteria) {
    return This->lpVtbl->put_Filter(This,criteria);
}
static inline HRESULT Recordset20_get_PageCount(Recordset20* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_PageCount(This,count);
}
static inline HRESULT Recordset20_get_PageSize(Recordset20* This,LONG *size) {
    return This->lpVtbl->get_PageSize(This,size);
}
static inline HRESULT Recordset20_put_PageSize(Recordset20* This,LONG size) {
    return This->lpVtbl->put_PageSize(This,size);
}
static inline HRESULT Recordset20_get_Sort(Recordset20* This,BSTR *criteria) {
    return This->lpVtbl->get_Sort(This,criteria);
}
static inline HRESULT Recordset20_put_Sort(Recordset20* This,BSTR criteria) {
    return This->lpVtbl->put_Sort(This,criteria);
}
static inline HRESULT Recordset20_get_Status(Recordset20* This,LONG *status) {
    return This->lpVtbl->get_Status(This,status);
}
static inline HRESULT Recordset20_get_State(Recordset20* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT Recordset20__xClone(Recordset20* This,_Recordset **object) {
    return This->lpVtbl->_xClone(This,object);
}
static inline HRESULT Recordset20_UpdateBatch(Recordset20* This,AffectEnum affect_records) {
    return This->lpVtbl->UpdateBatch(This,affect_records);
}
static inline HRESULT Recordset20_CancelBatch(Recordset20* This,AffectEnum affect_records) {
    return This->lpVtbl->CancelBatch(This,affect_records);
}
static inline HRESULT Recordset20_get_CursorLocation(Recordset20* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset20_put_CursorLocation(Recordset20* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset20_NextRecordset(Recordset20* This,VARIANT *records_affected,_Recordset **record_set) {
    return This->lpVtbl->NextRecordset(This,records_affected,record_set);
}
static inline HRESULT Recordset20_Supports(Recordset20* This,CursorOptionEnum cursor_options,VARIANT_BOOL *ret) {
    return This->lpVtbl->Supports(This,cursor_options,ret);
}
static inline HRESULT Recordset20_get_Collect(Recordset20* This,VARIANT index,VARIANT *var) {
    return This->lpVtbl->get_Collect(This,index,var);
}
static inline HRESULT Recordset20_put_Collect(Recordset20* This,VARIANT index,VARIANT var) {
    return This->lpVtbl->put_Collect(This,index,var);
}
static inline HRESULT Recordset20_get_MarshalOptions(Recordset20* This,MarshalOptionsEnum *options) {
    return This->lpVtbl->get_MarshalOptions(This,options);
}
static inline HRESULT Recordset20_put_MarshalOptions(Recordset20* This,MarshalOptionsEnum options) {
    return This->lpVtbl->put_MarshalOptions(This,options);
}
static inline HRESULT Recordset20_Find(Recordset20* This,BSTR criteria,LONG skip_records,SearchDirectionEnum search_direction,VARIANT start) {
    return This->lpVtbl->Find(This,criteria,skip_records,search_direction,start);
}
/*** Recordset20 methods ***/
static inline HRESULT Recordset20_Cancel(Recordset20* This) {
    return This->lpVtbl->Cancel(This);
}
static inline HRESULT Recordset20_get_DataSource(Recordset20* This,IUnknown **data_source) {
    return This->lpVtbl->get_DataSource(This,data_source);
}
static inline HRESULT Recordset20_putref_DataSource(Recordset20* This,IUnknown *data_source) {
    return This->lpVtbl->putref_DataSource(This,data_source);
}
static inline HRESULT Recordset20__xSave(Recordset20* This,BSTR filename,PersistFormatEnum persist_format) {
    return This->lpVtbl->_xSave(This,filename,persist_format);
}
static inline HRESULT Recordset20_get_ActiveCommand(Recordset20* This,IDispatch **cmd) {
    return This->lpVtbl->get_ActiveCommand(This,cmd);
}
static inline HRESULT Recordset20_put_StayInSync(Recordset20* This,VARIANT_BOOL stay_in_sync) {
    return This->lpVtbl->put_StayInSync(This,stay_in_sync);
}
static inline HRESULT Recordset20_get_StayInSync(Recordset20* This,VARIANT_BOOL *stay_in_sync) {
    return This->lpVtbl->get_StayInSync(This,stay_in_sync);
}
static inline HRESULT Recordset20_GetString(Recordset20* This,StringFormatEnum string_format,LONG num_rows,BSTR column_delimiter,BSTR row_delimiter,BSTR null_expr,BSTR *ret_string) {
    return This->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string);
}
static inline HRESULT Recordset20_get_DataMember(Recordset20* This,BSTR *data_member) {
    return This->lpVtbl->get_DataMember(This,data_member);
}
static inline HRESULT Recordset20_put_DataMember(Recordset20* This,BSTR data_member) {
    return This->lpVtbl->put_DataMember(This,data_member);
}
static inline HRESULT Recordset20_CompareBookmarks(Recordset20* This,VARIANT bookmark1,VARIANT bookmark2,CompareEnum *compare) {
    return This->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare);
}
static inline HRESULT Recordset20_Clone(Recordset20* This,LockTypeEnum lock_type,_Recordset **object) {
    return This->lpVtbl->Clone(This,lock_type,object);
}
static inline HRESULT Recordset20_Resync(Recordset20* This,AffectEnum affect_records,ResyncEnum resync_values) {
    return This->lpVtbl->Resync(This,affect_records,resync_values);
}
#endif
#endif

#endif


#endif  /* __Recordset20_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Recordset21 interface
 */
#ifndef __Recordset21_INTERFACE_DEFINED__
#define __Recordset21_INTERFACE_DEFINED__

DEFINE_GUID(IID_Recordset21, 0x00000555, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000555-0000-0010-8000-00aa006d2ea4")
Recordset21 : public Recordset20
{
    virtual HRESULT STDMETHODCALLTYPE Seek(
        VARIANT key_values,
        SeekEnum seek_option = adSeekFirstEQ) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Index(
        BSTR index) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Index(
        BSTR *index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Recordset21, 0x00000555, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Recordset21Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Recordset21 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Recordset21 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Recordset21 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Recordset21 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Recordset21 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Recordset21 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Recordset21 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Recordset21 *This,
        Properties **object);

    /*** Recordset15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AbsolutePosition)(
        Recordset21 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePosition)(
        Recordset21 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        Recordset21 *This,
        IDispatch *connection);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        Recordset21 *This,
        VARIANT connection);

    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        Recordset21 *This,
        VARIANT *connection);

    HRESULT (STDMETHODCALLTYPE *get_BOF)(
        Recordset21 *This,
        VARIANT_BOOL *bof);

    HRESULT (STDMETHODCALLTYPE *get_Bookmark)(
        Recordset21 *This,
        VARIANT *bookmark);

    HRESULT (STDMETHODCALLTYPE *put_Bookmark)(
        Recordset21 *This,
        VARIANT bookmark);

    HRESULT (STDMETHODCALLTYPE *get_CacheSize)(
        Recordset21 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_CacheSize)(
        Recordset21 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_CursorType)(
        Recordset21 *This,
        CursorTypeEnum *cursor_type);

    HRESULT (STDMETHODCALLTYPE *put_CursorType)(
        Recordset21 *This,
        CursorTypeEnum cursor_type);

    HRESULT (STDMETHODCALLTYPE *get_EOF)(
        Recordset21 *This,
        VARIANT_BOOL *eof);

    HRESULT (STDMETHODCALLTYPE *get_Fields)(
        Recordset21 *This,
        Fields **object);

    HRESULT (STDMETHODCALLTYPE *get_LockType)(
        Recordset21 *This,
        LockTypeEnum *lock_type);

    HRESULT (STDMETHODCALLTYPE *put_LockType)(
        Recordset21 *This,
        LockTypeEnum lock_type);

    HRESULT (STDMETHODCALLTYPE *get_MaxRecords)(
        Recordset21 *This,
        ADO_LONGPTR *max_records);

    HRESULT (STDMETHODCALLTYPE *put_MaxRecords)(
        Recordset21 *This,
        ADO_LONGPTR max_records);

    HRESULT (STDMETHODCALLTYPE *get_RecordCount)(
        Recordset21 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *putref_Source)(
        Recordset21 *This,
        IDispatch *source);

    HRESULT (STDMETHODCALLTYPE *put_Source)(
        Recordset21 *This,
        BSTR source);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        Recordset21 *This,
        VARIANT *source);

    HRESULT (STDMETHODCALLTYPE *AddNew)(
        Recordset21 *This,
        VARIANT field_list,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *CancelUpdate)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Recordset21 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *GetRows)(
        Recordset21 *This,
        LONG rows,
        VARIANT start,
        VARIANT fields,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *Move)(
        Recordset21 *This,
        ADO_LONGPTR num_records,
        VARIANT start);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *MoveFirst)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *MoveLast)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        Recordset21 *This,
        VARIANT source,
        VARIANT active_connection,
        CursorTypeEnum cursor_type,
        LockTypeEnum lock_type,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *Requery)(
        Recordset21 *This,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *_xResync)(
        Recordset21 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *Update)(
        Recordset21 *This,
        VARIANT fields,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *get_AbsolutePage)(
        Recordset21 *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePage)(
        Recordset21 *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *get_EditMode)(
        Recordset21 *This,
        EditModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *get_Filter)(
        Recordset21 *This,
        VARIANT *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Filter)(
        Recordset21 *This,
        VARIANT criteria);

    HRESULT (STDMETHODCALLTYPE *get_PageCount)(
        Recordset21 *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *get_PageSize)(
        Recordset21 *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_PageSize)(
        Recordset21 *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_Sort)(
        Recordset21 *This,
        BSTR *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Sort)(
        Recordset21 *This,
        BSTR criteria);

    HRESULT (STDMETHODCALLTYPE *get_Status)(
        Recordset21 *This,
        LONG *status);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        Recordset21 *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *_xClone)(
        Recordset21 *This,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *UpdateBatch)(
        Recordset21 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *CancelBatch)(
        Recordset21 *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        Recordset21 *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        Recordset21 *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *NextRecordset)(
        Recordset21 *This,
        VARIANT *records_affected,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *Supports)(
        Recordset21 *This,
        CursorOptionEnum cursor_options,
        VARIANT_BOOL *ret);

    HRESULT (STDMETHODCALLTYPE *get_Collect)(
        Recordset21 *This,
        VARIANT index,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *put_Collect)(
        Recordset21 *This,
        VARIANT index,
        VARIANT var);

    HRESULT (STDMETHODCALLTYPE *get_MarshalOptions)(
        Recordset21 *This,
        MarshalOptionsEnum *options);

    HRESULT (STDMETHODCALLTYPE *put_MarshalOptions)(
        Recordset21 *This,
        MarshalOptionsEnum options);

    HRESULT (STDMETHODCALLTYPE *Find)(
        Recordset21 *This,
        BSTR criteria,
        LONG skip_records,
        SearchDirectionEnum search_direction,
        VARIANT start);

    /*** Recordset20 methods ***/
    HRESULT (STDMETHODCALLTYPE *Cancel)(
        Recordset21 *This);

    HRESULT (STDMETHODCALLTYPE *get_DataSource)(
        Recordset21 *This,
        IUnknown **data_source);

    HRESULT (STDMETHODCALLTYPE *putref_DataSource)(
        Recordset21 *This,
        IUnknown *data_source);

    HRESULT (STDMETHODCALLTYPE *_xSave)(
        Recordset21 *This,
        BSTR filename,
        PersistFormatEnum persist_format);

    HRESULT (STDMETHODCALLTYPE *get_ActiveCommand)(
        Recordset21 *This,
        IDispatch **cmd);

    HRESULT (STDMETHODCALLTYPE *put_StayInSync)(
        Recordset21 *This,
        VARIANT_BOOL stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *get_StayInSync)(
        Recordset21 *This,
        VARIANT_BOOL *stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        Recordset21 *This,
        StringFormatEnum string_format,
        LONG num_rows,
        BSTR column_delimiter,
        BSTR row_delimiter,
        BSTR null_expr,
        BSTR *ret_string);

    HRESULT (STDMETHODCALLTYPE *get_DataMember)(
        Recordset21 *This,
        BSTR *data_member);

    HRESULT (STDMETHODCALLTYPE *put_DataMember)(
        Recordset21 *This,
        BSTR data_member);

    HRESULT (STDMETHODCALLTYPE *CompareBookmarks)(
        Recordset21 *This,
        VARIANT bookmark1,
        VARIANT bookmark2,
        CompareEnum *compare);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        Recordset21 *This,
        LockTypeEnum lock_type,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *Resync)(
        Recordset21 *This,
        AffectEnum affect_records,
        ResyncEnum resync_values);

    /*** Recordset21 methods ***/
    HRESULT (STDMETHODCALLTYPE *Seek)(
        Recordset21 *This,
        VARIANT key_values,
        SeekEnum seek_option);

    HRESULT (STDMETHODCALLTYPE *put_Index)(
        Recordset21 *This,
        BSTR index);

    HRESULT (STDMETHODCALLTYPE *get_Index)(
        Recordset21 *This,
        BSTR *index);

    END_INTERFACE
} Recordset21Vtbl;

interface Recordset21 {
    CONST_VTBL Recordset21Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Recordset21_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Recordset21_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Recordset21_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Recordset21_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Recordset21_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Recordset21_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Recordset21_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Recordset21_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Recordset15 methods ***/
#define Recordset21_get_AbsolutePosition(This,position) (This)->lpVtbl->get_AbsolutePosition(This,position)
#define Recordset21_put_AbsolutePosition(This,position) (This)->lpVtbl->put_AbsolutePosition(This,position)
#define Recordset21_putref_ActiveConnection(This,connection) (This)->lpVtbl->putref_ActiveConnection(This,connection)
#define Recordset21_put_ActiveConnection(This,connection) (This)->lpVtbl->put_ActiveConnection(This,connection)
#define Recordset21_get_ActiveConnection(This,connection) (This)->lpVtbl->get_ActiveConnection(This,connection)
#define Recordset21_get_BOF(This,bof) (This)->lpVtbl->get_BOF(This,bof)
#define Recordset21_get_Bookmark(This,bookmark) (This)->lpVtbl->get_Bookmark(This,bookmark)
#define Recordset21_put_Bookmark(This,bookmark) (This)->lpVtbl->put_Bookmark(This,bookmark)
#define Recordset21_get_CacheSize(This,size) (This)->lpVtbl->get_CacheSize(This,size)
#define Recordset21_put_CacheSize(This,size) (This)->lpVtbl->put_CacheSize(This,size)
#define Recordset21_get_CursorType(This,cursor_type) (This)->lpVtbl->get_CursorType(This,cursor_type)
#define Recordset21_put_CursorType(This,cursor_type) (This)->lpVtbl->put_CursorType(This,cursor_type)
#define Recordset21_get_EOF(This,eof) (This)->lpVtbl->get_EOF(This,eof)
#define Recordset21_get_Fields(This,object) (This)->lpVtbl->get_Fields(This,object)
#define Recordset21_get_LockType(This,lock_type) (This)->lpVtbl->get_LockType(This,lock_type)
#define Recordset21_put_LockType(This,lock_type) (This)->lpVtbl->put_LockType(This,lock_type)
#define Recordset21_get_MaxRecords(This,max_records) (This)->lpVtbl->get_MaxRecords(This,max_records)
#define Recordset21_put_MaxRecords(This,max_records) (This)->lpVtbl->put_MaxRecords(This,max_records)
#define Recordset21_get_RecordCount(This,count) (This)->lpVtbl->get_RecordCount(This,count)
#define Recordset21_putref_Source(This,source) (This)->lpVtbl->putref_Source(This,source)
#define Recordset21_put_Source(This,source) (This)->lpVtbl->put_Source(This,source)
#define Recordset21_get_Source(This,source) (This)->lpVtbl->get_Source(This,source)
#define Recordset21_AddNew(This,field_list,values) (This)->lpVtbl->AddNew(This,field_list,values)
#define Recordset21_CancelUpdate(This) (This)->lpVtbl->CancelUpdate(This)
#define Recordset21_Close(This) (This)->lpVtbl->Close(This)
#define Recordset21_Delete(This,affect_records) (This)->lpVtbl->Delete(This,affect_records)
#define Recordset21_GetRows(This,rows,start,fields,var) (This)->lpVtbl->GetRows(This,rows,start,fields,var)
#define Recordset21_Move(This,num_records,start) (This)->lpVtbl->Move(This,num_records,start)
#define Recordset21_MoveNext(This) (This)->lpVtbl->MoveNext(This)
#define Recordset21_MovePrevious(This) (This)->lpVtbl->MovePrevious(This)
#define Recordset21_MoveFirst(This) (This)->lpVtbl->MoveFirst(This)
#define Recordset21_MoveLast(This) (This)->lpVtbl->MoveLast(This)
#define Recordset21_Open(This,source,active_connection,cursor_type,lock_type,options) (This)->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options)
#define Recordset21_Requery(This,options) (This)->lpVtbl->Requery(This,options)
#define Recordset21__xResync(This,affect_records) (This)->lpVtbl->_xResync(This,affect_records)
#define Recordset21_Update(This,fields,values) (This)->lpVtbl->Update(This,fields,values)
#define Recordset21_get_AbsolutePage(This,position) (This)->lpVtbl->get_AbsolutePage(This,position)
#define Recordset21_put_AbsolutePage(This,position) (This)->lpVtbl->put_AbsolutePage(This,position)
#define Recordset21_get_EditMode(This,mode) (This)->lpVtbl->get_EditMode(This,mode)
#define Recordset21_get_Filter(This,criteria) (This)->lpVtbl->get_Filter(This,criteria)
#define Recordset21_put_Filter(This,criteria) (This)->lpVtbl->put_Filter(This,criteria)
#define Recordset21_get_PageCount(This,count) (This)->lpVtbl->get_PageCount(This,count)
#define Recordset21_get_PageSize(This,size) (This)->lpVtbl->get_PageSize(This,size)
#define Recordset21_put_PageSize(This,size) (This)->lpVtbl->put_PageSize(This,size)
#define Recordset21_get_Sort(This,criteria) (This)->lpVtbl->get_Sort(This,criteria)
#define Recordset21_put_Sort(This,criteria) (This)->lpVtbl->put_Sort(This,criteria)
#define Recordset21_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#define Recordset21_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define Recordset21__xClone(This,object) (This)->lpVtbl->_xClone(This,object)
#define Recordset21_UpdateBatch(This,affect_records) (This)->lpVtbl->UpdateBatch(This,affect_records)
#define Recordset21_CancelBatch(This,affect_records) (This)->lpVtbl->CancelBatch(This,affect_records)
#define Recordset21_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define Recordset21_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define Recordset21_NextRecordset(This,records_affected,record_set) (This)->lpVtbl->NextRecordset(This,records_affected,record_set)
#define Recordset21_Supports(This,cursor_options,ret) (This)->lpVtbl->Supports(This,cursor_options,ret)
#define Recordset21_get_Collect(This,index,var) (This)->lpVtbl->get_Collect(This,index,var)
#define Recordset21_put_Collect(This,index,var) (This)->lpVtbl->put_Collect(This,index,var)
#define Recordset21_get_MarshalOptions(This,options) (This)->lpVtbl->get_MarshalOptions(This,options)
#define Recordset21_put_MarshalOptions(This,options) (This)->lpVtbl->put_MarshalOptions(This,options)
#define Recordset21_Find(This,criteria,skip_records,search_direction,start) (This)->lpVtbl->Find(This,criteria,skip_records,search_direction,start)
/*** Recordset20 methods ***/
#define Recordset21_Cancel(This) (This)->lpVtbl->Cancel(This)
#define Recordset21_get_DataSource(This,data_source) (This)->lpVtbl->get_DataSource(This,data_source)
#define Recordset21_putref_DataSource(This,data_source) (This)->lpVtbl->putref_DataSource(This,data_source)
#define Recordset21__xSave(This,filename,persist_format) (This)->lpVtbl->_xSave(This,filename,persist_format)
#define Recordset21_get_ActiveCommand(This,cmd) (This)->lpVtbl->get_ActiveCommand(This,cmd)
#define Recordset21_put_StayInSync(This,stay_in_sync) (This)->lpVtbl->put_StayInSync(This,stay_in_sync)
#define Recordset21_get_StayInSync(This,stay_in_sync) (This)->lpVtbl->get_StayInSync(This,stay_in_sync)
#define Recordset21_GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string) (This)->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string)
#define Recordset21_get_DataMember(This,data_member) (This)->lpVtbl->get_DataMember(This,data_member)
#define Recordset21_put_DataMember(This,data_member) (This)->lpVtbl->put_DataMember(This,data_member)
#define Recordset21_CompareBookmarks(This,bookmark1,bookmark2,compare) (This)->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare)
#define Recordset21_Clone(This,lock_type,object) (This)->lpVtbl->Clone(This,lock_type,object)
#define Recordset21_Resync(This,affect_records,resync_values) (This)->lpVtbl->Resync(This,affect_records,resync_values)
/*** Recordset21 methods ***/
#define Recordset21_Seek(This,key_values,seek_option) (This)->lpVtbl->Seek(This,key_values,seek_option)
#define Recordset21_put_Index(This,index) (This)->lpVtbl->put_Index(This,index)
#define Recordset21_get_Index(This,index) (This)->lpVtbl->get_Index(This,index)
#else
/*** IUnknown methods ***/
static inline HRESULT Recordset21_QueryInterface(Recordset21* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Recordset21_AddRef(Recordset21* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Recordset21_Release(Recordset21* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Recordset21_GetTypeInfoCount(Recordset21* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Recordset21_GetTypeInfo(Recordset21* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Recordset21_GetIDsOfNames(Recordset21* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Recordset21_Invoke(Recordset21* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Recordset21_get_Properties(Recordset21* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Recordset15 methods ***/
static inline HRESULT Recordset21_get_AbsolutePosition(Recordset21* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePosition(This,position);
}
static inline HRESULT Recordset21_put_AbsolutePosition(Recordset21* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePosition(This,position);
}
static inline HRESULT Recordset21_putref_ActiveConnection(Recordset21* This,IDispatch *connection) {
    return This->lpVtbl->putref_ActiveConnection(This,connection);
}
static inline HRESULT Recordset21_put_ActiveConnection(Recordset21* This,VARIANT connection) {
    return This->lpVtbl->put_ActiveConnection(This,connection);
}
static inline HRESULT Recordset21_get_ActiveConnection(Recordset21* This,VARIANT *connection) {
    return This->lpVtbl->get_ActiveConnection(This,connection);
}
static inline HRESULT Recordset21_get_BOF(Recordset21* This,VARIANT_BOOL *bof) {
    return This->lpVtbl->get_BOF(This,bof);
}
static inline HRESULT Recordset21_get_Bookmark(Recordset21* This,VARIANT *bookmark) {
    return This->lpVtbl->get_Bookmark(This,bookmark);
}
static inline HRESULT Recordset21_put_Bookmark(Recordset21* This,VARIANT bookmark) {
    return This->lpVtbl->put_Bookmark(This,bookmark);
}
static inline HRESULT Recordset21_get_CacheSize(Recordset21* This,LONG *size) {
    return This->lpVtbl->get_CacheSize(This,size);
}
static inline HRESULT Recordset21_put_CacheSize(Recordset21* This,LONG size) {
    return This->lpVtbl->put_CacheSize(This,size);
}
static inline HRESULT Recordset21_get_CursorType(Recordset21* This,CursorTypeEnum *cursor_type) {
    return This->lpVtbl->get_CursorType(This,cursor_type);
}
static inline HRESULT Recordset21_put_CursorType(Recordset21* This,CursorTypeEnum cursor_type) {
    return This->lpVtbl->put_CursorType(This,cursor_type);
}
static inline HRESULT Recordset21_get_EOF(Recordset21* This,VARIANT_BOOL *eof) {
    return This->lpVtbl->get_EOF(This,eof);
}
static inline HRESULT Recordset21_get_Fields(Recordset21* This,Fields **object) {
    return This->lpVtbl->get_Fields(This,object);
}
static inline HRESULT Recordset21_get_LockType(Recordset21* This,LockTypeEnum *lock_type) {
    return This->lpVtbl->get_LockType(This,lock_type);
}
static inline HRESULT Recordset21_put_LockType(Recordset21* This,LockTypeEnum lock_type) {
    return This->lpVtbl->put_LockType(This,lock_type);
}
static inline HRESULT Recordset21_get_MaxRecords(Recordset21* This,ADO_LONGPTR *max_records) {
    return This->lpVtbl->get_MaxRecords(This,max_records);
}
static inline HRESULT Recordset21_put_MaxRecords(Recordset21* This,ADO_LONGPTR max_records) {
    return This->lpVtbl->put_MaxRecords(This,max_records);
}
static inline HRESULT Recordset21_get_RecordCount(Recordset21* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_RecordCount(This,count);
}
static inline HRESULT Recordset21_putref_Source(Recordset21* This,IDispatch *source) {
    return This->lpVtbl->putref_Source(This,source);
}
static inline HRESULT Recordset21_put_Source(Recordset21* This,BSTR source) {
    return This->lpVtbl->put_Source(This,source);
}
static inline HRESULT Recordset21_get_Source(Recordset21* This,VARIANT *source) {
    return This->lpVtbl->get_Source(This,source);
}
static inline HRESULT Recordset21_AddNew(Recordset21* This,VARIANT field_list,VARIANT values) {
    return This->lpVtbl->AddNew(This,field_list,values);
}
static inline HRESULT Recordset21_CancelUpdate(Recordset21* This) {
    return This->lpVtbl->CancelUpdate(This);
}
static inline HRESULT Recordset21_Close(Recordset21* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT Recordset21_Delete(Recordset21* This,AffectEnum affect_records) {
    return This->lpVtbl->Delete(This,affect_records);
}
static inline HRESULT Recordset21_GetRows(Recordset21* This,LONG rows,VARIANT start,VARIANT fields,VARIANT *var) {
    return This->lpVtbl->GetRows(This,rows,start,fields,var);
}
static inline HRESULT Recordset21_Move(Recordset21* This,ADO_LONGPTR num_records,VARIANT start) {
    return This->lpVtbl->Move(This,num_records,start);
}
static inline HRESULT Recordset21_MoveNext(Recordset21* This) {
    return This->lpVtbl->MoveNext(This);
}
static inline HRESULT Recordset21_MovePrevious(Recordset21* This) {
    return This->lpVtbl->MovePrevious(This);
}
static inline HRESULT Recordset21_MoveFirst(Recordset21* This) {
    return This->lpVtbl->MoveFirst(This);
}
static inline HRESULT Recordset21_MoveLast(Recordset21* This) {
    return This->lpVtbl->MoveLast(This);
}
static inline HRESULT Recordset21_Open(Recordset21* This,VARIANT source,VARIANT active_connection,CursorTypeEnum cursor_type,LockTypeEnum lock_type,LONG options) {
    return This->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options);
}
static inline HRESULT Recordset21_Requery(Recordset21* This,LONG options) {
    return This->lpVtbl->Requery(This,options);
}
static inline HRESULT Recordset21__xResync(Recordset21* This,AffectEnum affect_records) {
    return This->lpVtbl->_xResync(This,affect_records);
}
static inline HRESULT Recordset21_Update(Recordset21* This,VARIANT fields,VARIANT values) {
    return This->lpVtbl->Update(This,fields,values);
}
static inline HRESULT Recordset21_get_AbsolutePage(Recordset21* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePage(This,position);
}
static inline HRESULT Recordset21_put_AbsolutePage(Recordset21* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePage(This,position);
}
static inline HRESULT Recordset21_get_EditMode(Recordset21* This,EditModeEnum *mode) {
    return This->lpVtbl->get_EditMode(This,mode);
}
static inline HRESULT Recordset21_get_Filter(Recordset21* This,VARIANT *criteria) {
    return This->lpVtbl->get_Filter(This,criteria);
}
static inline HRESULT Recordset21_put_Filter(Recordset21* This,VARIANT criteria) {
    return This->lpVtbl->put_Filter(This,criteria);
}
static inline HRESULT Recordset21_get_PageCount(Recordset21* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_PageCount(This,count);
}
static inline HRESULT Recordset21_get_PageSize(Recordset21* This,LONG *size) {
    return This->lpVtbl->get_PageSize(This,size);
}
static inline HRESULT Recordset21_put_PageSize(Recordset21* This,LONG size) {
    return This->lpVtbl->put_PageSize(This,size);
}
static inline HRESULT Recordset21_get_Sort(Recordset21* This,BSTR *criteria) {
    return This->lpVtbl->get_Sort(This,criteria);
}
static inline HRESULT Recordset21_put_Sort(Recordset21* This,BSTR criteria) {
    return This->lpVtbl->put_Sort(This,criteria);
}
static inline HRESULT Recordset21_get_Status(Recordset21* This,LONG *status) {
    return This->lpVtbl->get_Status(This,status);
}
static inline HRESULT Recordset21_get_State(Recordset21* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT Recordset21__xClone(Recordset21* This,_Recordset **object) {
    return This->lpVtbl->_xClone(This,object);
}
static inline HRESULT Recordset21_UpdateBatch(Recordset21* This,AffectEnum affect_records) {
    return This->lpVtbl->UpdateBatch(This,affect_records);
}
static inline HRESULT Recordset21_CancelBatch(Recordset21* This,AffectEnum affect_records) {
    return This->lpVtbl->CancelBatch(This,affect_records);
}
static inline HRESULT Recordset21_get_CursorLocation(Recordset21* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset21_put_CursorLocation(Recordset21* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT Recordset21_NextRecordset(Recordset21* This,VARIANT *records_affected,_Recordset **record_set) {
    return This->lpVtbl->NextRecordset(This,records_affected,record_set);
}
static inline HRESULT Recordset21_Supports(Recordset21* This,CursorOptionEnum cursor_options,VARIANT_BOOL *ret) {
    return This->lpVtbl->Supports(This,cursor_options,ret);
}
static inline HRESULT Recordset21_get_Collect(Recordset21* This,VARIANT index,VARIANT *var) {
    return This->lpVtbl->get_Collect(This,index,var);
}
static inline HRESULT Recordset21_put_Collect(Recordset21* This,VARIANT index,VARIANT var) {
    return This->lpVtbl->put_Collect(This,index,var);
}
static inline HRESULT Recordset21_get_MarshalOptions(Recordset21* This,MarshalOptionsEnum *options) {
    return This->lpVtbl->get_MarshalOptions(This,options);
}
static inline HRESULT Recordset21_put_MarshalOptions(Recordset21* This,MarshalOptionsEnum options) {
    return This->lpVtbl->put_MarshalOptions(This,options);
}
static inline HRESULT Recordset21_Find(Recordset21* This,BSTR criteria,LONG skip_records,SearchDirectionEnum search_direction,VARIANT start) {
    return This->lpVtbl->Find(This,criteria,skip_records,search_direction,start);
}
/*** Recordset20 methods ***/
static inline HRESULT Recordset21_Cancel(Recordset21* This) {
    return This->lpVtbl->Cancel(This);
}
static inline HRESULT Recordset21_get_DataSource(Recordset21* This,IUnknown **data_source) {
    return This->lpVtbl->get_DataSource(This,data_source);
}
static inline HRESULT Recordset21_putref_DataSource(Recordset21* This,IUnknown *data_source) {
    return This->lpVtbl->putref_DataSource(This,data_source);
}
static inline HRESULT Recordset21__xSave(Recordset21* This,BSTR filename,PersistFormatEnum persist_format) {
    return This->lpVtbl->_xSave(This,filename,persist_format);
}
static inline HRESULT Recordset21_get_ActiveCommand(Recordset21* This,IDispatch **cmd) {
    return This->lpVtbl->get_ActiveCommand(This,cmd);
}
static inline HRESULT Recordset21_put_StayInSync(Recordset21* This,VARIANT_BOOL stay_in_sync) {
    return This->lpVtbl->put_StayInSync(This,stay_in_sync);
}
static inline HRESULT Recordset21_get_StayInSync(Recordset21* This,VARIANT_BOOL *stay_in_sync) {
    return This->lpVtbl->get_StayInSync(This,stay_in_sync);
}
static inline HRESULT Recordset21_GetString(Recordset21* This,StringFormatEnum string_format,LONG num_rows,BSTR column_delimiter,BSTR row_delimiter,BSTR null_expr,BSTR *ret_string) {
    return This->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string);
}
static inline HRESULT Recordset21_get_DataMember(Recordset21* This,BSTR *data_member) {
    return This->lpVtbl->get_DataMember(This,data_member);
}
static inline HRESULT Recordset21_put_DataMember(Recordset21* This,BSTR data_member) {
    return This->lpVtbl->put_DataMember(This,data_member);
}
static inline HRESULT Recordset21_CompareBookmarks(Recordset21* This,VARIANT bookmark1,VARIANT bookmark2,CompareEnum *compare) {
    return This->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare);
}
static inline HRESULT Recordset21_Clone(Recordset21* This,LockTypeEnum lock_type,_Recordset **object) {
    return This->lpVtbl->Clone(This,lock_type,object);
}
static inline HRESULT Recordset21_Resync(Recordset21* This,AffectEnum affect_records,ResyncEnum resync_values) {
    return This->lpVtbl->Resync(This,affect_records,resync_values);
}
/*** Recordset21 methods ***/
static inline HRESULT Recordset21_Seek(Recordset21* This,VARIANT key_values,SeekEnum seek_option) {
    return This->lpVtbl->Seek(This,key_values,seek_option);
}
static inline HRESULT Recordset21_put_Index(Recordset21* This,BSTR index) {
    return This->lpVtbl->put_Index(This,index);
}
static inline HRESULT Recordset21_get_Index(Recordset21* This,BSTR *index) {
    return This->lpVtbl->get_Index(This,index);
}
#endif
#endif

#endif


#endif  /* __Recordset21_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Recordset interface
 */
#ifndef ___Recordset_INTERFACE_DEFINED__
#define ___Recordset_INTERFACE_DEFINED__

DEFINE_GUID(IID__Recordset, 0x00000556, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000556-0000-0010-8000-00aa006d2ea4")
_Recordset : public Recordset21
{
    virtual HRESULT STDMETHODCALLTYPE Save(
        VARIANT destination,
        PersistFormatEnum persist_format = adPersistADTG) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Recordset, 0x00000556, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _RecordsetVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Recordset *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Recordset *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Recordset *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Recordset *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Recordset *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Recordset *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Recordset *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _Recordset *This,
        Properties **object);

    /*** Recordset15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_AbsolutePosition)(
        _Recordset *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePosition)(
        _Recordset *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        _Recordset *This,
        IDispatch *connection);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        _Recordset *This,
        VARIANT connection);

    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        _Recordset *This,
        VARIANT *connection);

    HRESULT (STDMETHODCALLTYPE *get_BOF)(
        _Recordset *This,
        VARIANT_BOOL *bof);

    HRESULT (STDMETHODCALLTYPE *get_Bookmark)(
        _Recordset *This,
        VARIANT *bookmark);

    HRESULT (STDMETHODCALLTYPE *put_Bookmark)(
        _Recordset *This,
        VARIANT bookmark);

    HRESULT (STDMETHODCALLTYPE *get_CacheSize)(
        _Recordset *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_CacheSize)(
        _Recordset *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_CursorType)(
        _Recordset *This,
        CursorTypeEnum *cursor_type);

    HRESULT (STDMETHODCALLTYPE *put_CursorType)(
        _Recordset *This,
        CursorTypeEnum cursor_type);

    HRESULT (STDMETHODCALLTYPE *get_EOF)(
        _Recordset *This,
        VARIANT_BOOL *eof);

    HRESULT (STDMETHODCALLTYPE *get_Fields)(
        _Recordset *This,
        Fields **object);

    HRESULT (STDMETHODCALLTYPE *get_LockType)(
        _Recordset *This,
        LockTypeEnum *lock_type);

    HRESULT (STDMETHODCALLTYPE *put_LockType)(
        _Recordset *This,
        LockTypeEnum lock_type);

    HRESULT (STDMETHODCALLTYPE *get_MaxRecords)(
        _Recordset *This,
        ADO_LONGPTR *max_records);

    HRESULT (STDMETHODCALLTYPE *put_MaxRecords)(
        _Recordset *This,
        ADO_LONGPTR max_records);

    HRESULT (STDMETHODCALLTYPE *get_RecordCount)(
        _Recordset *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *putref_Source)(
        _Recordset *This,
        IDispatch *source);

    HRESULT (STDMETHODCALLTYPE *put_Source)(
        _Recordset *This,
        BSTR source);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        _Recordset *This,
        VARIANT *source);

    HRESULT (STDMETHODCALLTYPE *AddNew)(
        _Recordset *This,
        VARIANT field_list,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *CancelUpdate)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *Close)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        _Recordset *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *GetRows)(
        _Recordset *This,
        LONG rows,
        VARIANT start,
        VARIANT fields,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *Move)(
        _Recordset *This,
        ADO_LONGPTR num_records,
        VARIANT start);

    HRESULT (STDMETHODCALLTYPE *MoveNext)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *MovePrevious)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *MoveFirst)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *MoveLast)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        _Recordset *This,
        VARIANT source,
        VARIANT active_connection,
        CursorTypeEnum cursor_type,
        LockTypeEnum lock_type,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *Requery)(
        _Recordset *This,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *_xResync)(
        _Recordset *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *Update)(
        _Recordset *This,
        VARIANT fields,
        VARIANT values);

    HRESULT (STDMETHODCALLTYPE *get_AbsolutePage)(
        _Recordset *This,
        PositionEnum_Param *position);

    HRESULT (STDMETHODCALLTYPE *put_AbsolutePage)(
        _Recordset *This,
        PositionEnum_Param position);

    HRESULT (STDMETHODCALLTYPE *get_EditMode)(
        _Recordset *This,
        EditModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *get_Filter)(
        _Recordset *This,
        VARIANT *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Filter)(
        _Recordset *This,
        VARIANT criteria);

    HRESULT (STDMETHODCALLTYPE *get_PageCount)(
        _Recordset *This,
        ADO_LONGPTR *count);

    HRESULT (STDMETHODCALLTYPE *get_PageSize)(
        _Recordset *This,
        LONG *size);

    HRESULT (STDMETHODCALLTYPE *put_PageSize)(
        _Recordset *This,
        LONG size);

    HRESULT (STDMETHODCALLTYPE *get_Sort)(
        _Recordset *This,
        BSTR *criteria);

    HRESULT (STDMETHODCALLTYPE *put_Sort)(
        _Recordset *This,
        BSTR criteria);

    HRESULT (STDMETHODCALLTYPE *get_Status)(
        _Recordset *This,
        LONG *status);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        _Recordset *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *_xClone)(
        _Recordset *This,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *UpdateBatch)(
        _Recordset *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *CancelBatch)(
        _Recordset *This,
        AffectEnum affect_records);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        _Recordset *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        _Recordset *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *NextRecordset)(
        _Recordset *This,
        VARIANT *records_affected,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *Supports)(
        _Recordset *This,
        CursorOptionEnum cursor_options,
        VARIANT_BOOL *ret);

    HRESULT (STDMETHODCALLTYPE *get_Collect)(
        _Recordset *This,
        VARIANT index,
        VARIANT *var);

    HRESULT (STDMETHODCALLTYPE *put_Collect)(
        _Recordset *This,
        VARIANT index,
        VARIANT var);

    HRESULT (STDMETHODCALLTYPE *get_MarshalOptions)(
        _Recordset *This,
        MarshalOptionsEnum *options);

    HRESULT (STDMETHODCALLTYPE *put_MarshalOptions)(
        _Recordset *This,
        MarshalOptionsEnum options);

    HRESULT (STDMETHODCALLTYPE *Find)(
        _Recordset *This,
        BSTR criteria,
        LONG skip_records,
        SearchDirectionEnum search_direction,
        VARIANT start);

    /*** Recordset20 methods ***/
    HRESULT (STDMETHODCALLTYPE *Cancel)(
        _Recordset *This);

    HRESULT (STDMETHODCALLTYPE *get_DataSource)(
        _Recordset *This,
        IUnknown **data_source);

    HRESULT (STDMETHODCALLTYPE *putref_DataSource)(
        _Recordset *This,
        IUnknown *data_source);

    HRESULT (STDMETHODCALLTYPE *_xSave)(
        _Recordset *This,
        BSTR filename,
        PersistFormatEnum persist_format);

    HRESULT (STDMETHODCALLTYPE *get_ActiveCommand)(
        _Recordset *This,
        IDispatch **cmd);

    HRESULT (STDMETHODCALLTYPE *put_StayInSync)(
        _Recordset *This,
        VARIANT_BOOL stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *get_StayInSync)(
        _Recordset *This,
        VARIANT_BOOL *stay_in_sync);

    HRESULT (STDMETHODCALLTYPE *GetString)(
        _Recordset *This,
        StringFormatEnum string_format,
        LONG num_rows,
        BSTR column_delimiter,
        BSTR row_delimiter,
        BSTR null_expr,
        BSTR *ret_string);

    HRESULT (STDMETHODCALLTYPE *get_DataMember)(
        _Recordset *This,
        BSTR *data_member);

    HRESULT (STDMETHODCALLTYPE *put_DataMember)(
        _Recordset *This,
        BSTR data_member);

    HRESULT (STDMETHODCALLTYPE *CompareBookmarks)(
        _Recordset *This,
        VARIANT bookmark1,
        VARIANT bookmark2,
        CompareEnum *compare);

    HRESULT (STDMETHODCALLTYPE *Clone)(
        _Recordset *This,
        LockTypeEnum lock_type,
        _Recordset **object);

    HRESULT (STDMETHODCALLTYPE *Resync)(
        _Recordset *This,
        AffectEnum affect_records,
        ResyncEnum resync_values);

    /*** Recordset21 methods ***/
    HRESULT (STDMETHODCALLTYPE *Seek)(
        _Recordset *This,
        VARIANT key_values,
        SeekEnum seek_option);

    HRESULT (STDMETHODCALLTYPE *put_Index)(
        _Recordset *This,
        BSTR index);

    HRESULT (STDMETHODCALLTYPE *get_Index)(
        _Recordset *This,
        BSTR *index);

    /*** _Recordset methods ***/
    HRESULT (STDMETHODCALLTYPE *Save)(
        _Recordset *This,
        VARIANT destination,
        PersistFormatEnum persist_format);

    END_INTERFACE
} _RecordsetVtbl;

interface _Recordset {
    CONST_VTBL _RecordsetVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Recordset_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Recordset_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Recordset_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Recordset_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Recordset_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Recordset_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Recordset_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _Recordset_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Recordset15 methods ***/
#define _Recordset_get_AbsolutePosition(This,position) (This)->lpVtbl->get_AbsolutePosition(This,position)
#define _Recordset_put_AbsolutePosition(This,position) (This)->lpVtbl->put_AbsolutePosition(This,position)
#define _Recordset_putref_ActiveConnection(This,connection) (This)->lpVtbl->putref_ActiveConnection(This,connection)
#define _Recordset_put_ActiveConnection(This,connection) (This)->lpVtbl->put_ActiveConnection(This,connection)
#define _Recordset_get_ActiveConnection(This,connection) (This)->lpVtbl->get_ActiveConnection(This,connection)
#define _Recordset_get_BOF(This,bof) (This)->lpVtbl->get_BOF(This,bof)
#define _Recordset_get_Bookmark(This,bookmark) (This)->lpVtbl->get_Bookmark(This,bookmark)
#define _Recordset_put_Bookmark(This,bookmark) (This)->lpVtbl->put_Bookmark(This,bookmark)
#define _Recordset_get_CacheSize(This,size) (This)->lpVtbl->get_CacheSize(This,size)
#define _Recordset_put_CacheSize(This,size) (This)->lpVtbl->put_CacheSize(This,size)
#define _Recordset_get_CursorType(This,cursor_type) (This)->lpVtbl->get_CursorType(This,cursor_type)
#define _Recordset_put_CursorType(This,cursor_type) (This)->lpVtbl->put_CursorType(This,cursor_type)
#define _Recordset_get_EOF(This,eof) (This)->lpVtbl->get_EOF(This,eof)
#define _Recordset_get_Fields(This,object) (This)->lpVtbl->get_Fields(This,object)
#define _Recordset_get_LockType(This,lock_type) (This)->lpVtbl->get_LockType(This,lock_type)
#define _Recordset_put_LockType(This,lock_type) (This)->lpVtbl->put_LockType(This,lock_type)
#define _Recordset_get_MaxRecords(This,max_records) (This)->lpVtbl->get_MaxRecords(This,max_records)
#define _Recordset_put_MaxRecords(This,max_records) (This)->lpVtbl->put_MaxRecords(This,max_records)
#define _Recordset_get_RecordCount(This,count) (This)->lpVtbl->get_RecordCount(This,count)
#define _Recordset_putref_Source(This,source) (This)->lpVtbl->putref_Source(This,source)
#define _Recordset_put_Source(This,source) (This)->lpVtbl->put_Source(This,source)
#define _Recordset_get_Source(This,source) (This)->lpVtbl->get_Source(This,source)
#define _Recordset_AddNew(This,field_list,values) (This)->lpVtbl->AddNew(This,field_list,values)
#define _Recordset_CancelUpdate(This) (This)->lpVtbl->CancelUpdate(This)
#define _Recordset_Close(This) (This)->lpVtbl->Close(This)
#define _Recordset_Delete(This,affect_records) (This)->lpVtbl->Delete(This,affect_records)
#define _Recordset_GetRows(This,rows,start,fields,var) (This)->lpVtbl->GetRows(This,rows,start,fields,var)
#define _Recordset_Move(This,num_records,start) (This)->lpVtbl->Move(This,num_records,start)
#define _Recordset_MoveNext(This) (This)->lpVtbl->MoveNext(This)
#define _Recordset_MovePrevious(This) (This)->lpVtbl->MovePrevious(This)
#define _Recordset_MoveFirst(This) (This)->lpVtbl->MoveFirst(This)
#define _Recordset_MoveLast(This) (This)->lpVtbl->MoveLast(This)
#define _Recordset_Open(This,source,active_connection,cursor_type,lock_type,options) (This)->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options)
#define _Recordset_Requery(This,options) (This)->lpVtbl->Requery(This,options)
#define _Recordset__xResync(This,affect_records) (This)->lpVtbl->_xResync(This,affect_records)
#define _Recordset_Update(This,fields,values) (This)->lpVtbl->Update(This,fields,values)
#define _Recordset_get_AbsolutePage(This,position) (This)->lpVtbl->get_AbsolutePage(This,position)
#define _Recordset_put_AbsolutePage(This,position) (This)->lpVtbl->put_AbsolutePage(This,position)
#define _Recordset_get_EditMode(This,mode) (This)->lpVtbl->get_EditMode(This,mode)
#define _Recordset_get_Filter(This,criteria) (This)->lpVtbl->get_Filter(This,criteria)
#define _Recordset_put_Filter(This,criteria) (This)->lpVtbl->put_Filter(This,criteria)
#define _Recordset_get_PageCount(This,count) (This)->lpVtbl->get_PageCount(This,count)
#define _Recordset_get_PageSize(This,size) (This)->lpVtbl->get_PageSize(This,size)
#define _Recordset_put_PageSize(This,size) (This)->lpVtbl->put_PageSize(This,size)
#define _Recordset_get_Sort(This,criteria) (This)->lpVtbl->get_Sort(This,criteria)
#define _Recordset_put_Sort(This,criteria) (This)->lpVtbl->put_Sort(This,criteria)
#define _Recordset_get_Status(This,status) (This)->lpVtbl->get_Status(This,status)
#define _Recordset_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define _Recordset__xClone(This,object) (This)->lpVtbl->_xClone(This,object)
#define _Recordset_UpdateBatch(This,affect_records) (This)->lpVtbl->UpdateBatch(This,affect_records)
#define _Recordset_CancelBatch(This,affect_records) (This)->lpVtbl->CancelBatch(This,affect_records)
#define _Recordset_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define _Recordset_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define _Recordset_NextRecordset(This,records_affected,record_set) (This)->lpVtbl->NextRecordset(This,records_affected,record_set)
#define _Recordset_Supports(This,cursor_options,ret) (This)->lpVtbl->Supports(This,cursor_options,ret)
#define _Recordset_get_Collect(This,index,var) (This)->lpVtbl->get_Collect(This,index,var)
#define _Recordset_put_Collect(This,index,var) (This)->lpVtbl->put_Collect(This,index,var)
#define _Recordset_get_MarshalOptions(This,options) (This)->lpVtbl->get_MarshalOptions(This,options)
#define _Recordset_put_MarshalOptions(This,options) (This)->lpVtbl->put_MarshalOptions(This,options)
#define _Recordset_Find(This,criteria,skip_records,search_direction,start) (This)->lpVtbl->Find(This,criteria,skip_records,search_direction,start)
/*** Recordset20 methods ***/
#define _Recordset_Cancel(This) (This)->lpVtbl->Cancel(This)
#define _Recordset_get_DataSource(This,data_source) (This)->lpVtbl->get_DataSource(This,data_source)
#define _Recordset_putref_DataSource(This,data_source) (This)->lpVtbl->putref_DataSource(This,data_source)
#define _Recordset__xSave(This,filename,persist_format) (This)->lpVtbl->_xSave(This,filename,persist_format)
#define _Recordset_get_ActiveCommand(This,cmd) (This)->lpVtbl->get_ActiveCommand(This,cmd)
#define _Recordset_put_StayInSync(This,stay_in_sync) (This)->lpVtbl->put_StayInSync(This,stay_in_sync)
#define _Recordset_get_StayInSync(This,stay_in_sync) (This)->lpVtbl->get_StayInSync(This,stay_in_sync)
#define _Recordset_GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string) (This)->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string)
#define _Recordset_get_DataMember(This,data_member) (This)->lpVtbl->get_DataMember(This,data_member)
#define _Recordset_put_DataMember(This,data_member) (This)->lpVtbl->put_DataMember(This,data_member)
#define _Recordset_CompareBookmarks(This,bookmark1,bookmark2,compare) (This)->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare)
#define _Recordset_Clone(This,lock_type,object) (This)->lpVtbl->Clone(This,lock_type,object)
#define _Recordset_Resync(This,affect_records,resync_values) (This)->lpVtbl->Resync(This,affect_records,resync_values)
/*** Recordset21 methods ***/
#define _Recordset_Seek(This,key_values,seek_option) (This)->lpVtbl->Seek(This,key_values,seek_option)
#define _Recordset_put_Index(This,index) (This)->lpVtbl->put_Index(This,index)
#define _Recordset_get_Index(This,index) (This)->lpVtbl->get_Index(This,index)
/*** _Recordset methods ***/
#define _Recordset_Save(This,destination,persist_format) (This)->lpVtbl->Save(This,destination,persist_format)
#else
/*** IUnknown methods ***/
static inline HRESULT _Recordset_QueryInterface(_Recordset* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Recordset_AddRef(_Recordset* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Recordset_Release(_Recordset* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Recordset_GetTypeInfoCount(_Recordset* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Recordset_GetTypeInfo(_Recordset* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Recordset_GetIDsOfNames(_Recordset* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Recordset_Invoke(_Recordset* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _Recordset_get_Properties(_Recordset* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Recordset15 methods ***/
static inline HRESULT _Recordset_get_AbsolutePosition(_Recordset* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePosition(This,position);
}
static inline HRESULT _Recordset_put_AbsolutePosition(_Recordset* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePosition(This,position);
}
static inline HRESULT _Recordset_putref_ActiveConnection(_Recordset* This,IDispatch *connection) {
    return This->lpVtbl->putref_ActiveConnection(This,connection);
}
static inline HRESULT _Recordset_put_ActiveConnection(_Recordset* This,VARIANT connection) {
    return This->lpVtbl->put_ActiveConnection(This,connection);
}
static inline HRESULT _Recordset_get_ActiveConnection(_Recordset* This,VARIANT *connection) {
    return This->lpVtbl->get_ActiveConnection(This,connection);
}
static inline HRESULT _Recordset_get_BOF(_Recordset* This,VARIANT_BOOL *bof) {
    return This->lpVtbl->get_BOF(This,bof);
}
static inline HRESULT _Recordset_get_Bookmark(_Recordset* This,VARIANT *bookmark) {
    return This->lpVtbl->get_Bookmark(This,bookmark);
}
static inline HRESULT _Recordset_put_Bookmark(_Recordset* This,VARIANT bookmark) {
    return This->lpVtbl->put_Bookmark(This,bookmark);
}
static inline HRESULT _Recordset_get_CacheSize(_Recordset* This,LONG *size) {
    return This->lpVtbl->get_CacheSize(This,size);
}
static inline HRESULT _Recordset_put_CacheSize(_Recordset* This,LONG size) {
    return This->lpVtbl->put_CacheSize(This,size);
}
static inline HRESULT _Recordset_get_CursorType(_Recordset* This,CursorTypeEnum *cursor_type) {
    return This->lpVtbl->get_CursorType(This,cursor_type);
}
static inline HRESULT _Recordset_put_CursorType(_Recordset* This,CursorTypeEnum cursor_type) {
    return This->lpVtbl->put_CursorType(This,cursor_type);
}
static inline HRESULT _Recordset_get_EOF(_Recordset* This,VARIANT_BOOL *eof) {
    return This->lpVtbl->get_EOF(This,eof);
}
static inline HRESULT _Recordset_get_Fields(_Recordset* This,Fields **object) {
    return This->lpVtbl->get_Fields(This,object);
}
static inline HRESULT _Recordset_get_LockType(_Recordset* This,LockTypeEnum *lock_type) {
    return This->lpVtbl->get_LockType(This,lock_type);
}
static inline HRESULT _Recordset_put_LockType(_Recordset* This,LockTypeEnum lock_type) {
    return This->lpVtbl->put_LockType(This,lock_type);
}
static inline HRESULT _Recordset_get_MaxRecords(_Recordset* This,ADO_LONGPTR *max_records) {
    return This->lpVtbl->get_MaxRecords(This,max_records);
}
static inline HRESULT _Recordset_put_MaxRecords(_Recordset* This,ADO_LONGPTR max_records) {
    return This->lpVtbl->put_MaxRecords(This,max_records);
}
static inline HRESULT _Recordset_get_RecordCount(_Recordset* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_RecordCount(This,count);
}
static inline HRESULT _Recordset_putref_Source(_Recordset* This,IDispatch *source) {
    return This->lpVtbl->putref_Source(This,source);
}
static inline HRESULT _Recordset_put_Source(_Recordset* This,BSTR source) {
    return This->lpVtbl->put_Source(This,source);
}
static inline HRESULT _Recordset_get_Source(_Recordset* This,VARIANT *source) {
    return This->lpVtbl->get_Source(This,source);
}
static inline HRESULT _Recordset_AddNew(_Recordset* This,VARIANT field_list,VARIANT values) {
    return This->lpVtbl->AddNew(This,field_list,values);
}
static inline HRESULT _Recordset_CancelUpdate(_Recordset* This) {
    return This->lpVtbl->CancelUpdate(This);
}
static inline HRESULT _Recordset_Close(_Recordset* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT _Recordset_Delete(_Recordset* This,AffectEnum affect_records) {
    return This->lpVtbl->Delete(This,affect_records);
}
static inline HRESULT _Recordset_GetRows(_Recordset* This,LONG rows,VARIANT start,VARIANT fields,VARIANT *var) {
    return This->lpVtbl->GetRows(This,rows,start,fields,var);
}
static inline HRESULT _Recordset_Move(_Recordset* This,ADO_LONGPTR num_records,VARIANT start) {
    return This->lpVtbl->Move(This,num_records,start);
}
static inline HRESULT _Recordset_MoveNext(_Recordset* This) {
    return This->lpVtbl->MoveNext(This);
}
static inline HRESULT _Recordset_MovePrevious(_Recordset* This) {
    return This->lpVtbl->MovePrevious(This);
}
static inline HRESULT _Recordset_MoveFirst(_Recordset* This) {
    return This->lpVtbl->MoveFirst(This);
}
static inline HRESULT _Recordset_MoveLast(_Recordset* This) {
    return This->lpVtbl->MoveLast(This);
}
static inline HRESULT _Recordset_Open(_Recordset* This,VARIANT source,VARIANT active_connection,CursorTypeEnum cursor_type,LockTypeEnum lock_type,LONG options) {
    return This->lpVtbl->Open(This,source,active_connection,cursor_type,lock_type,options);
}
static inline HRESULT _Recordset_Requery(_Recordset* This,LONG options) {
    return This->lpVtbl->Requery(This,options);
}
static inline HRESULT _Recordset__xResync(_Recordset* This,AffectEnum affect_records) {
    return This->lpVtbl->_xResync(This,affect_records);
}
static inline HRESULT _Recordset_Update(_Recordset* This,VARIANT fields,VARIANT values) {
    return This->lpVtbl->Update(This,fields,values);
}
static inline HRESULT _Recordset_get_AbsolutePage(_Recordset* This,PositionEnum_Param *position) {
    return This->lpVtbl->get_AbsolutePage(This,position);
}
static inline HRESULT _Recordset_put_AbsolutePage(_Recordset* This,PositionEnum_Param position) {
    return This->lpVtbl->put_AbsolutePage(This,position);
}
static inline HRESULT _Recordset_get_EditMode(_Recordset* This,EditModeEnum *mode) {
    return This->lpVtbl->get_EditMode(This,mode);
}
static inline HRESULT _Recordset_get_Filter(_Recordset* This,VARIANT *criteria) {
    return This->lpVtbl->get_Filter(This,criteria);
}
static inline HRESULT _Recordset_put_Filter(_Recordset* This,VARIANT criteria) {
    return This->lpVtbl->put_Filter(This,criteria);
}
static inline HRESULT _Recordset_get_PageCount(_Recordset* This,ADO_LONGPTR *count) {
    return This->lpVtbl->get_PageCount(This,count);
}
static inline HRESULT _Recordset_get_PageSize(_Recordset* This,LONG *size) {
    return This->lpVtbl->get_PageSize(This,size);
}
static inline HRESULT _Recordset_put_PageSize(_Recordset* This,LONG size) {
    return This->lpVtbl->put_PageSize(This,size);
}
static inline HRESULT _Recordset_get_Sort(_Recordset* This,BSTR *criteria) {
    return This->lpVtbl->get_Sort(This,criteria);
}
static inline HRESULT _Recordset_put_Sort(_Recordset* This,BSTR criteria) {
    return This->lpVtbl->put_Sort(This,criteria);
}
static inline HRESULT _Recordset_get_Status(_Recordset* This,LONG *status) {
    return This->lpVtbl->get_Status(This,status);
}
static inline HRESULT _Recordset_get_State(_Recordset* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT _Recordset__xClone(_Recordset* This,_Recordset **object) {
    return This->lpVtbl->_xClone(This,object);
}
static inline HRESULT _Recordset_UpdateBatch(_Recordset* This,AffectEnum affect_records) {
    return This->lpVtbl->UpdateBatch(This,affect_records);
}
static inline HRESULT _Recordset_CancelBatch(_Recordset* This,AffectEnum affect_records) {
    return This->lpVtbl->CancelBatch(This,affect_records);
}
static inline HRESULT _Recordset_get_CursorLocation(_Recordset* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT _Recordset_put_CursorLocation(_Recordset* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT _Recordset_NextRecordset(_Recordset* This,VARIANT *records_affected,_Recordset **record_set) {
    return This->lpVtbl->NextRecordset(This,records_affected,record_set);
}
static inline HRESULT _Recordset_Supports(_Recordset* This,CursorOptionEnum cursor_options,VARIANT_BOOL *ret) {
    return This->lpVtbl->Supports(This,cursor_options,ret);
}
static inline HRESULT _Recordset_get_Collect(_Recordset* This,VARIANT index,VARIANT *var) {
    return This->lpVtbl->get_Collect(This,index,var);
}
static inline HRESULT _Recordset_put_Collect(_Recordset* This,VARIANT index,VARIANT var) {
    return This->lpVtbl->put_Collect(This,index,var);
}
static inline HRESULT _Recordset_get_MarshalOptions(_Recordset* This,MarshalOptionsEnum *options) {
    return This->lpVtbl->get_MarshalOptions(This,options);
}
static inline HRESULT _Recordset_put_MarshalOptions(_Recordset* This,MarshalOptionsEnum options) {
    return This->lpVtbl->put_MarshalOptions(This,options);
}
static inline HRESULT _Recordset_Find(_Recordset* This,BSTR criteria,LONG skip_records,SearchDirectionEnum search_direction,VARIANT start) {
    return This->lpVtbl->Find(This,criteria,skip_records,search_direction,start);
}
/*** Recordset20 methods ***/
static inline HRESULT _Recordset_Cancel(_Recordset* This) {
    return This->lpVtbl->Cancel(This);
}
static inline HRESULT _Recordset_get_DataSource(_Recordset* This,IUnknown **data_source) {
    return This->lpVtbl->get_DataSource(This,data_source);
}
static inline HRESULT _Recordset_putref_DataSource(_Recordset* This,IUnknown *data_source) {
    return This->lpVtbl->putref_DataSource(This,data_source);
}
static inline HRESULT _Recordset__xSave(_Recordset* This,BSTR filename,PersistFormatEnum persist_format) {
    return This->lpVtbl->_xSave(This,filename,persist_format);
}
static inline HRESULT _Recordset_get_ActiveCommand(_Recordset* This,IDispatch **cmd) {
    return This->lpVtbl->get_ActiveCommand(This,cmd);
}
static inline HRESULT _Recordset_put_StayInSync(_Recordset* This,VARIANT_BOOL stay_in_sync) {
    return This->lpVtbl->put_StayInSync(This,stay_in_sync);
}
static inline HRESULT _Recordset_get_StayInSync(_Recordset* This,VARIANT_BOOL *stay_in_sync) {
    return This->lpVtbl->get_StayInSync(This,stay_in_sync);
}
static inline HRESULT _Recordset_GetString(_Recordset* This,StringFormatEnum string_format,LONG num_rows,BSTR column_delimiter,BSTR row_delimiter,BSTR null_expr,BSTR *ret_string) {
    return This->lpVtbl->GetString(This,string_format,num_rows,column_delimiter,row_delimiter,null_expr,ret_string);
}
static inline HRESULT _Recordset_get_DataMember(_Recordset* This,BSTR *data_member) {
    return This->lpVtbl->get_DataMember(This,data_member);
}
static inline HRESULT _Recordset_put_DataMember(_Recordset* This,BSTR data_member) {
    return This->lpVtbl->put_DataMember(This,data_member);
}
static inline HRESULT _Recordset_CompareBookmarks(_Recordset* This,VARIANT bookmark1,VARIANT bookmark2,CompareEnum *compare) {
    return This->lpVtbl->CompareBookmarks(This,bookmark1,bookmark2,compare);
}
static inline HRESULT _Recordset_Clone(_Recordset* This,LockTypeEnum lock_type,_Recordset **object) {
    return This->lpVtbl->Clone(This,lock_type,object);
}
static inline HRESULT _Recordset_Resync(_Recordset* This,AffectEnum affect_records,ResyncEnum resync_values) {
    return This->lpVtbl->Resync(This,affect_records,resync_values);
}
/*** Recordset21 methods ***/
static inline HRESULT _Recordset_Seek(_Recordset* This,VARIANT key_values,SeekEnum seek_option) {
    return This->lpVtbl->Seek(This,key_values,seek_option);
}
static inline HRESULT _Recordset_put_Index(_Recordset* This,BSTR index) {
    return This->lpVtbl->put_Index(This,index);
}
static inline HRESULT _Recordset_get_Index(_Recordset* This,BSTR *index) {
    return This->lpVtbl->get_Index(This,index);
}
/*** _Recordset methods ***/
static inline HRESULT _Recordset_Save(_Recordset* This,VARIANT destination,PersistFormatEnum persist_format) {
    return This->lpVtbl->Save(This,destination,persist_format);
}
#endif
#endif

#endif


#endif  /* ___Recordset_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Error interface
 */
#ifndef __Error_INTERFACE_DEFINED__
#define __Error_INTERFACE_DEFINED__

DEFINE_GUID(IID_Error, 0x00000500, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000500-0000-0010-8000-00aa006d2ea4")
Error : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Number(
        LONG *number) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Source(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Description(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_HelpFile(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_HelpContext(
        LONG *ctx) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_SQLState(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NativeError(
        LONG *error) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Error, 0x00000500, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ErrorVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Error *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Error *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Error *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Error *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Error *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Error *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Error *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** Error methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Number)(
        Error *This,
        LONG *number);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        Error *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_Description)(
        Error *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_HelpFile)(
        Error *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_HelpContext)(
        Error *This,
        LONG *ctx);

    HRESULT (STDMETHODCALLTYPE *get_SQLState)(
        Error *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *get_NativeError)(
        Error *This,
        LONG *error);

    END_INTERFACE
} ErrorVtbl;

interface Error {
    CONST_VTBL ErrorVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Error_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Error_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Error_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Error_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Error_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Error_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Error_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** Error methods ***/
#define Error_get_Number(This,number) (This)->lpVtbl->get_Number(This,number)
#define Error_get_Source(This,str) (This)->lpVtbl->get_Source(This,str)
#define Error_get_Description(This,str) (This)->lpVtbl->get_Description(This,str)
#define Error_get_HelpFile(This,str) (This)->lpVtbl->get_HelpFile(This,str)
#define Error_get_HelpContext(This,ctx) (This)->lpVtbl->get_HelpContext(This,ctx)
#define Error_get_SQLState(This,str) (This)->lpVtbl->get_SQLState(This,str)
#define Error_get_NativeError(This,error) (This)->lpVtbl->get_NativeError(This,error)
#else
/*** IUnknown methods ***/
static inline HRESULT Error_QueryInterface(Error* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Error_AddRef(Error* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Error_Release(Error* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Error_GetTypeInfoCount(Error* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Error_GetTypeInfo(Error* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Error_GetIDsOfNames(Error* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Error_Invoke(Error* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** Error methods ***/
static inline HRESULT Error_get_Number(Error* This,LONG *number) {
    return This->lpVtbl->get_Number(This,number);
}
static inline HRESULT Error_get_Source(Error* This,BSTR *str) {
    return This->lpVtbl->get_Source(This,str);
}
static inline HRESULT Error_get_Description(Error* This,BSTR *str) {
    return This->lpVtbl->get_Description(This,str);
}
static inline HRESULT Error_get_HelpFile(Error* This,BSTR *str) {
    return This->lpVtbl->get_HelpFile(This,str);
}
static inline HRESULT Error_get_HelpContext(Error* This,LONG *ctx) {
    return This->lpVtbl->get_HelpContext(This,ctx);
}
static inline HRESULT Error_get_SQLState(Error* This,BSTR *str) {
    return This->lpVtbl->get_SQLState(This,str);
}
static inline HRESULT Error_get_NativeError(Error* This,LONG *error) {
    return This->lpVtbl->get_NativeError(This,error);
}
#endif
#endif

#endif


#endif  /* __Error_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Errors interface
 */
#ifndef __Errors_INTERFACE_DEFINED__
#define __Errors_INTERFACE_DEFINED__

DEFINE_GUID(IID_Errors, 0x00000501, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000501-0000-0010-8000-00aa006d2ea4")
Errors : public _Collection
{
    virtual HRESULT STDMETHODCALLTYPE get_Item(
        VARIANT index,
        Error **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Clear(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Errors, 0x00000501, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ErrorsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Errors *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Errors *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Errors *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Errors *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Errors *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Errors *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Errors *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Errors *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Errors *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Errors *This);

    /*** Errors methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Errors *This,
        VARIANT index,
        Error **object);

    HRESULT (STDMETHODCALLTYPE *Clear)(
        Errors *This);

    END_INTERFACE
} ErrorsVtbl;

interface Errors {
    CONST_VTBL ErrorsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Errors_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Errors_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Errors_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Errors_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Errors_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Errors_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Errors_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Errors_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Errors__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Errors_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** Errors methods ***/
#define Errors_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
#define Errors_Clear(This) (This)->lpVtbl->Clear(This)
#else
/*** IUnknown methods ***/
static inline HRESULT Errors_QueryInterface(Errors* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Errors_AddRef(Errors* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Errors_Release(Errors* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Errors_GetTypeInfoCount(Errors* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Errors_GetTypeInfo(Errors* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Errors_GetIDsOfNames(Errors* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Errors_Invoke(Errors* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Errors_get_Count(Errors* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Errors__NewEnum(Errors* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Errors_Refresh(Errors* This) {
    return This->lpVtbl->Refresh(This);
}
/*** Errors methods ***/
static inline HRESULT Errors_get_Item(Errors* This,VARIANT index,Error **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
static inline HRESULT Errors_Clear(Errors* This) {
    return This->lpVtbl->Clear(This);
}
#endif
#endif

#endif


#endif  /* __Errors_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Connection15 interface
 */
#ifndef __Connection15_INTERFACE_DEFINED__
#define __Connection15_INTERFACE_DEFINED__

DEFINE_GUID(IID_Connection15, 0x00000515, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000515-0000-0010-8000-00aa006d2ea4")
Connection15 : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_ConnectionString(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ConnectionString(
        BSTR str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CommandTimeout(
        LONG *timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CommandTimeout(
        LONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ConnectionTimeout(
        LONG *timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ConnectionTimeout(
        LONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Version(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Execute(
        BSTR command,
        VARIANT *records_affected,
        LONG options,
        _Recordset **record_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginTrans(
        LONG *transaction_level) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommitTrans(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE RollbackTrans(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Open(
        BSTR connection_str = L"",
        BSTR user_id = L"",
        BSTR password = L"",
        LONG options = -1) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Errors(
        Errors **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_DefaultDatabase(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_DefaultDatabase(
        BSTR str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_IsolationLevel(
        IsolationLevelEnum *level) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_IsolationLevel(
        IsolationLevelEnum level) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Attributes(
        LONG *attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Attributes(
        LONG attr) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CursorLocation(
        CursorLocationEnum *cursor_loc) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CursorLocation(
        CursorLocationEnum cursor_loc) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Mode(
        ConnectModeEnum *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Mode(
        ConnectModeEnum mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Provider(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Provider(
        BSTR str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        LONG *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE OpenSchema(
        SchemaEnum schema,
        VARIANT restrictions,
        VARIANT schema_id,
        _Recordset **record_set) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Connection15, 0x00000515, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Connection15Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Connection15 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Connection15 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Connection15 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Connection15 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Connection15 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Connection15 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Connection15 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Connection15 *This,
        Properties **object);

    /*** Connection15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ConnectionString)(
        Connection15 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_ConnectionString)(
        Connection15 *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_CommandTimeout)(
        Connection15 *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_CommandTimeout)(
        Connection15 *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_ConnectionTimeout)(
        Connection15 *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_ConnectionTimeout)(
        Connection15 *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_Version)(
        Connection15 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *Close)(
        Connection15 *This);

    HRESULT (STDMETHODCALLTYPE *Execute)(
        Connection15 *This,
        BSTR command,
        VARIANT *records_affected,
        LONG options,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *BeginTrans)(
        Connection15 *This,
        LONG *transaction_level);

    HRESULT (STDMETHODCALLTYPE *CommitTrans)(
        Connection15 *This);

    HRESULT (STDMETHODCALLTYPE *RollbackTrans)(
        Connection15 *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        Connection15 *This,
        BSTR connection_str,
        BSTR user_id,
        BSTR password,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *get_Errors)(
        Connection15 *This,
        Errors **object);

    HRESULT (STDMETHODCALLTYPE *get_DefaultDatabase)(
        Connection15 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_DefaultDatabase)(
        Connection15 *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_IsolationLevel)(
        Connection15 *This,
        IsolationLevelEnum *level);

    HRESULT (STDMETHODCALLTYPE *put_IsolationLevel)(
        Connection15 *This,
        IsolationLevelEnum level);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        Connection15 *This,
        LONG *attr);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        Connection15 *This,
        LONG attr);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        Connection15 *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        Connection15 *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        Connection15 *This,
        ConnectModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        Connection15 *This,
        ConnectModeEnum mode);

    HRESULT (STDMETHODCALLTYPE *get_Provider)(
        Connection15 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_Provider)(
        Connection15 *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        Connection15 *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *OpenSchema)(
        Connection15 *This,
        SchemaEnum schema,
        VARIANT restrictions,
        VARIANT schema_id,
        _Recordset **record_set);

    END_INTERFACE
} Connection15Vtbl;

interface Connection15 {
    CONST_VTBL Connection15Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Connection15_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Connection15_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Connection15_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Connection15_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Connection15_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Connection15_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Connection15_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Connection15_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Connection15 methods ***/
#define Connection15_get_ConnectionString(This,str) (This)->lpVtbl->get_ConnectionString(This,str)
#define Connection15_put_ConnectionString(This,str) (This)->lpVtbl->put_ConnectionString(This,str)
#define Connection15_get_CommandTimeout(This,timeout) (This)->lpVtbl->get_CommandTimeout(This,timeout)
#define Connection15_put_CommandTimeout(This,timeout) (This)->lpVtbl->put_CommandTimeout(This,timeout)
#define Connection15_get_ConnectionTimeout(This,timeout) (This)->lpVtbl->get_ConnectionTimeout(This,timeout)
#define Connection15_put_ConnectionTimeout(This,timeout) (This)->lpVtbl->put_ConnectionTimeout(This,timeout)
#define Connection15_get_Version(This,str) (This)->lpVtbl->get_Version(This,str)
#define Connection15_Close(This) (This)->lpVtbl->Close(This)
#define Connection15_Execute(This,command,records_affected,options,record_set) (This)->lpVtbl->Execute(This,command,records_affected,options,record_set)
#define Connection15_BeginTrans(This,transaction_level) (This)->lpVtbl->BeginTrans(This,transaction_level)
#define Connection15_CommitTrans(This) (This)->lpVtbl->CommitTrans(This)
#define Connection15_RollbackTrans(This) (This)->lpVtbl->RollbackTrans(This)
#define Connection15_Open(This,connection_str,user_id,password,options) (This)->lpVtbl->Open(This,connection_str,user_id,password,options)
#define Connection15_get_Errors(This,object) (This)->lpVtbl->get_Errors(This,object)
#define Connection15_get_DefaultDatabase(This,str) (This)->lpVtbl->get_DefaultDatabase(This,str)
#define Connection15_put_DefaultDatabase(This,str) (This)->lpVtbl->put_DefaultDatabase(This,str)
#define Connection15_get_IsolationLevel(This,level) (This)->lpVtbl->get_IsolationLevel(This,level)
#define Connection15_put_IsolationLevel(This,level) (This)->lpVtbl->put_IsolationLevel(This,level)
#define Connection15_get_Attributes(This,attr) (This)->lpVtbl->get_Attributes(This,attr)
#define Connection15_put_Attributes(This,attr) (This)->lpVtbl->put_Attributes(This,attr)
#define Connection15_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define Connection15_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define Connection15_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define Connection15_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define Connection15_get_Provider(This,str) (This)->lpVtbl->get_Provider(This,str)
#define Connection15_put_Provider(This,str) (This)->lpVtbl->put_Provider(This,str)
#define Connection15_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define Connection15_OpenSchema(This,schema,restrictions,schema_id,record_set) (This)->lpVtbl->OpenSchema(This,schema,restrictions,schema_id,record_set)
#else
/*** IUnknown methods ***/
static inline HRESULT Connection15_QueryInterface(Connection15* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Connection15_AddRef(Connection15* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Connection15_Release(Connection15* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Connection15_GetTypeInfoCount(Connection15* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Connection15_GetTypeInfo(Connection15* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Connection15_GetIDsOfNames(Connection15* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Connection15_Invoke(Connection15* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Connection15_get_Properties(Connection15* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Connection15 methods ***/
static inline HRESULT Connection15_get_ConnectionString(Connection15* This,BSTR *str) {
    return This->lpVtbl->get_ConnectionString(This,str);
}
static inline HRESULT Connection15_put_ConnectionString(Connection15* This,BSTR str) {
    return This->lpVtbl->put_ConnectionString(This,str);
}
static inline HRESULT Connection15_get_CommandTimeout(Connection15* This,LONG *timeout) {
    return This->lpVtbl->get_CommandTimeout(This,timeout);
}
static inline HRESULT Connection15_put_CommandTimeout(Connection15* This,LONG timeout) {
    return This->lpVtbl->put_CommandTimeout(This,timeout);
}
static inline HRESULT Connection15_get_ConnectionTimeout(Connection15* This,LONG *timeout) {
    return This->lpVtbl->get_ConnectionTimeout(This,timeout);
}
static inline HRESULT Connection15_put_ConnectionTimeout(Connection15* This,LONG timeout) {
    return This->lpVtbl->put_ConnectionTimeout(This,timeout);
}
static inline HRESULT Connection15_get_Version(Connection15* This,BSTR *str) {
    return This->lpVtbl->get_Version(This,str);
}
static inline HRESULT Connection15_Close(Connection15* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT Connection15_Execute(Connection15* This,BSTR command,VARIANT *records_affected,LONG options,_Recordset **record_set) {
    return This->lpVtbl->Execute(This,command,records_affected,options,record_set);
}
static inline HRESULT Connection15_BeginTrans(Connection15* This,LONG *transaction_level) {
    return This->lpVtbl->BeginTrans(This,transaction_level);
}
static inline HRESULT Connection15_CommitTrans(Connection15* This) {
    return This->lpVtbl->CommitTrans(This);
}
static inline HRESULT Connection15_RollbackTrans(Connection15* This) {
    return This->lpVtbl->RollbackTrans(This);
}
static inline HRESULT Connection15_Open(Connection15* This,BSTR connection_str,BSTR user_id,BSTR password,LONG options) {
    return This->lpVtbl->Open(This,connection_str,user_id,password,options);
}
static inline HRESULT Connection15_get_Errors(Connection15* This,Errors **object) {
    return This->lpVtbl->get_Errors(This,object);
}
static inline HRESULT Connection15_get_DefaultDatabase(Connection15* This,BSTR *str) {
    return This->lpVtbl->get_DefaultDatabase(This,str);
}
static inline HRESULT Connection15_put_DefaultDatabase(Connection15* This,BSTR str) {
    return This->lpVtbl->put_DefaultDatabase(This,str);
}
static inline HRESULT Connection15_get_IsolationLevel(Connection15* This,IsolationLevelEnum *level) {
    return This->lpVtbl->get_IsolationLevel(This,level);
}
static inline HRESULT Connection15_put_IsolationLevel(Connection15* This,IsolationLevelEnum level) {
    return This->lpVtbl->put_IsolationLevel(This,level);
}
static inline HRESULT Connection15_get_Attributes(Connection15* This,LONG *attr) {
    return This->lpVtbl->get_Attributes(This,attr);
}
static inline HRESULT Connection15_put_Attributes(Connection15* This,LONG attr) {
    return This->lpVtbl->put_Attributes(This,attr);
}
static inline HRESULT Connection15_get_CursorLocation(Connection15* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT Connection15_put_CursorLocation(Connection15* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT Connection15_get_Mode(Connection15* This,ConnectModeEnum *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static inline HRESULT Connection15_put_Mode(Connection15* This,ConnectModeEnum mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static inline HRESULT Connection15_get_Provider(Connection15* This,BSTR *str) {
    return This->lpVtbl->get_Provider(This,str);
}
static inline HRESULT Connection15_put_Provider(Connection15* This,BSTR str) {
    return This->lpVtbl->put_Provider(This,str);
}
static inline HRESULT Connection15_get_State(Connection15* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT Connection15_OpenSchema(Connection15* This,SchemaEnum schema,VARIANT restrictions,VARIANT schema_id,_Recordset **record_set) {
    return This->lpVtbl->OpenSchema(This,schema,restrictions,schema_id,record_set);
}
#endif
#endif

#endif


#endif  /* __Connection15_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Connection interface
 */
#ifndef ___Connection_INTERFACE_DEFINED__
#define ___Connection_INTERFACE_DEFINED__

DEFINE_GUID(IID__Connection, 0x00000550, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000550-0000-0010-8000-00aa006d2ea4")
_Connection : public Connection15
{
    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Connection, 0x00000550, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _ConnectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Connection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Connection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Connection *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Connection *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Connection *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Connection *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Connection *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _Connection *This,
        Properties **object);

    /*** Connection15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ConnectionString)(
        _Connection *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_ConnectionString)(
        _Connection *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_CommandTimeout)(
        _Connection *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_CommandTimeout)(
        _Connection *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_ConnectionTimeout)(
        _Connection *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_ConnectionTimeout)(
        _Connection *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_Version)(
        _Connection *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *Close)(
        _Connection *This);

    HRESULT (STDMETHODCALLTYPE *Execute)(
        _Connection *This,
        BSTR command,
        VARIANT *records_affected,
        LONG options,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *BeginTrans)(
        _Connection *This,
        LONG *transaction_level);

    HRESULT (STDMETHODCALLTYPE *CommitTrans)(
        _Connection *This);

    HRESULT (STDMETHODCALLTYPE *RollbackTrans)(
        _Connection *This);

    HRESULT (STDMETHODCALLTYPE *Open)(
        _Connection *This,
        BSTR connection_str,
        BSTR user_id,
        BSTR password,
        LONG options);

    HRESULT (STDMETHODCALLTYPE *get_Errors)(
        _Connection *This,
        Errors **object);

    HRESULT (STDMETHODCALLTYPE *get_DefaultDatabase)(
        _Connection *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_DefaultDatabase)(
        _Connection *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_IsolationLevel)(
        _Connection *This,
        IsolationLevelEnum *level);

    HRESULT (STDMETHODCALLTYPE *put_IsolationLevel)(
        _Connection *This,
        IsolationLevelEnum level);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        _Connection *This,
        LONG *attr);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        _Connection *This,
        LONG attr);

    HRESULT (STDMETHODCALLTYPE *get_CursorLocation)(
        _Connection *This,
        CursorLocationEnum *cursor_loc);

    HRESULT (STDMETHODCALLTYPE *put_CursorLocation)(
        _Connection *This,
        CursorLocationEnum cursor_loc);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        _Connection *This,
        ConnectModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        _Connection *This,
        ConnectModeEnum mode);

    HRESULT (STDMETHODCALLTYPE *get_Provider)(
        _Connection *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_Provider)(
        _Connection *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        _Connection *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *OpenSchema)(
        _Connection *This,
        SchemaEnum schema,
        VARIANT restrictions,
        VARIANT schema_id,
        _Recordset **record_set);

    /*** _Connection methods ***/
    HRESULT (STDMETHODCALLTYPE *Cancel)(
        _Connection *This);

    END_INTERFACE
} _ConnectionVtbl;

interface _Connection {
    CONST_VTBL _ConnectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Connection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Connection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Connection_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Connection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Connection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Connection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Connection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _Connection_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Connection15 methods ***/
#define _Connection_get_ConnectionString(This,str) (This)->lpVtbl->get_ConnectionString(This,str)
#define _Connection_put_ConnectionString(This,str) (This)->lpVtbl->put_ConnectionString(This,str)
#define _Connection_get_CommandTimeout(This,timeout) (This)->lpVtbl->get_CommandTimeout(This,timeout)
#define _Connection_put_CommandTimeout(This,timeout) (This)->lpVtbl->put_CommandTimeout(This,timeout)
#define _Connection_get_ConnectionTimeout(This,timeout) (This)->lpVtbl->get_ConnectionTimeout(This,timeout)
#define _Connection_put_ConnectionTimeout(This,timeout) (This)->lpVtbl->put_ConnectionTimeout(This,timeout)
#define _Connection_get_Version(This,str) (This)->lpVtbl->get_Version(This,str)
#define _Connection_Close(This) (This)->lpVtbl->Close(This)
#define _Connection_Execute(This,command,records_affected,options,record_set) (This)->lpVtbl->Execute(This,command,records_affected,options,record_set)
#define _Connection_BeginTrans(This,transaction_level) (This)->lpVtbl->BeginTrans(This,transaction_level)
#define _Connection_CommitTrans(This) (This)->lpVtbl->CommitTrans(This)
#define _Connection_RollbackTrans(This) (This)->lpVtbl->RollbackTrans(This)
#define _Connection_Open(This,connection_str,user_id,password,options) (This)->lpVtbl->Open(This,connection_str,user_id,password,options)
#define _Connection_get_Errors(This,object) (This)->lpVtbl->get_Errors(This,object)
#define _Connection_get_DefaultDatabase(This,str) (This)->lpVtbl->get_DefaultDatabase(This,str)
#define _Connection_put_DefaultDatabase(This,str) (This)->lpVtbl->put_DefaultDatabase(This,str)
#define _Connection_get_IsolationLevel(This,level) (This)->lpVtbl->get_IsolationLevel(This,level)
#define _Connection_put_IsolationLevel(This,level) (This)->lpVtbl->put_IsolationLevel(This,level)
#define _Connection_get_Attributes(This,attr) (This)->lpVtbl->get_Attributes(This,attr)
#define _Connection_put_Attributes(This,attr) (This)->lpVtbl->put_Attributes(This,attr)
#define _Connection_get_CursorLocation(This,cursor_loc) (This)->lpVtbl->get_CursorLocation(This,cursor_loc)
#define _Connection_put_CursorLocation(This,cursor_loc) (This)->lpVtbl->put_CursorLocation(This,cursor_loc)
#define _Connection_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define _Connection_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define _Connection_get_Provider(This,str) (This)->lpVtbl->get_Provider(This,str)
#define _Connection_put_Provider(This,str) (This)->lpVtbl->put_Provider(This,str)
#define _Connection_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define _Connection_OpenSchema(This,schema,restrictions,schema_id,record_set) (This)->lpVtbl->OpenSchema(This,schema,restrictions,schema_id,record_set)
/*** _Connection methods ***/
#define _Connection_Cancel(This) (This)->lpVtbl->Cancel(This)
#else
/*** IUnknown methods ***/
static inline HRESULT _Connection_QueryInterface(_Connection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Connection_AddRef(_Connection* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Connection_Release(_Connection* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Connection_GetTypeInfoCount(_Connection* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Connection_GetTypeInfo(_Connection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Connection_GetIDsOfNames(_Connection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Connection_Invoke(_Connection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _Connection_get_Properties(_Connection* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Connection15 methods ***/
static inline HRESULT _Connection_get_ConnectionString(_Connection* This,BSTR *str) {
    return This->lpVtbl->get_ConnectionString(This,str);
}
static inline HRESULT _Connection_put_ConnectionString(_Connection* This,BSTR str) {
    return This->lpVtbl->put_ConnectionString(This,str);
}
static inline HRESULT _Connection_get_CommandTimeout(_Connection* This,LONG *timeout) {
    return This->lpVtbl->get_CommandTimeout(This,timeout);
}
static inline HRESULT _Connection_put_CommandTimeout(_Connection* This,LONG timeout) {
    return This->lpVtbl->put_CommandTimeout(This,timeout);
}
static inline HRESULT _Connection_get_ConnectionTimeout(_Connection* This,LONG *timeout) {
    return This->lpVtbl->get_ConnectionTimeout(This,timeout);
}
static inline HRESULT _Connection_put_ConnectionTimeout(_Connection* This,LONG timeout) {
    return This->lpVtbl->put_ConnectionTimeout(This,timeout);
}
static inline HRESULT _Connection_get_Version(_Connection* This,BSTR *str) {
    return This->lpVtbl->get_Version(This,str);
}
static inline HRESULT _Connection_Close(_Connection* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT _Connection_Execute(_Connection* This,BSTR command,VARIANT *records_affected,LONG options,_Recordset **record_set) {
    return This->lpVtbl->Execute(This,command,records_affected,options,record_set);
}
static inline HRESULT _Connection_BeginTrans(_Connection* This,LONG *transaction_level) {
    return This->lpVtbl->BeginTrans(This,transaction_level);
}
static inline HRESULT _Connection_CommitTrans(_Connection* This) {
    return This->lpVtbl->CommitTrans(This);
}
static inline HRESULT _Connection_RollbackTrans(_Connection* This) {
    return This->lpVtbl->RollbackTrans(This);
}
static inline HRESULT _Connection_Open(_Connection* This,BSTR connection_str,BSTR user_id,BSTR password,LONG options) {
    return This->lpVtbl->Open(This,connection_str,user_id,password,options);
}
static inline HRESULT _Connection_get_Errors(_Connection* This,Errors **object) {
    return This->lpVtbl->get_Errors(This,object);
}
static inline HRESULT _Connection_get_DefaultDatabase(_Connection* This,BSTR *str) {
    return This->lpVtbl->get_DefaultDatabase(This,str);
}
static inline HRESULT _Connection_put_DefaultDatabase(_Connection* This,BSTR str) {
    return This->lpVtbl->put_DefaultDatabase(This,str);
}
static inline HRESULT _Connection_get_IsolationLevel(_Connection* This,IsolationLevelEnum *level) {
    return This->lpVtbl->get_IsolationLevel(This,level);
}
static inline HRESULT _Connection_put_IsolationLevel(_Connection* This,IsolationLevelEnum level) {
    return This->lpVtbl->put_IsolationLevel(This,level);
}
static inline HRESULT _Connection_get_Attributes(_Connection* This,LONG *attr) {
    return This->lpVtbl->get_Attributes(This,attr);
}
static inline HRESULT _Connection_put_Attributes(_Connection* This,LONG attr) {
    return This->lpVtbl->put_Attributes(This,attr);
}
static inline HRESULT _Connection_get_CursorLocation(_Connection* This,CursorLocationEnum *cursor_loc) {
    return This->lpVtbl->get_CursorLocation(This,cursor_loc);
}
static inline HRESULT _Connection_put_CursorLocation(_Connection* This,CursorLocationEnum cursor_loc) {
    return This->lpVtbl->put_CursorLocation(This,cursor_loc);
}
static inline HRESULT _Connection_get_Mode(_Connection* This,ConnectModeEnum *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static inline HRESULT _Connection_put_Mode(_Connection* This,ConnectModeEnum mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static inline HRESULT _Connection_get_Provider(_Connection* This,BSTR *str) {
    return This->lpVtbl->get_Provider(This,str);
}
static inline HRESULT _Connection_put_Provider(_Connection* This,BSTR str) {
    return This->lpVtbl->put_Provider(This,str);
}
static inline HRESULT _Connection_get_State(_Connection* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT _Connection_OpenSchema(_Connection* This,SchemaEnum schema,VARIANT restrictions,VARIANT schema_id,_Recordset **record_set) {
    return This->lpVtbl->OpenSchema(This,schema,restrictions,schema_id,record_set);
}
/*** _Connection methods ***/
static inline HRESULT _Connection_Cancel(_Connection* This) {
    return This->lpVtbl->Cancel(This);
}
#endif
#endif

#endif


#endif  /* ___Connection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Parameter interface
 */
#ifndef ___Parameter_INTERFACE_DEFINED__
#define ___Parameter_INTERFACE_DEFINED__

DEFINE_GUID(IID__Parameter, 0x0000050c, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000050c-0000-0010-8000-00aa006d2ea4")
_Parameter : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Name(
        BSTR str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Value(
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Value(
        VARIANT val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        DataTypeEnum *data_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Type(
        DataTypeEnum data_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Direction(
        ParameterDirectionEnum direction) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Direction(
        ParameterDirectionEnum *direction) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Precision(
        unsigned char precision) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Precision(
        unsigned char *precision) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_NumericScale(
        unsigned char scale) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NumericScale(
        unsigned char *scale) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Size(
        ADO_LONGPTR size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Size(
        ADO_LONGPTR *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE AppendChunk(
        VARIANT val) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Attributes(
        LONG *attrs) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Attributes(
        LONG attrs) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Parameter, 0x0000050c, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _ParameterVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Parameter *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Parameter *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Parameter *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Parameter *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Parameter *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Parameter *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Parameter *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _Parameter *This,
        Properties **object);

    /*** _Parameter methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Name)(
        _Parameter *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_Name)(
        _Parameter *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_Value)(
        _Parameter *This,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *put_Value)(
        _Parameter *This,
        VARIANT val);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        _Parameter *This,
        DataTypeEnum *data_type);

    HRESULT (STDMETHODCALLTYPE *put_Type)(
        _Parameter *This,
        DataTypeEnum data_type);

    HRESULT (STDMETHODCALLTYPE *put_Direction)(
        _Parameter *This,
        ParameterDirectionEnum direction);

    HRESULT (STDMETHODCALLTYPE *get_Direction)(
        _Parameter *This,
        ParameterDirectionEnum *direction);

    HRESULT (STDMETHODCALLTYPE *put_Precision)(
        _Parameter *This,
        unsigned char precision);

    HRESULT (STDMETHODCALLTYPE *get_Precision)(
        _Parameter *This,
        unsigned char *precision);

    HRESULT (STDMETHODCALLTYPE *put_NumericScale)(
        _Parameter *This,
        unsigned char scale);

    HRESULT (STDMETHODCALLTYPE *get_NumericScale)(
        _Parameter *This,
        unsigned char *scale);

    HRESULT (STDMETHODCALLTYPE *put_Size)(
        _Parameter *This,
        ADO_LONGPTR size);

    HRESULT (STDMETHODCALLTYPE *get_Size)(
        _Parameter *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *AppendChunk)(
        _Parameter *This,
        VARIANT val);

    HRESULT (STDMETHODCALLTYPE *get_Attributes)(
        _Parameter *This,
        LONG *attrs);

    HRESULT (STDMETHODCALLTYPE *put_Attributes)(
        _Parameter *This,
        LONG attrs);

    END_INTERFACE
} _ParameterVtbl;

interface _Parameter {
    CONST_VTBL _ParameterVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Parameter_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Parameter_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Parameter_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Parameter_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Parameter_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Parameter_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Parameter_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _Parameter_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** _Parameter methods ***/
#define _Parameter_get_Name(This,str) (This)->lpVtbl->get_Name(This,str)
#define _Parameter_put_Name(This,str) (This)->lpVtbl->put_Name(This,str)
#define _Parameter_get_Value(This,val) (This)->lpVtbl->get_Value(This,val)
#define _Parameter_put_Value(This,val) (This)->lpVtbl->put_Value(This,val)
#define _Parameter_get_Type(This,data_type) (This)->lpVtbl->get_Type(This,data_type)
#define _Parameter_put_Type(This,data_type) (This)->lpVtbl->put_Type(This,data_type)
#define _Parameter_put_Direction(This,direction) (This)->lpVtbl->put_Direction(This,direction)
#define _Parameter_get_Direction(This,direction) (This)->lpVtbl->get_Direction(This,direction)
#define _Parameter_put_Precision(This,precision) (This)->lpVtbl->put_Precision(This,precision)
#define _Parameter_get_Precision(This,precision) (This)->lpVtbl->get_Precision(This,precision)
#define _Parameter_put_NumericScale(This,scale) (This)->lpVtbl->put_NumericScale(This,scale)
#define _Parameter_get_NumericScale(This,scale) (This)->lpVtbl->get_NumericScale(This,scale)
#define _Parameter_put_Size(This,size) (This)->lpVtbl->put_Size(This,size)
#define _Parameter_get_Size(This,size) (This)->lpVtbl->get_Size(This,size)
#define _Parameter_AppendChunk(This,val) (This)->lpVtbl->AppendChunk(This,val)
#define _Parameter_get_Attributes(This,attrs) (This)->lpVtbl->get_Attributes(This,attrs)
#define _Parameter_put_Attributes(This,attrs) (This)->lpVtbl->put_Attributes(This,attrs)
#else
/*** IUnknown methods ***/
static inline HRESULT _Parameter_QueryInterface(_Parameter* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Parameter_AddRef(_Parameter* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Parameter_Release(_Parameter* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Parameter_GetTypeInfoCount(_Parameter* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Parameter_GetTypeInfo(_Parameter* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Parameter_GetIDsOfNames(_Parameter* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Parameter_Invoke(_Parameter* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _Parameter_get_Properties(_Parameter* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** _Parameter methods ***/
static inline HRESULT _Parameter_get_Name(_Parameter* This,BSTR *str) {
    return This->lpVtbl->get_Name(This,str);
}
static inline HRESULT _Parameter_put_Name(_Parameter* This,BSTR str) {
    return This->lpVtbl->put_Name(This,str);
}
static inline HRESULT _Parameter_get_Value(_Parameter* This,VARIANT *val) {
    return This->lpVtbl->get_Value(This,val);
}
static inline HRESULT _Parameter_put_Value(_Parameter* This,VARIANT val) {
    return This->lpVtbl->put_Value(This,val);
}
static inline HRESULT _Parameter_get_Type(_Parameter* This,DataTypeEnum *data_type) {
    return This->lpVtbl->get_Type(This,data_type);
}
static inline HRESULT _Parameter_put_Type(_Parameter* This,DataTypeEnum data_type) {
    return This->lpVtbl->put_Type(This,data_type);
}
static inline HRESULT _Parameter_put_Direction(_Parameter* This,ParameterDirectionEnum direction) {
    return This->lpVtbl->put_Direction(This,direction);
}
static inline HRESULT _Parameter_get_Direction(_Parameter* This,ParameterDirectionEnum *direction) {
    return This->lpVtbl->get_Direction(This,direction);
}
static inline HRESULT _Parameter_put_Precision(_Parameter* This,unsigned char precision) {
    return This->lpVtbl->put_Precision(This,precision);
}
static inline HRESULT _Parameter_get_Precision(_Parameter* This,unsigned char *precision) {
    return This->lpVtbl->get_Precision(This,precision);
}
static inline HRESULT _Parameter_put_NumericScale(_Parameter* This,unsigned char scale) {
    return This->lpVtbl->put_NumericScale(This,scale);
}
static inline HRESULT _Parameter_get_NumericScale(_Parameter* This,unsigned char *scale) {
    return This->lpVtbl->get_NumericScale(This,scale);
}
static inline HRESULT _Parameter_put_Size(_Parameter* This,ADO_LONGPTR size) {
    return This->lpVtbl->put_Size(This,size);
}
static inline HRESULT _Parameter_get_Size(_Parameter* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_Size(This,size);
}
static inline HRESULT _Parameter_AppendChunk(_Parameter* This,VARIANT val) {
    return This->lpVtbl->AppendChunk(This,val);
}
static inline HRESULT _Parameter_get_Attributes(_Parameter* This,LONG *attrs) {
    return This->lpVtbl->get_Attributes(This,attrs);
}
static inline HRESULT _Parameter_put_Attributes(_Parameter* This,LONG attrs) {
    return This->lpVtbl->put_Attributes(This,attrs);
}
#endif
#endif

#endif


#endif  /* ___Parameter_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _DynaCollection interface
 */
#ifndef ___DynaCollection_INTERFACE_DEFINED__
#define ___DynaCollection_INTERFACE_DEFINED__

DEFINE_GUID(IID__DynaCollection, 0x00000513, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000513-0000-0010-8000-00aa006d2ea4")
_DynaCollection : public _Collection
{
    virtual HRESULT STDMETHODCALLTYPE Append(
        IDispatch *object) = 0;

    virtual HRESULT STDMETHODCALLTYPE Delete(
        VARIANT index) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_DynaCollection, 0x00000513, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _DynaCollectionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _DynaCollection *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _DynaCollection *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _DynaCollection *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _DynaCollection *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _DynaCollection *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _DynaCollection *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _DynaCollection *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        _DynaCollection *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        _DynaCollection *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        _DynaCollection *This);

    /*** _DynaCollection methods ***/
    HRESULT (STDMETHODCALLTYPE *Append)(
        _DynaCollection *This,
        IDispatch *object);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        _DynaCollection *This,
        VARIANT index);

    END_INTERFACE
} _DynaCollectionVtbl;

interface _DynaCollection {
    CONST_VTBL _DynaCollectionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _DynaCollection_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _DynaCollection_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _DynaCollection_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _DynaCollection_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _DynaCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _DynaCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _DynaCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define _DynaCollection_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define _DynaCollection__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define _DynaCollection_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** _DynaCollection methods ***/
#define _DynaCollection_Append(This,object) (This)->lpVtbl->Append(This,object)
#define _DynaCollection_Delete(This,index) (This)->lpVtbl->Delete(This,index)
#else
/*** IUnknown methods ***/
static inline HRESULT _DynaCollection_QueryInterface(_DynaCollection* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _DynaCollection_AddRef(_DynaCollection* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _DynaCollection_Release(_DynaCollection* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _DynaCollection_GetTypeInfoCount(_DynaCollection* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _DynaCollection_GetTypeInfo(_DynaCollection* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _DynaCollection_GetIDsOfNames(_DynaCollection* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _DynaCollection_Invoke(_DynaCollection* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT _DynaCollection_get_Count(_DynaCollection* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT _DynaCollection__NewEnum(_DynaCollection* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT _DynaCollection_Refresh(_DynaCollection* This) {
    return This->lpVtbl->Refresh(This);
}
/*** _DynaCollection methods ***/
static inline HRESULT _DynaCollection_Append(_DynaCollection* This,IDispatch *object) {
    return This->lpVtbl->Append(This,object);
}
static inline HRESULT _DynaCollection_Delete(_DynaCollection* This,VARIANT index) {
    return This->lpVtbl->Delete(This,index);
}
#endif
#endif

#endif


#endif  /* ___DynaCollection_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Parameters interface
 */
#ifndef __Parameters_INTERFACE_DEFINED__
#define __Parameters_INTERFACE_DEFINED__

DEFINE_GUID(IID_Parameters, 0x0000050d, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000050d-0000-0010-8000-00aa006d2ea4")
Parameters : public _DynaCollection
{
    virtual HRESULT STDMETHODCALLTYPE get_Item(
        VARIANT index,
        _Parameter **object) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Parameters, 0x0000050d, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ParametersVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Parameters *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Parameters *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Parameters *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Parameters *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Parameters *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Parameters *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Parameters *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Collection methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Count)(
        Parameters *This,
        LONG *count);

    HRESULT (STDMETHODCALLTYPE *_NewEnum)(
        Parameters *This,
        IUnknown **object);

    HRESULT (STDMETHODCALLTYPE *Refresh)(
        Parameters *This);

    /*** _DynaCollection methods ***/
    HRESULT (STDMETHODCALLTYPE *Append)(
        Parameters *This,
        IDispatch *object);

    HRESULT (STDMETHODCALLTYPE *Delete)(
        Parameters *This,
        VARIANT index);

    /*** Parameters methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Item)(
        Parameters *This,
        VARIANT index,
        _Parameter **object);

    END_INTERFACE
} ParametersVtbl;

interface Parameters {
    CONST_VTBL ParametersVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Parameters_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Parameters_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Parameters_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Parameters_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Parameters_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Parameters_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Parameters_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Collection methods ***/
#define Parameters_get_Count(This,count) (This)->lpVtbl->get_Count(This,count)
#define Parameters__NewEnum(This,object) (This)->lpVtbl->_NewEnum(This,object)
#define Parameters_Refresh(This) (This)->lpVtbl->Refresh(This)
/*** _DynaCollection methods ***/
#define Parameters_Append(This,object) (This)->lpVtbl->Append(This,object)
#define Parameters_Delete(This,index) (This)->lpVtbl->Delete(This,index)
/*** Parameters methods ***/
#define Parameters_get_Item(This,index,object) (This)->lpVtbl->get_Item(This,index,object)
#else
/*** IUnknown methods ***/
static inline HRESULT Parameters_QueryInterface(Parameters* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Parameters_AddRef(Parameters* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Parameters_Release(Parameters* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Parameters_GetTypeInfoCount(Parameters* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Parameters_GetTypeInfo(Parameters* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Parameters_GetIDsOfNames(Parameters* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Parameters_Invoke(Parameters* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Collection methods ***/
static inline HRESULT Parameters_get_Count(Parameters* This,LONG *count) {
    return This->lpVtbl->get_Count(This,count);
}
static inline HRESULT Parameters__NewEnum(Parameters* This,IUnknown **object) {
    return This->lpVtbl->_NewEnum(This,object);
}
static inline HRESULT Parameters_Refresh(Parameters* This) {
    return This->lpVtbl->Refresh(This);
}
/*** _DynaCollection methods ***/
static inline HRESULT Parameters_Append(Parameters* This,IDispatch *object) {
    return This->lpVtbl->Append(This,object);
}
static inline HRESULT Parameters_Delete(Parameters* This,VARIANT index) {
    return This->lpVtbl->Delete(This,index);
}
/*** Parameters methods ***/
static inline HRESULT Parameters_get_Item(Parameters* This,VARIANT index,_Parameter **object) {
    return This->lpVtbl->get_Item(This,index,object);
}
#endif
#endif

#endif


#endif  /* __Parameters_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Command15 interface
 */
#ifndef __Command15_INTERFACE_DEFINED__
#define __Command15_INTERFACE_DEFINED__

DEFINE_GUID(IID_Command15, 0x00000508, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000508-0000-0010-8000-00aa006d2ea4")
Command15 : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_ActiveConnection(
        _Connection **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_ActiveConnection(
        _Connection *object) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ActiveConnection(
        VARIANT object) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CommandText(
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CommandText(
        BSTR str) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CommandTimeout(
        LONG *timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CommandTimeout(
        LONG timeout) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Prepared(
        VARIANT_BOOL *prepared) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Prepared(
        VARIANT_BOOL prepared) = 0;

    virtual HRESULT STDMETHODCALLTYPE Execute(
        VARIANT *records_affected,
        VARIANT *parameters,
        LONG options,
        _Recordset **record_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE CreateParameter(
        BSTR name,
        DataTypeEnum type,
        ParameterDirectionEnum direction,
        ADO_LONGPTR size,
        VARIANT value,
        _Parameter **parameter) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Parameters(
        Parameters **object) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_CommandType(
        CommandTypeEnum cmd_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CommandType(
        CommandTypeEnum *cmd_type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Name(
        BSTR *name) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Name(
        BSTR name) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Command15, 0x00000508, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Command15Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Command15 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Command15 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Command15 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Command15 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Command15 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Command15 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Command15 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Command15 *This,
        Properties **object);

    /*** Command15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        Command15 *This,
        _Connection **object);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        Command15 *This,
        _Connection *object);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        Command15 *This,
        VARIANT object);

    HRESULT (STDMETHODCALLTYPE *get_CommandText)(
        Command15 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_CommandText)(
        Command15 *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_CommandTimeout)(
        Command15 *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_CommandTimeout)(
        Command15 *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_Prepared)(
        Command15 *This,
        VARIANT_BOOL *prepared);

    HRESULT (STDMETHODCALLTYPE *put_Prepared)(
        Command15 *This,
        VARIANT_BOOL prepared);

    HRESULT (STDMETHODCALLTYPE *Execute)(
        Command15 *This,
        VARIANT *records_affected,
        VARIANT *parameters,
        LONG options,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *CreateParameter)(
        Command15 *This,
        BSTR name,
        DataTypeEnum type,
        ParameterDirectionEnum direction,
        ADO_LONGPTR size,
        VARIANT value,
        _Parameter **parameter);

    HRESULT (STDMETHODCALLTYPE *get_Parameters)(
        Command15 *This,
        Parameters **object);

    HRESULT (STDMETHODCALLTYPE *put_CommandType)(
        Command15 *This,
        CommandTypeEnum cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_CommandType)(
        Command15 *This,
        CommandTypeEnum *cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        Command15 *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *put_Name)(
        Command15 *This,
        BSTR name);

    END_INTERFACE
} Command15Vtbl;

interface Command15 {
    CONST_VTBL Command15Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Command15_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Command15_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Command15_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Command15_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Command15_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Command15_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Command15_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Command15_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Command15 methods ***/
#define Command15_get_ActiveConnection(This,object) (This)->lpVtbl->get_ActiveConnection(This,object)
#define Command15_putref_ActiveConnection(This,object) (This)->lpVtbl->putref_ActiveConnection(This,object)
#define Command15_put_ActiveConnection(This,object) (This)->lpVtbl->put_ActiveConnection(This,object)
#define Command15_get_CommandText(This,str) (This)->lpVtbl->get_CommandText(This,str)
#define Command15_put_CommandText(This,str) (This)->lpVtbl->put_CommandText(This,str)
#define Command15_get_CommandTimeout(This,timeout) (This)->lpVtbl->get_CommandTimeout(This,timeout)
#define Command15_put_CommandTimeout(This,timeout) (This)->lpVtbl->put_CommandTimeout(This,timeout)
#define Command15_get_Prepared(This,prepared) (This)->lpVtbl->get_Prepared(This,prepared)
#define Command15_put_Prepared(This,prepared) (This)->lpVtbl->put_Prepared(This,prepared)
#define Command15_Execute(This,records_affected,parameters,options,record_set) (This)->lpVtbl->Execute(This,records_affected,parameters,options,record_set)
#define Command15_CreateParameter(This,name,type,direction,size,value,parameter) (This)->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter)
#define Command15_get_Parameters(This,object) (This)->lpVtbl->get_Parameters(This,object)
#define Command15_put_CommandType(This,cmd_type) (This)->lpVtbl->put_CommandType(This,cmd_type)
#define Command15_get_CommandType(This,cmd_type) (This)->lpVtbl->get_CommandType(This,cmd_type)
#define Command15_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define Command15_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)
#else
/*** IUnknown methods ***/
static inline HRESULT Command15_QueryInterface(Command15* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Command15_AddRef(Command15* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Command15_Release(Command15* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Command15_GetTypeInfoCount(Command15* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Command15_GetTypeInfo(Command15* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Command15_GetIDsOfNames(Command15* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Command15_Invoke(Command15* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Command15_get_Properties(Command15* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Command15 methods ***/
static inline HRESULT Command15_get_ActiveConnection(Command15* This,_Connection **object) {
    return This->lpVtbl->get_ActiveConnection(This,object);
}
static inline HRESULT Command15_putref_ActiveConnection(Command15* This,_Connection *object) {
    return This->lpVtbl->putref_ActiveConnection(This,object);
}
static inline HRESULT Command15_put_ActiveConnection(Command15* This,VARIANT object) {
    return This->lpVtbl->put_ActiveConnection(This,object);
}
static inline HRESULT Command15_get_CommandText(Command15* This,BSTR *str) {
    return This->lpVtbl->get_CommandText(This,str);
}
static inline HRESULT Command15_put_CommandText(Command15* This,BSTR str) {
    return This->lpVtbl->put_CommandText(This,str);
}
static inline HRESULT Command15_get_CommandTimeout(Command15* This,LONG *timeout) {
    return This->lpVtbl->get_CommandTimeout(This,timeout);
}
static inline HRESULT Command15_put_CommandTimeout(Command15* This,LONG timeout) {
    return This->lpVtbl->put_CommandTimeout(This,timeout);
}
static inline HRESULT Command15_get_Prepared(Command15* This,VARIANT_BOOL *prepared) {
    return This->lpVtbl->get_Prepared(This,prepared);
}
static inline HRESULT Command15_put_Prepared(Command15* This,VARIANT_BOOL prepared) {
    return This->lpVtbl->put_Prepared(This,prepared);
}
static inline HRESULT Command15_Execute(Command15* This,VARIANT *records_affected,VARIANT *parameters,LONG options,_Recordset **record_set) {
    return This->lpVtbl->Execute(This,records_affected,parameters,options,record_set);
}
static inline HRESULT Command15_CreateParameter(Command15* This,BSTR name,DataTypeEnum type,ParameterDirectionEnum direction,ADO_LONGPTR size,VARIANT value,_Parameter **parameter) {
    return This->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter);
}
static inline HRESULT Command15_get_Parameters(Command15* This,Parameters **object) {
    return This->lpVtbl->get_Parameters(This,object);
}
static inline HRESULT Command15_put_CommandType(Command15* This,CommandTypeEnum cmd_type) {
    return This->lpVtbl->put_CommandType(This,cmd_type);
}
static inline HRESULT Command15_get_CommandType(Command15* This,CommandTypeEnum *cmd_type) {
    return This->lpVtbl->get_CommandType(This,cmd_type);
}
static inline HRESULT Command15_get_Name(Command15* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static inline HRESULT Command15_put_Name(Command15* This,BSTR name) {
    return This->lpVtbl->put_Name(This,name);
}
#endif
#endif

#endif


#endif  /* __Command15_INTERFACE_DEFINED__ */

/*****************************************************************************
 * Command25 interface
 */
#ifndef __Command25_INTERFACE_DEFINED__
#define __Command25_INTERFACE_DEFINED__

DEFINE_GUID(IID_Command25, 0x0000054e, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("0000054e-0000-0010-8000-00aa006d2ea4")
Command25 : public Command15
{
    virtual HRESULT STDMETHODCALLTYPE get_State(
        LONG *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Command25, 0x0000054e, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct Command25Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        Command25 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        Command25 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        Command25 *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        Command25 *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        Command25 *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        Command25 *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        Command25 *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        Command25 *This,
        Properties **object);

    /*** Command15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        Command25 *This,
        _Connection **object);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        Command25 *This,
        _Connection *object);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        Command25 *This,
        VARIANT object);

    HRESULT (STDMETHODCALLTYPE *get_CommandText)(
        Command25 *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_CommandText)(
        Command25 *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_CommandTimeout)(
        Command25 *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_CommandTimeout)(
        Command25 *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_Prepared)(
        Command25 *This,
        VARIANT_BOOL *prepared);

    HRESULT (STDMETHODCALLTYPE *put_Prepared)(
        Command25 *This,
        VARIANT_BOOL prepared);

    HRESULT (STDMETHODCALLTYPE *Execute)(
        Command25 *This,
        VARIANT *records_affected,
        VARIANT *parameters,
        LONG options,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *CreateParameter)(
        Command25 *This,
        BSTR name,
        DataTypeEnum type,
        ParameterDirectionEnum direction,
        ADO_LONGPTR size,
        VARIANT value,
        _Parameter **parameter);

    HRESULT (STDMETHODCALLTYPE *get_Parameters)(
        Command25 *This,
        Parameters **object);

    HRESULT (STDMETHODCALLTYPE *put_CommandType)(
        Command25 *This,
        CommandTypeEnum cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_CommandType)(
        Command25 *This,
        CommandTypeEnum *cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        Command25 *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *put_Name)(
        Command25 *This,
        BSTR name);

    /*** Command25 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_State)(
        Command25 *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *Cancel)(
        Command25 *This);

    END_INTERFACE
} Command25Vtbl;

interface Command25 {
    CONST_VTBL Command25Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define Command25_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define Command25_AddRef(This) (This)->lpVtbl->AddRef(This)
#define Command25_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define Command25_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define Command25_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define Command25_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define Command25_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define Command25_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Command15 methods ***/
#define Command25_get_ActiveConnection(This,object) (This)->lpVtbl->get_ActiveConnection(This,object)
#define Command25_putref_ActiveConnection(This,object) (This)->lpVtbl->putref_ActiveConnection(This,object)
#define Command25_put_ActiveConnection(This,object) (This)->lpVtbl->put_ActiveConnection(This,object)
#define Command25_get_CommandText(This,str) (This)->lpVtbl->get_CommandText(This,str)
#define Command25_put_CommandText(This,str) (This)->lpVtbl->put_CommandText(This,str)
#define Command25_get_CommandTimeout(This,timeout) (This)->lpVtbl->get_CommandTimeout(This,timeout)
#define Command25_put_CommandTimeout(This,timeout) (This)->lpVtbl->put_CommandTimeout(This,timeout)
#define Command25_get_Prepared(This,prepared) (This)->lpVtbl->get_Prepared(This,prepared)
#define Command25_put_Prepared(This,prepared) (This)->lpVtbl->put_Prepared(This,prepared)
#define Command25_Execute(This,records_affected,parameters,options,record_set) (This)->lpVtbl->Execute(This,records_affected,parameters,options,record_set)
#define Command25_CreateParameter(This,name,type,direction,size,value,parameter) (This)->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter)
#define Command25_get_Parameters(This,object) (This)->lpVtbl->get_Parameters(This,object)
#define Command25_put_CommandType(This,cmd_type) (This)->lpVtbl->put_CommandType(This,cmd_type)
#define Command25_get_CommandType(This,cmd_type) (This)->lpVtbl->get_CommandType(This,cmd_type)
#define Command25_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define Command25_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)
/*** Command25 methods ***/
#define Command25_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define Command25_Cancel(This) (This)->lpVtbl->Cancel(This)
#else
/*** IUnknown methods ***/
static inline HRESULT Command25_QueryInterface(Command25* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG Command25_AddRef(Command25* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG Command25_Release(Command25* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT Command25_GetTypeInfoCount(Command25* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT Command25_GetTypeInfo(Command25* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT Command25_GetIDsOfNames(Command25* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT Command25_Invoke(Command25* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT Command25_get_Properties(Command25* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Command15 methods ***/
static inline HRESULT Command25_get_ActiveConnection(Command25* This,_Connection **object) {
    return This->lpVtbl->get_ActiveConnection(This,object);
}
static inline HRESULT Command25_putref_ActiveConnection(Command25* This,_Connection *object) {
    return This->lpVtbl->putref_ActiveConnection(This,object);
}
static inline HRESULT Command25_put_ActiveConnection(Command25* This,VARIANT object) {
    return This->lpVtbl->put_ActiveConnection(This,object);
}
static inline HRESULT Command25_get_CommandText(Command25* This,BSTR *str) {
    return This->lpVtbl->get_CommandText(This,str);
}
static inline HRESULT Command25_put_CommandText(Command25* This,BSTR str) {
    return This->lpVtbl->put_CommandText(This,str);
}
static inline HRESULT Command25_get_CommandTimeout(Command25* This,LONG *timeout) {
    return This->lpVtbl->get_CommandTimeout(This,timeout);
}
static inline HRESULT Command25_put_CommandTimeout(Command25* This,LONG timeout) {
    return This->lpVtbl->put_CommandTimeout(This,timeout);
}
static inline HRESULT Command25_get_Prepared(Command25* This,VARIANT_BOOL *prepared) {
    return This->lpVtbl->get_Prepared(This,prepared);
}
static inline HRESULT Command25_put_Prepared(Command25* This,VARIANT_BOOL prepared) {
    return This->lpVtbl->put_Prepared(This,prepared);
}
static inline HRESULT Command25_Execute(Command25* This,VARIANT *records_affected,VARIANT *parameters,LONG options,_Recordset **record_set) {
    return This->lpVtbl->Execute(This,records_affected,parameters,options,record_set);
}
static inline HRESULT Command25_CreateParameter(Command25* This,BSTR name,DataTypeEnum type,ParameterDirectionEnum direction,ADO_LONGPTR size,VARIANT value,_Parameter **parameter) {
    return This->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter);
}
static inline HRESULT Command25_get_Parameters(Command25* This,Parameters **object) {
    return This->lpVtbl->get_Parameters(This,object);
}
static inline HRESULT Command25_put_CommandType(Command25* This,CommandTypeEnum cmd_type) {
    return This->lpVtbl->put_CommandType(This,cmd_type);
}
static inline HRESULT Command25_get_CommandType(Command25* This,CommandTypeEnum *cmd_type) {
    return This->lpVtbl->get_CommandType(This,cmd_type);
}
static inline HRESULT Command25_get_Name(Command25* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static inline HRESULT Command25_put_Name(Command25* This,BSTR name) {
    return This->lpVtbl->put_Name(This,name);
}
/*** Command25 methods ***/
static inline HRESULT Command25_get_State(Command25* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT Command25_Cancel(Command25* This) {
    return This->lpVtbl->Cancel(This);
}
#endif
#endif

#endif


#endif  /* __Command25_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Command interface
 */
#ifndef ___Command_INTERFACE_DEFINED__
#define ___Command_INTERFACE_DEFINED__

DEFINE_GUID(IID__Command, 0xb08400bd, 0xf9d1, 0x4d02, 0xb8,0x56, 0x71,0xd5,0xdb,0xa1,0x23,0xe9);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("b08400bd-f9d1-4d02-b856-71d5dba123e9")
_Command : public Command25
{
    virtual HRESULT STDMETHODCALLTYPE putref_CommandStream(
        IUnknown *stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_CommandStream(
        VARIANT *stream) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Dialect(
        BSTR dialect) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Dialect(
        BSTR *dialect) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_NamedParameters(
        VARIANT_BOOL named_parameters) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_NamedParameters(
        VARIANT_BOOL *named_parameters) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Command, 0xb08400bd, 0xf9d1, 0x4d02, 0xb8,0x56, 0x71,0xd5,0xdb,0xa1,0x23,0xe9)
#endif
#else
typedef struct _CommandVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Command *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Command *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Command *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Command *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Command *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Command *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Command *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _Command *This,
        Properties **object);

    /*** Command15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        _Command *This,
        _Connection **object);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        _Command *This,
        _Connection *object);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        _Command *This,
        VARIANT object);

    HRESULT (STDMETHODCALLTYPE *get_CommandText)(
        _Command *This,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *put_CommandText)(
        _Command *This,
        BSTR str);

    HRESULT (STDMETHODCALLTYPE *get_CommandTimeout)(
        _Command *This,
        LONG *timeout);

    HRESULT (STDMETHODCALLTYPE *put_CommandTimeout)(
        _Command *This,
        LONG timeout);

    HRESULT (STDMETHODCALLTYPE *get_Prepared)(
        _Command *This,
        VARIANT_BOOL *prepared);

    HRESULT (STDMETHODCALLTYPE *put_Prepared)(
        _Command *This,
        VARIANT_BOOL prepared);

    HRESULT (STDMETHODCALLTYPE *Execute)(
        _Command *This,
        VARIANT *records_affected,
        VARIANT *parameters,
        LONG options,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *CreateParameter)(
        _Command *This,
        BSTR name,
        DataTypeEnum type,
        ParameterDirectionEnum direction,
        ADO_LONGPTR size,
        VARIANT value,
        _Parameter **parameter);

    HRESULT (STDMETHODCALLTYPE *get_Parameters)(
        _Command *This,
        Parameters **object);

    HRESULT (STDMETHODCALLTYPE *put_CommandType)(
        _Command *This,
        CommandTypeEnum cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_CommandType)(
        _Command *This,
        CommandTypeEnum *cmd_type);

    HRESULT (STDMETHODCALLTYPE *get_Name)(
        _Command *This,
        BSTR *name);

    HRESULT (STDMETHODCALLTYPE *put_Name)(
        _Command *This,
        BSTR name);

    /*** Command25 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_State)(
        _Command *This,
        LONG *state);

    HRESULT (STDMETHODCALLTYPE *Cancel)(
        _Command *This);

    /*** _Command methods ***/
    HRESULT (STDMETHODCALLTYPE *putref_CommandStream)(
        _Command *This,
        IUnknown *stream);

    HRESULT (STDMETHODCALLTYPE *get_CommandStream)(
        _Command *This,
        VARIANT *stream);

    HRESULT (STDMETHODCALLTYPE *put_Dialect)(
        _Command *This,
        BSTR dialect);

    HRESULT (STDMETHODCALLTYPE *get_Dialect)(
        _Command *This,
        BSTR *dialect);

    HRESULT (STDMETHODCALLTYPE *put_NamedParameters)(
        _Command *This,
        VARIANT_BOOL named_parameters);

    HRESULT (STDMETHODCALLTYPE *get_NamedParameters)(
        _Command *This,
        VARIANT_BOOL *named_parameters);

    END_INTERFACE
} _CommandVtbl;

interface _Command {
    CONST_VTBL _CommandVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Command_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Command_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Command_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Command_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Command_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Command_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Command_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _Command_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** Command15 methods ***/
#define _Command_get_ActiveConnection(This,object) (This)->lpVtbl->get_ActiveConnection(This,object)
#define _Command_putref_ActiveConnection(This,object) (This)->lpVtbl->putref_ActiveConnection(This,object)
#define _Command_put_ActiveConnection(This,object) (This)->lpVtbl->put_ActiveConnection(This,object)
#define _Command_get_CommandText(This,str) (This)->lpVtbl->get_CommandText(This,str)
#define _Command_put_CommandText(This,str) (This)->lpVtbl->put_CommandText(This,str)
#define _Command_get_CommandTimeout(This,timeout) (This)->lpVtbl->get_CommandTimeout(This,timeout)
#define _Command_put_CommandTimeout(This,timeout) (This)->lpVtbl->put_CommandTimeout(This,timeout)
#define _Command_get_Prepared(This,prepared) (This)->lpVtbl->get_Prepared(This,prepared)
#define _Command_put_Prepared(This,prepared) (This)->lpVtbl->put_Prepared(This,prepared)
#define _Command_Execute(This,records_affected,parameters,options,record_set) (This)->lpVtbl->Execute(This,records_affected,parameters,options,record_set)
#define _Command_CreateParameter(This,name,type,direction,size,value,parameter) (This)->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter)
#define _Command_get_Parameters(This,object) (This)->lpVtbl->get_Parameters(This,object)
#define _Command_put_CommandType(This,cmd_type) (This)->lpVtbl->put_CommandType(This,cmd_type)
#define _Command_get_CommandType(This,cmd_type) (This)->lpVtbl->get_CommandType(This,cmd_type)
#define _Command_get_Name(This,name) (This)->lpVtbl->get_Name(This,name)
#define _Command_put_Name(This,name) (This)->lpVtbl->put_Name(This,name)
/*** Command25 methods ***/
#define _Command_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define _Command_Cancel(This) (This)->lpVtbl->Cancel(This)
/*** _Command methods ***/
#define _Command_putref_CommandStream(This,stream) (This)->lpVtbl->putref_CommandStream(This,stream)
#define _Command_get_CommandStream(This,stream) (This)->lpVtbl->get_CommandStream(This,stream)
#define _Command_put_Dialect(This,dialect) (This)->lpVtbl->put_Dialect(This,dialect)
#define _Command_get_Dialect(This,dialect) (This)->lpVtbl->get_Dialect(This,dialect)
#define _Command_put_NamedParameters(This,named_parameters) (This)->lpVtbl->put_NamedParameters(This,named_parameters)
#define _Command_get_NamedParameters(This,named_parameters) (This)->lpVtbl->get_NamedParameters(This,named_parameters)
#else
/*** IUnknown methods ***/
static inline HRESULT _Command_QueryInterface(_Command* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Command_AddRef(_Command* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Command_Release(_Command* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Command_GetTypeInfoCount(_Command* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Command_GetTypeInfo(_Command* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Command_GetIDsOfNames(_Command* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Command_Invoke(_Command* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _Command_get_Properties(_Command* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** Command15 methods ***/
static inline HRESULT _Command_get_ActiveConnection(_Command* This,_Connection **object) {
    return This->lpVtbl->get_ActiveConnection(This,object);
}
static inline HRESULT _Command_putref_ActiveConnection(_Command* This,_Connection *object) {
    return This->lpVtbl->putref_ActiveConnection(This,object);
}
static inline HRESULT _Command_put_ActiveConnection(_Command* This,VARIANT object) {
    return This->lpVtbl->put_ActiveConnection(This,object);
}
static inline HRESULT _Command_get_CommandText(_Command* This,BSTR *str) {
    return This->lpVtbl->get_CommandText(This,str);
}
static inline HRESULT _Command_put_CommandText(_Command* This,BSTR str) {
    return This->lpVtbl->put_CommandText(This,str);
}
static inline HRESULT _Command_get_CommandTimeout(_Command* This,LONG *timeout) {
    return This->lpVtbl->get_CommandTimeout(This,timeout);
}
static inline HRESULT _Command_put_CommandTimeout(_Command* This,LONG timeout) {
    return This->lpVtbl->put_CommandTimeout(This,timeout);
}
static inline HRESULT _Command_get_Prepared(_Command* This,VARIANT_BOOL *prepared) {
    return This->lpVtbl->get_Prepared(This,prepared);
}
static inline HRESULT _Command_put_Prepared(_Command* This,VARIANT_BOOL prepared) {
    return This->lpVtbl->put_Prepared(This,prepared);
}
static inline HRESULT _Command_Execute(_Command* This,VARIANT *records_affected,VARIANT *parameters,LONG options,_Recordset **record_set) {
    return This->lpVtbl->Execute(This,records_affected,parameters,options,record_set);
}
static inline HRESULT _Command_CreateParameter(_Command* This,BSTR name,DataTypeEnum type,ParameterDirectionEnum direction,ADO_LONGPTR size,VARIANT value,_Parameter **parameter) {
    return This->lpVtbl->CreateParameter(This,name,type,direction,size,value,parameter);
}
static inline HRESULT _Command_get_Parameters(_Command* This,Parameters **object) {
    return This->lpVtbl->get_Parameters(This,object);
}
static inline HRESULT _Command_put_CommandType(_Command* This,CommandTypeEnum cmd_type) {
    return This->lpVtbl->put_CommandType(This,cmd_type);
}
static inline HRESULT _Command_get_CommandType(_Command* This,CommandTypeEnum *cmd_type) {
    return This->lpVtbl->get_CommandType(This,cmd_type);
}
static inline HRESULT _Command_get_Name(_Command* This,BSTR *name) {
    return This->lpVtbl->get_Name(This,name);
}
static inline HRESULT _Command_put_Name(_Command* This,BSTR name) {
    return This->lpVtbl->put_Name(This,name);
}
/*** Command25 methods ***/
static inline HRESULT _Command_get_State(_Command* This,LONG *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT _Command_Cancel(_Command* This) {
    return This->lpVtbl->Cancel(This);
}
/*** _Command methods ***/
static inline HRESULT _Command_putref_CommandStream(_Command* This,IUnknown *stream) {
    return This->lpVtbl->putref_CommandStream(This,stream);
}
static inline HRESULT _Command_get_CommandStream(_Command* This,VARIANT *stream) {
    return This->lpVtbl->get_CommandStream(This,stream);
}
static inline HRESULT _Command_put_Dialect(_Command* This,BSTR dialect) {
    return This->lpVtbl->put_Dialect(This,dialect);
}
static inline HRESULT _Command_get_Dialect(_Command* This,BSTR *dialect) {
    return This->lpVtbl->get_Dialect(This,dialect);
}
static inline HRESULT _Command_put_NamedParameters(_Command* This,VARIANT_BOOL named_parameters) {
    return This->lpVtbl->put_NamedParameters(This,named_parameters);
}
static inline HRESULT _Command_get_NamedParameters(_Command* This,VARIANT_BOOL *named_parameters) {
    return This->lpVtbl->get_NamedParameters(This,named_parameters);
}
#endif
#endif

#endif


#endif  /* ___Command_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ConnectionEventsVt interface
 */
#ifndef __ConnectionEventsVt_INTERFACE_DEFINED__
#define __ConnectionEventsVt_INTERFACE_DEFINED__

DEFINE_GUID(IID_ConnectionEventsVt, 0x00000402, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000402-0000-0010-8000-00aa006d2ea4")
ConnectionEventsVt : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE InfoMessage(
        Error *error,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE BeginTransComplete(
        LONG TransactionLevel,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE CommitTransComplete(
        Error *error,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE RollbackTransComplete(
        Error *error,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE WillExecute(
        BSTR *source,
        CursorTypeEnum *cursor_type,
        LockTypeEnum *lock_type,
        LONG *options,
        EventStatusEnum *status,
        _Command *command,
        _Recordset *record_set,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE ExecuteComplete(
        LONG records_affected,
        Error *error,
        EventStatusEnum *status,
        _Command *command,
        _Recordset *record_set,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE WillConnect(
        BSTR *string,
        BSTR *userid,
        BSTR *password,
        LONG *options,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE ConnectComplete(
        Error *error,
        EventStatusEnum *status,
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE Disconnect(
        EventStatusEnum *status,
        _Connection *connection) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ConnectionEventsVt, 0x00000402, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ConnectionEventsVtVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ConnectionEventsVt *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ConnectionEventsVt *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ConnectionEventsVt *This);

    /*** ConnectionEventsVt methods ***/
    HRESULT (STDMETHODCALLTYPE *InfoMessage)(
        ConnectionEventsVt *This,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *BeginTransComplete)(
        ConnectionEventsVt *This,
        LONG TransactionLevel,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *CommitTransComplete)(
        ConnectionEventsVt *This,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *RollbackTransComplete)(
        ConnectionEventsVt *This,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *WillExecute)(
        ConnectionEventsVt *This,
        BSTR *source,
        CursorTypeEnum *cursor_type,
        LockTypeEnum *lock_type,
        LONG *options,
        EventStatusEnum *status,
        _Command *command,
        _Recordset *record_set,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *ExecuteComplete)(
        ConnectionEventsVt *This,
        LONG records_affected,
        Error *error,
        EventStatusEnum *status,
        _Command *command,
        _Recordset *record_set,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *WillConnect)(
        ConnectionEventsVt *This,
        BSTR *string,
        BSTR *userid,
        BSTR *password,
        LONG *options,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *ConnectComplete)(
        ConnectionEventsVt *This,
        Error *error,
        EventStatusEnum *status,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *Disconnect)(
        ConnectionEventsVt *This,
        EventStatusEnum *status,
        _Connection *connection);

    END_INTERFACE
} ConnectionEventsVtVtbl;

interface ConnectionEventsVt {
    CONST_VTBL ConnectionEventsVtVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ConnectionEventsVt_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ConnectionEventsVt_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ConnectionEventsVt_Release(This) (This)->lpVtbl->Release(This)
/*** ConnectionEventsVt methods ***/
#define ConnectionEventsVt_InfoMessage(This,error,status,connection) (This)->lpVtbl->InfoMessage(This,error,status,connection)
#define ConnectionEventsVt_BeginTransComplete(This,TransactionLevel,error,status,connection) (This)->lpVtbl->BeginTransComplete(This,TransactionLevel,error,status,connection)
#define ConnectionEventsVt_CommitTransComplete(This,error,status,connection) (This)->lpVtbl->CommitTransComplete(This,error,status,connection)
#define ConnectionEventsVt_RollbackTransComplete(This,error,status,connection) (This)->lpVtbl->RollbackTransComplete(This,error,status,connection)
#define ConnectionEventsVt_WillExecute(This,source,cursor_type,lock_type,options,status,command,record_set,connection) (This)->lpVtbl->WillExecute(This,source,cursor_type,lock_type,options,status,command,record_set,connection)
#define ConnectionEventsVt_ExecuteComplete(This,records_affected,error,status,command,record_set,connection) (This)->lpVtbl->ExecuteComplete(This,records_affected,error,status,command,record_set,connection)
#define ConnectionEventsVt_WillConnect(This,string,userid,password,options,status,connection) (This)->lpVtbl->WillConnect(This,string,userid,password,options,status,connection)
#define ConnectionEventsVt_ConnectComplete(This,error,status,connection) (This)->lpVtbl->ConnectComplete(This,error,status,connection)
#define ConnectionEventsVt_Disconnect(This,status,connection) (This)->lpVtbl->Disconnect(This,status,connection)
#else
/*** IUnknown methods ***/
static inline HRESULT ConnectionEventsVt_QueryInterface(ConnectionEventsVt* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ConnectionEventsVt_AddRef(ConnectionEventsVt* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ConnectionEventsVt_Release(ConnectionEventsVt* This) {
    return This->lpVtbl->Release(This);
}
/*** ConnectionEventsVt methods ***/
static inline HRESULT ConnectionEventsVt_InfoMessage(ConnectionEventsVt* This,Error *error,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->InfoMessage(This,error,status,connection);
}
static inline HRESULT ConnectionEventsVt_BeginTransComplete(ConnectionEventsVt* This,LONG TransactionLevel,Error *error,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->BeginTransComplete(This,TransactionLevel,error,status,connection);
}
static inline HRESULT ConnectionEventsVt_CommitTransComplete(ConnectionEventsVt* This,Error *error,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->CommitTransComplete(This,error,status,connection);
}
static inline HRESULT ConnectionEventsVt_RollbackTransComplete(ConnectionEventsVt* This,Error *error,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->RollbackTransComplete(This,error,status,connection);
}
static inline HRESULT ConnectionEventsVt_WillExecute(ConnectionEventsVt* This,BSTR *source,CursorTypeEnum *cursor_type,LockTypeEnum *lock_type,LONG *options,EventStatusEnum *status,_Command *command,_Recordset *record_set,_Connection *connection) {
    return This->lpVtbl->WillExecute(This,source,cursor_type,lock_type,options,status,command,record_set,connection);
}
static inline HRESULT ConnectionEventsVt_ExecuteComplete(ConnectionEventsVt* This,LONG records_affected,Error *error,EventStatusEnum *status,_Command *command,_Recordset *record_set,_Connection *connection) {
    return This->lpVtbl->ExecuteComplete(This,records_affected,error,status,command,record_set,connection);
}
static inline HRESULT ConnectionEventsVt_WillConnect(ConnectionEventsVt* This,BSTR *string,BSTR *userid,BSTR *password,LONG *options,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->WillConnect(This,string,userid,password,options,status,connection);
}
static inline HRESULT ConnectionEventsVt_ConnectComplete(ConnectionEventsVt* This,Error *error,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->ConnectComplete(This,error,status,connection);
}
static inline HRESULT ConnectionEventsVt_Disconnect(ConnectionEventsVt* This,EventStatusEnum *status,_Connection *connection) {
    return This->lpVtbl->Disconnect(This,status,connection);
}
#endif
#endif

#endif


#endif  /* __ConnectionEventsVt_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ConnectionEvents dispinterface
 */
#ifndef __ConnectionEvents_DISPINTERFACE_DEFINED__
#define __ConnectionEvents_DISPINTERFACE_DEFINED__

DEFINE_GUID(DIID_ConnectionEvents, 0x00000400, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000400-0000-0010-8000-00aa006d2ea4")
ConnectionEvents : public IDispatch
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ConnectionEvents, 0x00000400, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ConnectionEventsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ConnectionEvents *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ConnectionEvents *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ConnectionEvents *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ConnectionEvents *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ConnectionEvents *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ConnectionEvents *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ConnectionEvents *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    END_INTERFACE
} ConnectionEventsVtbl;

interface ConnectionEvents {
    CONST_VTBL ConnectionEventsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ConnectionEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ConnectionEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ConnectionEvents_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ConnectionEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ConnectionEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ConnectionEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ConnectionEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#else
/*** IUnknown methods ***/
static inline HRESULT ConnectionEvents_QueryInterface(ConnectionEvents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ConnectionEvents_AddRef(ConnectionEvents* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ConnectionEvents_Release(ConnectionEvents* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ConnectionEvents_GetTypeInfoCount(ConnectionEvents* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ConnectionEvents_GetTypeInfo(ConnectionEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ConnectionEvents_GetIDsOfNames(ConnectionEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ConnectionEvents_Invoke(ConnectionEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
#endif
#endif

#endif

#endif  /* __ConnectionEvents_DISPINTERFACE_DEFINED__ */

/*****************************************************************************
 * _Record interface
 */
#ifndef ___Record_INTERFACE_DEFINED__
#define ___Record_INTERFACE_DEFINED__

DEFINE_GUID(IID__Record, 0x00000562, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000562-0000-0010-8000-00aa006d2ea4")
_Record : public _ADO
{
    virtual HRESULT STDMETHODCALLTYPE get_ActiveConnection(
        VARIANT *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_ActiveConnection(
        BSTR connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_ActiveConnection(
        _Connection *connection) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        ObjectStateEnum *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Source(
        VARIANT *source) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Source(
        BSTR source) = 0;

    virtual HRESULT STDMETHODCALLTYPE putref_Source(
        IDispatch *source) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Mode(
        ConnectModeEnum *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Mode(
        ConnectModeEnum mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_ParentURL(
        BSTR *parent_URL) = 0;

    virtual HRESULT STDMETHODCALLTYPE MoveRecord(
        BSTR source,
        BSTR Destination,
        BSTR UserName,
        BSTR Password,
        MoveRecordOptionsEnum Options,
        VARIANT_BOOL Async,
        BSTR *pbstrNewURL) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyRecord(
        BSTR source,
        BSTR destination,
        BSTR username,
        BSTR password,
        CopyRecordOptionsEnum options,
        VARIANT_BOOL async,
        BSTR *new_URL) = 0;

    virtual HRESULT STDMETHODCALLTYPE DeleteRecord(
        BSTR source,
        VARIANT_BOOL async) = 0;

    virtual HRESULT STDMETHODCALLTYPE Open(
        VARIANT source,
        VARIANT active_connection,
        ConnectModeEnum mode,
        RecordCreateOptionsEnum create_options,
        RecordOpenOptionsEnum options,
        BSTR username,
        BSTR password) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Fields(
        Fields **fields) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RecordType(
        RecordTypeEnum *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetChildren(
        _Recordset **record_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Record, 0x00000562, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _RecordVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Record *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Record *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Record *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Record *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Record *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Record *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Record *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _ADO methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Properties)(
        _Record *This,
        Properties **object);

    /*** _Record methods ***/
    HRESULT (STDMETHODCALLTYPE *get_ActiveConnection)(
        _Record *This,
        VARIANT *connection);

    HRESULT (STDMETHODCALLTYPE *put_ActiveConnection)(
        _Record *This,
        BSTR connection);

    HRESULT (STDMETHODCALLTYPE *putref_ActiveConnection)(
        _Record *This,
        _Connection *connection);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        _Record *This,
        ObjectStateEnum *state);

    HRESULT (STDMETHODCALLTYPE *get_Source)(
        _Record *This,
        VARIANT *source);

    HRESULT (STDMETHODCALLTYPE *put_Source)(
        _Record *This,
        BSTR source);

    HRESULT (STDMETHODCALLTYPE *putref_Source)(
        _Record *This,
        IDispatch *source);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        _Record *This,
        ConnectModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        _Record *This,
        ConnectModeEnum mode);

    HRESULT (STDMETHODCALLTYPE *get_ParentURL)(
        _Record *This,
        BSTR *parent_URL);

    HRESULT (STDMETHODCALLTYPE *MoveRecord)(
        _Record *This,
        BSTR source,
        BSTR Destination,
        BSTR UserName,
        BSTR Password,
        MoveRecordOptionsEnum Options,
        VARIANT_BOOL Async,
        BSTR *pbstrNewURL);

    HRESULT (STDMETHODCALLTYPE *CopyRecord)(
        _Record *This,
        BSTR source,
        BSTR destination,
        BSTR username,
        BSTR password,
        CopyRecordOptionsEnum options,
        VARIANT_BOOL async,
        BSTR *new_URL);

    HRESULT (STDMETHODCALLTYPE *DeleteRecord)(
        _Record *This,
        BSTR source,
        VARIANT_BOOL async);

    HRESULT (STDMETHODCALLTYPE *Open)(
        _Record *This,
        VARIANT source,
        VARIANT active_connection,
        ConnectModeEnum mode,
        RecordCreateOptionsEnum create_options,
        RecordOpenOptionsEnum options,
        BSTR username,
        BSTR password);

    HRESULT (STDMETHODCALLTYPE *Close)(
        _Record *This);

    HRESULT (STDMETHODCALLTYPE *get_Fields)(
        _Record *This,
        Fields **fields);

    HRESULT (STDMETHODCALLTYPE *get_RecordType)(
        _Record *This,
        RecordTypeEnum *type);

    HRESULT (STDMETHODCALLTYPE *GetChildren)(
        _Record *This,
        _Recordset **record_set);

    HRESULT (STDMETHODCALLTYPE *Cancel)(
        _Record *This);

    END_INTERFACE
} _RecordVtbl;

interface _Record {
    CONST_VTBL _RecordVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Record_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Record_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Record_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Record_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Record_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Record_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Record_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _ADO methods ***/
#define _Record_get_Properties(This,object) (This)->lpVtbl->get_Properties(This,object)
/*** _Record methods ***/
#define _Record_get_ActiveConnection(This,connection) (This)->lpVtbl->get_ActiveConnection(This,connection)
#define _Record_put_ActiveConnection(This,connection) (This)->lpVtbl->put_ActiveConnection(This,connection)
#define _Record_putref_ActiveConnection(This,connection) (This)->lpVtbl->putref_ActiveConnection(This,connection)
#define _Record_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define _Record_get_Source(This,source) (This)->lpVtbl->get_Source(This,source)
#define _Record_put_Source(This,source) (This)->lpVtbl->put_Source(This,source)
#define _Record_putref_Source(This,source) (This)->lpVtbl->putref_Source(This,source)
#define _Record_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define _Record_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define _Record_get_ParentURL(This,parent_URL) (This)->lpVtbl->get_ParentURL(This,parent_URL)
#define _Record_MoveRecord(This,source,Destination,UserName,Password,Options,Async,pbstrNewURL) (This)->lpVtbl->MoveRecord(This,source,Destination,UserName,Password,Options,Async,pbstrNewURL)
#define _Record_CopyRecord(This,source,destination,username,password,options,async,new_URL) (This)->lpVtbl->CopyRecord(This,source,destination,username,password,options,async,new_URL)
#define _Record_DeleteRecord(This,source,async) (This)->lpVtbl->DeleteRecord(This,source,async)
#define _Record_Open(This,source,active_connection,mode,create_options,options,username,password) (This)->lpVtbl->Open(This,source,active_connection,mode,create_options,options,username,password)
#define _Record_Close(This) (This)->lpVtbl->Close(This)
#define _Record_get_Fields(This,fields) (This)->lpVtbl->get_Fields(This,fields)
#define _Record_get_RecordType(This,type) (This)->lpVtbl->get_RecordType(This,type)
#define _Record_GetChildren(This,record_set) (This)->lpVtbl->GetChildren(This,record_set)
#define _Record_Cancel(This) (This)->lpVtbl->Cancel(This)
#else
/*** IUnknown methods ***/
static inline HRESULT _Record_QueryInterface(_Record* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Record_AddRef(_Record* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Record_Release(_Record* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Record_GetTypeInfoCount(_Record* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Record_GetTypeInfo(_Record* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Record_GetIDsOfNames(_Record* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Record_Invoke(_Record* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _ADO methods ***/
static inline HRESULT _Record_get_Properties(_Record* This,Properties **object) {
    return This->lpVtbl->get_Properties(This,object);
}
/*** _Record methods ***/
static inline HRESULT _Record_get_ActiveConnection(_Record* This,VARIANT *connection) {
    return This->lpVtbl->get_ActiveConnection(This,connection);
}
static inline HRESULT _Record_put_ActiveConnection(_Record* This,BSTR connection) {
    return This->lpVtbl->put_ActiveConnection(This,connection);
}
static inline HRESULT _Record_putref_ActiveConnection(_Record* This,_Connection *connection) {
    return This->lpVtbl->putref_ActiveConnection(This,connection);
}
static inline HRESULT _Record_get_State(_Record* This,ObjectStateEnum *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT _Record_get_Source(_Record* This,VARIANT *source) {
    return This->lpVtbl->get_Source(This,source);
}
static inline HRESULT _Record_put_Source(_Record* This,BSTR source) {
    return This->lpVtbl->put_Source(This,source);
}
static inline HRESULT _Record_putref_Source(_Record* This,IDispatch *source) {
    return This->lpVtbl->putref_Source(This,source);
}
static inline HRESULT _Record_get_Mode(_Record* This,ConnectModeEnum *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static inline HRESULT _Record_put_Mode(_Record* This,ConnectModeEnum mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static inline HRESULT _Record_get_ParentURL(_Record* This,BSTR *parent_URL) {
    return This->lpVtbl->get_ParentURL(This,parent_URL);
}
static inline HRESULT _Record_MoveRecord(_Record* This,BSTR source,BSTR Destination,BSTR UserName,BSTR Password,MoveRecordOptionsEnum Options,VARIANT_BOOL Async,BSTR *pbstrNewURL) {
    return This->lpVtbl->MoveRecord(This,source,Destination,UserName,Password,Options,Async,pbstrNewURL);
}
static inline HRESULT _Record_CopyRecord(_Record* This,BSTR source,BSTR destination,BSTR username,BSTR password,CopyRecordOptionsEnum options,VARIANT_BOOL async,BSTR *new_URL) {
    return This->lpVtbl->CopyRecord(This,source,destination,username,password,options,async,new_URL);
}
static inline HRESULT _Record_DeleteRecord(_Record* This,BSTR source,VARIANT_BOOL async) {
    return This->lpVtbl->DeleteRecord(This,source,async);
}
static inline HRESULT _Record_Open(_Record* This,VARIANT source,VARIANT active_connection,ConnectModeEnum mode,RecordCreateOptionsEnum create_options,RecordOpenOptionsEnum options,BSTR username,BSTR password) {
    return This->lpVtbl->Open(This,source,active_connection,mode,create_options,options,username,password);
}
static inline HRESULT _Record_Close(_Record* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT _Record_get_Fields(_Record* This,Fields **fields) {
    return This->lpVtbl->get_Fields(This,fields);
}
static inline HRESULT _Record_get_RecordType(_Record* This,RecordTypeEnum *type) {
    return This->lpVtbl->get_RecordType(This,type);
}
static inline HRESULT _Record_GetChildren(_Record* This,_Recordset **record_set) {
    return This->lpVtbl->GetChildren(This,record_set);
}
static inline HRESULT _Record_Cancel(_Record* This) {
    return This->lpVtbl->Cancel(This);
}
#endif
#endif

#endif


#endif  /* ___Record_INTERFACE_DEFINED__ */

/*****************************************************************************
 * _Stream interface
 */
#ifndef ___Stream_INTERFACE_DEFINED__
#define ___Stream_INTERFACE_DEFINED__

DEFINE_GUID(IID__Stream, 0x00000565, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000565-0000-0010-8000-00aa006d2ea4")
_Stream : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Size(
        ADO_LONGPTR *size) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_EOS(
        VARIANT_BOOL *eos) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Position(
        ADO_LONGPTR *position) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Position(
        ADO_LONGPTR position) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Type(
        StreamTypeEnum *type) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Type(
        StreamTypeEnum type) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_LineSeparator(
        LineSeparatorEnum *separator) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_LineSeparator(
        LineSeparatorEnum separator) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_State(
        ObjectStateEnum *state) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Mode(
        ConnectModeEnum *mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Mode(
        ConnectModeEnum mode) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Charset(
        BSTR *charset) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Charset(
        BSTR charset) = 0;

    virtual HRESULT STDMETHODCALLTYPE Read(
        LONG num_bytes,
        VARIANT *val) = 0;

    virtual HRESULT STDMETHODCALLTYPE Open(
        VARIANT source,
        ConnectModeEnum mode,
        StreamOpenOptionsEnum options,
        BSTR username,
        BSTR password) = 0;

    virtual HRESULT STDMETHODCALLTYPE Close(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SkipLine(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE Write(
        VARIANT buffer) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetEOS(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE CopyTo(
        _Stream *dest,
        ADO_LONGPTR size = -1) = 0;

    virtual HRESULT STDMETHODCALLTYPE Flush(
        ) = 0;

    virtual HRESULT STDMETHODCALLTYPE SaveToFile(
        BSTR FileName,
        SaveOptionsEnum options = adSaveCreateNotExist) = 0;

    virtual HRESULT STDMETHODCALLTYPE LoadFromFile(
        BSTR filename) = 0;

    virtual HRESULT STDMETHODCALLTYPE ReadText(
        LONG size,
        BSTR *str) = 0;

    virtual HRESULT STDMETHODCALLTYPE WriteText(
        BSTR data,
        StreamWriteEnum options = adWriteChar) = 0;

    virtual HRESULT STDMETHODCALLTYPE Cancel(
        ) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(_Stream, 0x00000565, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct _StreamVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        _Stream *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        _Stream *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        _Stream *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        _Stream *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        _Stream *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        _Stream *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        _Stream *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** _Stream methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Size)(
        _Stream *This,
        ADO_LONGPTR *size);

    HRESULT (STDMETHODCALLTYPE *get_EOS)(
        _Stream *This,
        VARIANT_BOOL *eos);

    HRESULT (STDMETHODCALLTYPE *get_Position)(
        _Stream *This,
        ADO_LONGPTR *position);

    HRESULT (STDMETHODCALLTYPE *put_Position)(
        _Stream *This,
        ADO_LONGPTR position);

    HRESULT (STDMETHODCALLTYPE *get_Type)(
        _Stream *This,
        StreamTypeEnum *type);

    HRESULT (STDMETHODCALLTYPE *put_Type)(
        _Stream *This,
        StreamTypeEnum type);

    HRESULT (STDMETHODCALLTYPE *get_LineSeparator)(
        _Stream *This,
        LineSeparatorEnum *separator);

    HRESULT (STDMETHODCALLTYPE *put_LineSeparator)(
        _Stream *This,
        LineSeparatorEnum separator);

    HRESULT (STDMETHODCALLTYPE *get_State)(
        _Stream *This,
        ObjectStateEnum *state);

    HRESULT (STDMETHODCALLTYPE *get_Mode)(
        _Stream *This,
        ConnectModeEnum *mode);

    HRESULT (STDMETHODCALLTYPE *put_Mode)(
        _Stream *This,
        ConnectModeEnum mode);

    HRESULT (STDMETHODCALLTYPE *get_Charset)(
        _Stream *This,
        BSTR *charset);

    HRESULT (STDMETHODCALLTYPE *put_Charset)(
        _Stream *This,
        BSTR charset);

    HRESULT (STDMETHODCALLTYPE *Read)(
        _Stream *This,
        LONG num_bytes,
        VARIANT *val);

    HRESULT (STDMETHODCALLTYPE *Open)(
        _Stream *This,
        VARIANT source,
        ConnectModeEnum mode,
        StreamOpenOptionsEnum options,
        BSTR username,
        BSTR password);

    HRESULT (STDMETHODCALLTYPE *Close)(
        _Stream *This);

    HRESULT (STDMETHODCALLTYPE *SkipLine)(
        _Stream *This);

    HRESULT (STDMETHODCALLTYPE *Write)(
        _Stream *This,
        VARIANT buffer);

    HRESULT (STDMETHODCALLTYPE *SetEOS)(
        _Stream *This);

    HRESULT (STDMETHODCALLTYPE *CopyTo)(
        _Stream *This,
        _Stream *dest,
        ADO_LONGPTR size);

    HRESULT (STDMETHODCALLTYPE *Flush)(
        _Stream *This);

    HRESULT (STDMETHODCALLTYPE *SaveToFile)(
        _Stream *This,
        BSTR FileName,
        SaveOptionsEnum options);

    HRESULT (STDMETHODCALLTYPE *LoadFromFile)(
        _Stream *This,
        BSTR filename);

    HRESULT (STDMETHODCALLTYPE *ReadText)(
        _Stream *This,
        LONG size,
        BSTR *str);

    HRESULT (STDMETHODCALLTYPE *WriteText)(
        _Stream *This,
        BSTR data,
        StreamWriteEnum options);

    HRESULT (STDMETHODCALLTYPE *Cancel)(
        _Stream *This);

    END_INTERFACE
} _StreamVtbl;

interface _Stream {
    CONST_VTBL _StreamVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define _Stream_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define _Stream_AddRef(This) (This)->lpVtbl->AddRef(This)
#define _Stream_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define _Stream_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define _Stream_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define _Stream_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define _Stream_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** _Stream methods ***/
#define _Stream_get_Size(This,size) (This)->lpVtbl->get_Size(This,size)
#define _Stream_get_EOS(This,eos) (This)->lpVtbl->get_EOS(This,eos)
#define _Stream_get_Position(This,position) (This)->lpVtbl->get_Position(This,position)
#define _Stream_put_Position(This,position) (This)->lpVtbl->put_Position(This,position)
#define _Stream_get_Type(This,type) (This)->lpVtbl->get_Type(This,type)
#define _Stream_put_Type(This,type) (This)->lpVtbl->put_Type(This,type)
#define _Stream_get_LineSeparator(This,separator) (This)->lpVtbl->get_LineSeparator(This,separator)
#define _Stream_put_LineSeparator(This,separator) (This)->lpVtbl->put_LineSeparator(This,separator)
#define _Stream_get_State(This,state) (This)->lpVtbl->get_State(This,state)
#define _Stream_get_Mode(This,mode) (This)->lpVtbl->get_Mode(This,mode)
#define _Stream_put_Mode(This,mode) (This)->lpVtbl->put_Mode(This,mode)
#define _Stream_get_Charset(This,charset) (This)->lpVtbl->get_Charset(This,charset)
#define _Stream_put_Charset(This,charset) (This)->lpVtbl->put_Charset(This,charset)
#define _Stream_Read(This,num_bytes,val) (This)->lpVtbl->Read(This,num_bytes,val)
#define _Stream_Open(This,source,mode,options,username,password) (This)->lpVtbl->Open(This,source,mode,options,username,password)
#define _Stream_Close(This) (This)->lpVtbl->Close(This)
#define _Stream_SkipLine(This) (This)->lpVtbl->SkipLine(This)
#define _Stream_Write(This,buffer) (This)->lpVtbl->Write(This,buffer)
#define _Stream_SetEOS(This) (This)->lpVtbl->SetEOS(This)
#define _Stream_CopyTo(This,dest,size) (This)->lpVtbl->CopyTo(This,dest,size)
#define _Stream_Flush(This) (This)->lpVtbl->Flush(This)
#define _Stream_SaveToFile(This,FileName,options) (This)->lpVtbl->SaveToFile(This,FileName,options)
#define _Stream_LoadFromFile(This,filename) (This)->lpVtbl->LoadFromFile(This,filename)
#define _Stream_ReadText(This,size,str) (This)->lpVtbl->ReadText(This,size,str)
#define _Stream_WriteText(This,data,options) (This)->lpVtbl->WriteText(This,data,options)
#define _Stream_Cancel(This) (This)->lpVtbl->Cancel(This)
#else
/*** IUnknown methods ***/
static inline HRESULT _Stream_QueryInterface(_Stream* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG _Stream_AddRef(_Stream* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG _Stream_Release(_Stream* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT _Stream_GetTypeInfoCount(_Stream* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT _Stream_GetTypeInfo(_Stream* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT _Stream_GetIDsOfNames(_Stream* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT _Stream_Invoke(_Stream* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** _Stream methods ***/
static inline HRESULT _Stream_get_Size(_Stream* This,ADO_LONGPTR *size) {
    return This->lpVtbl->get_Size(This,size);
}
static inline HRESULT _Stream_get_EOS(_Stream* This,VARIANT_BOOL *eos) {
    return This->lpVtbl->get_EOS(This,eos);
}
static inline HRESULT _Stream_get_Position(_Stream* This,ADO_LONGPTR *position) {
    return This->lpVtbl->get_Position(This,position);
}
static inline HRESULT _Stream_put_Position(_Stream* This,ADO_LONGPTR position) {
    return This->lpVtbl->put_Position(This,position);
}
static inline HRESULT _Stream_get_Type(_Stream* This,StreamTypeEnum *type) {
    return This->lpVtbl->get_Type(This,type);
}
static inline HRESULT _Stream_put_Type(_Stream* This,StreamTypeEnum type) {
    return This->lpVtbl->put_Type(This,type);
}
static inline HRESULT _Stream_get_LineSeparator(_Stream* This,LineSeparatorEnum *separator) {
    return This->lpVtbl->get_LineSeparator(This,separator);
}
static inline HRESULT _Stream_put_LineSeparator(_Stream* This,LineSeparatorEnum separator) {
    return This->lpVtbl->put_LineSeparator(This,separator);
}
static inline HRESULT _Stream_get_State(_Stream* This,ObjectStateEnum *state) {
    return This->lpVtbl->get_State(This,state);
}
static inline HRESULT _Stream_get_Mode(_Stream* This,ConnectModeEnum *mode) {
    return This->lpVtbl->get_Mode(This,mode);
}
static inline HRESULT _Stream_put_Mode(_Stream* This,ConnectModeEnum mode) {
    return This->lpVtbl->put_Mode(This,mode);
}
static inline HRESULT _Stream_get_Charset(_Stream* This,BSTR *charset) {
    return This->lpVtbl->get_Charset(This,charset);
}
static inline HRESULT _Stream_put_Charset(_Stream* This,BSTR charset) {
    return This->lpVtbl->put_Charset(This,charset);
}
static inline HRESULT _Stream_Read(_Stream* This,LONG num_bytes,VARIANT *val) {
    return This->lpVtbl->Read(This,num_bytes,val);
}
static inline HRESULT _Stream_Open(_Stream* This,VARIANT source,ConnectModeEnum mode,StreamOpenOptionsEnum options,BSTR username,BSTR password) {
    return This->lpVtbl->Open(This,source,mode,options,username,password);
}
static inline HRESULT _Stream_Close(_Stream* This) {
    return This->lpVtbl->Close(This);
}
static inline HRESULT _Stream_SkipLine(_Stream* This) {
    return This->lpVtbl->SkipLine(This);
}
static inline HRESULT _Stream_Write(_Stream* This,VARIANT buffer) {
    return This->lpVtbl->Write(This,buffer);
}
static inline HRESULT _Stream_SetEOS(_Stream* This) {
    return This->lpVtbl->SetEOS(This);
}
static inline HRESULT _Stream_CopyTo(_Stream* This,_Stream *dest,ADO_LONGPTR size) {
    return This->lpVtbl->CopyTo(This,dest,size);
}
static inline HRESULT _Stream_Flush(_Stream* This) {
    return This->lpVtbl->Flush(This);
}
static inline HRESULT _Stream_SaveToFile(_Stream* This,BSTR FileName,SaveOptionsEnum options) {
    return This->lpVtbl->SaveToFile(This,FileName,options);
}
static inline HRESULT _Stream_LoadFromFile(_Stream* This,BSTR filename) {
    return This->lpVtbl->LoadFromFile(This,filename);
}
static inline HRESULT _Stream_ReadText(_Stream* This,LONG size,BSTR *str) {
    return This->lpVtbl->ReadText(This,size,str);
}
static inline HRESULT _Stream_WriteText(_Stream* This,BSTR data,StreamWriteEnum options) {
    return This->lpVtbl->WriteText(This,data,options);
}
static inline HRESULT _Stream_Cancel(_Stream* This) {
    return This->lpVtbl->Cancel(This);
}
#endif
#endif

#endif


#endif  /* ___Stream_INTERFACE_DEFINED__ */

/*****************************************************************************
 * RecordsetEvents dispinterface
 */
#ifndef __RecordsetEvents_DISPINTERFACE_DEFINED__
#define __RecordsetEvents_DISPINTERFACE_DEFINED__

DEFINE_GUID(DIID_RecordsetEvents, 0x00000266, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000266-0000-0010-8000-00aa006d2ea4")
RecordsetEvents : public IDispatch
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(RecordsetEvents, 0x00000266, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct RecordsetEventsVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        RecordsetEvents *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        RecordsetEvents *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        RecordsetEvents *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        RecordsetEvents *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        RecordsetEvents *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        RecordsetEvents *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        RecordsetEvents *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    END_INTERFACE
} RecordsetEventsVtbl;

interface RecordsetEvents {
    CONST_VTBL RecordsetEventsVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define RecordsetEvents_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define RecordsetEvents_AddRef(This) (This)->lpVtbl->AddRef(This)
#define RecordsetEvents_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define RecordsetEvents_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define RecordsetEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define RecordsetEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define RecordsetEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#else
/*** IUnknown methods ***/
static inline HRESULT RecordsetEvents_QueryInterface(RecordsetEvents* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG RecordsetEvents_AddRef(RecordsetEvents* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG RecordsetEvents_Release(RecordsetEvents* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT RecordsetEvents_GetTypeInfoCount(RecordsetEvents* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT RecordsetEvents_GetTypeInfo(RecordsetEvents* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT RecordsetEvents_GetIDsOfNames(RecordsetEvents* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT RecordsetEvents_Invoke(RecordsetEvents* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
#endif
#endif

#endif

#endif  /* __RecordsetEvents_DISPINTERFACE_DEFINED__ */

/*****************************************************************************
 * ADODebugging interface
 */
#ifndef __ADODebugging_INTERFACE_DEFINED__
#define __ADODebugging_INTERFACE_DEFINED__

DEFINE_GUID(IID_ADODebugging, 0x00000538, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000538-0000-0010-8000-00aa006d2ea4")
ADODebugging : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE IsGlobalDebugMode(
        VARIANT_BOOL *debugging_on) = 0;

    virtual HRESULT STDMETHODCALLTYPE SetGlobalDebugMode(
        IUnknown *debugger,
        VARIANT_BOOL debugging_on) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ADODebugging, 0x00000538, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ADODebuggingVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ADODebugging *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ADODebugging *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ADODebugging *This);

    /*** ADODebugging methods ***/
    HRESULT (STDMETHODCALLTYPE *IsGlobalDebugMode)(
        ADODebugging *This,
        VARIANT_BOOL *debugging_on);

    HRESULT (STDMETHODCALLTYPE *SetGlobalDebugMode)(
        ADODebugging *This,
        IUnknown *debugger,
        VARIANT_BOOL debugging_on);

    END_INTERFACE
} ADODebuggingVtbl;

interface ADODebugging {
    CONST_VTBL ADODebuggingVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ADODebugging_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ADODebugging_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ADODebugging_Release(This) (This)->lpVtbl->Release(This)
/*** ADODebugging methods ***/
#define ADODebugging_IsGlobalDebugMode(This,debugging_on) (This)->lpVtbl->IsGlobalDebugMode(This,debugging_on)
#define ADODebugging_SetGlobalDebugMode(This,debugger,debugging_on) (This)->lpVtbl->SetGlobalDebugMode(This,debugger,debugging_on)
#else
/*** IUnknown methods ***/
static inline HRESULT ADODebugging_QueryInterface(ADODebugging* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ADODebugging_AddRef(ADODebugging* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ADODebugging_Release(ADODebugging* This) {
    return This->lpVtbl->Release(This);
}
/*** ADODebugging methods ***/
static inline HRESULT ADODebugging_IsGlobalDebugMode(ADODebugging* This,VARIANT_BOOL *debugging_on) {
    return This->lpVtbl->IsGlobalDebugMode(This,debugging_on);
}
static inline HRESULT ADODebugging_SetGlobalDebugMode(ADODebugging* This,IUnknown *debugger,VARIANT_BOOL debugging_on) {
    return This->lpVtbl->SetGlobalDebugMode(This,debugger,debugging_on);
}
#endif
#endif

#endif


#endif  /* __ADODebugging_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ADOConnectionConstruction15 interface
 */
#ifndef __ADOConnectionConstruction15_INTERFACE_DEFINED__
#define __ADOConnectionConstruction15_INTERFACE_DEFINED__

DEFINE_GUID(IID_ADOConnectionConstruction15, 0x00000516, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000516-0000-0010-8000-00aa006d2ea4")
ADOConnectionConstruction15 : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_DSO(
        IUnknown **dso) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Session(
        IUnknown **session) = 0;

    virtual HRESULT STDMETHODCALLTYPE WrapDSOandSession(
        IUnknown *dso,
        IUnknown *session) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ADOConnectionConstruction15, 0x00000516, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ADOConnectionConstruction15Vtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ADOConnectionConstruction15 *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ADOConnectionConstruction15 *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ADOConnectionConstruction15 *This);

    /*** ADOConnectionConstruction15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_DSO)(
        ADOConnectionConstruction15 *This,
        IUnknown **dso);

    HRESULT (STDMETHODCALLTYPE *get_Session)(
        ADOConnectionConstruction15 *This,
        IUnknown **session);

    HRESULT (STDMETHODCALLTYPE *WrapDSOandSession)(
        ADOConnectionConstruction15 *This,
        IUnknown *dso,
        IUnknown *session);

    END_INTERFACE
} ADOConnectionConstruction15Vtbl;

interface ADOConnectionConstruction15 {
    CONST_VTBL ADOConnectionConstruction15Vtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ADOConnectionConstruction15_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ADOConnectionConstruction15_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ADOConnectionConstruction15_Release(This) (This)->lpVtbl->Release(This)
/*** ADOConnectionConstruction15 methods ***/
#define ADOConnectionConstruction15_get_DSO(This,dso) (This)->lpVtbl->get_DSO(This,dso)
#define ADOConnectionConstruction15_get_Session(This,session) (This)->lpVtbl->get_Session(This,session)
#define ADOConnectionConstruction15_WrapDSOandSession(This,dso,session) (This)->lpVtbl->WrapDSOandSession(This,dso,session)
#else
/*** IUnknown methods ***/
static inline HRESULT ADOConnectionConstruction15_QueryInterface(ADOConnectionConstruction15* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ADOConnectionConstruction15_AddRef(ADOConnectionConstruction15* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ADOConnectionConstruction15_Release(ADOConnectionConstruction15* This) {
    return This->lpVtbl->Release(This);
}
/*** ADOConnectionConstruction15 methods ***/
static inline HRESULT ADOConnectionConstruction15_get_DSO(ADOConnectionConstruction15* This,IUnknown **dso) {
    return This->lpVtbl->get_DSO(This,dso);
}
static inline HRESULT ADOConnectionConstruction15_get_Session(ADOConnectionConstruction15* This,IUnknown **session) {
    return This->lpVtbl->get_Session(This,session);
}
static inline HRESULT ADOConnectionConstruction15_WrapDSOandSession(ADOConnectionConstruction15* This,IUnknown *dso,IUnknown *session) {
    return This->lpVtbl->WrapDSOandSession(This,dso,session);
}
#endif
#endif

#endif


#endif  /* __ADOConnectionConstruction15_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ADOConnectionConstruction interface
 */
#ifndef __ADOConnectionConstruction_INTERFACE_DEFINED__
#define __ADOConnectionConstruction_INTERFACE_DEFINED__

DEFINE_GUID(IID_ADOConnectionConstruction, 0x00000551, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000551-0000-0010-8000-00aa006d2ea4")
ADOConnectionConstruction : public ADOConnectionConstruction15
{
};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ADOConnectionConstruction, 0x00000551, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ADOConnectionConstructionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ADOConnectionConstruction *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ADOConnectionConstruction *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ADOConnectionConstruction *This);

    /*** ADOConnectionConstruction15 methods ***/
    HRESULT (STDMETHODCALLTYPE *get_DSO)(
        ADOConnectionConstruction *This,
        IUnknown **dso);

    HRESULT (STDMETHODCALLTYPE *get_Session)(
        ADOConnectionConstruction *This,
        IUnknown **session);

    HRESULT (STDMETHODCALLTYPE *WrapDSOandSession)(
        ADOConnectionConstruction *This,
        IUnknown *dso,
        IUnknown *session);

    END_INTERFACE
} ADOConnectionConstructionVtbl;

interface ADOConnectionConstruction {
    CONST_VTBL ADOConnectionConstructionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ADOConnectionConstruction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ADOConnectionConstruction_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ADOConnectionConstruction_Release(This) (This)->lpVtbl->Release(This)
/*** ADOConnectionConstruction15 methods ***/
#define ADOConnectionConstruction_get_DSO(This,dso) (This)->lpVtbl->get_DSO(This,dso)
#define ADOConnectionConstruction_get_Session(This,session) (This)->lpVtbl->get_Session(This,session)
#define ADOConnectionConstruction_WrapDSOandSession(This,dso,session) (This)->lpVtbl->WrapDSOandSession(This,dso,session)
#else
/*** IUnknown methods ***/
static inline HRESULT ADOConnectionConstruction_QueryInterface(ADOConnectionConstruction* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ADOConnectionConstruction_AddRef(ADOConnectionConstruction* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ADOConnectionConstruction_Release(ADOConnectionConstruction* This) {
    return This->lpVtbl->Release(This);
}
/*** ADOConnectionConstruction15 methods ***/
static inline HRESULT ADOConnectionConstruction_get_DSO(ADOConnectionConstruction* This,IUnknown **dso) {
    return This->lpVtbl->get_DSO(This,dso);
}
static inline HRESULT ADOConnectionConstruction_get_Session(ADOConnectionConstruction* This,IUnknown **session) {
    return This->lpVtbl->get_Session(This,session);
}
static inline HRESULT ADOConnectionConstruction_WrapDSOandSession(ADOConnectionConstruction* This,IUnknown *dso,IUnknown *session) {
    return This->lpVtbl->WrapDSOandSession(This,dso,session);
}
#endif
#endif

#endif


#endif  /* __ADOConnectionConstruction_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ADOCommandConstruction interface
 */
#ifndef __ADOCommandConstruction_INTERFACE_DEFINED__
#define __ADOCommandConstruction_INTERFACE_DEFINED__

DEFINE_GUID(IID_ADOCommandConstruction, 0x00000517, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000517-0000-0010-8000-00aa006d2ea4")
ADOCommandConstruction : public IUnknown
{
    virtual HRESULT STDMETHODCALLTYPE get_OLEDBCommand(
        IUnknown **command) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_OLEDBCommand(
        IUnknown *command) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ADOCommandConstruction, 0x00000517, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ADOCommandConstructionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ADOCommandConstruction *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ADOCommandConstruction *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ADOCommandConstruction *This);

    /*** ADOCommandConstruction methods ***/
    HRESULT (STDMETHODCALLTYPE *get_OLEDBCommand)(
        ADOCommandConstruction *This,
        IUnknown **command);

    HRESULT (STDMETHODCALLTYPE *put_OLEDBCommand)(
        ADOCommandConstruction *This,
        IUnknown *command);

    END_INTERFACE
} ADOCommandConstructionVtbl;

interface ADOCommandConstruction {
    CONST_VTBL ADOCommandConstructionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ADOCommandConstruction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ADOCommandConstruction_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ADOCommandConstruction_Release(This) (This)->lpVtbl->Release(This)
/*** ADOCommandConstruction methods ***/
#define ADOCommandConstruction_get_OLEDBCommand(This,command) (This)->lpVtbl->get_OLEDBCommand(This,command)
#define ADOCommandConstruction_put_OLEDBCommand(This,command) (This)->lpVtbl->put_OLEDBCommand(This,command)
#else
/*** IUnknown methods ***/
static inline HRESULT ADOCommandConstruction_QueryInterface(ADOCommandConstruction* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ADOCommandConstruction_AddRef(ADOCommandConstruction* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ADOCommandConstruction_Release(ADOCommandConstruction* This) {
    return This->lpVtbl->Release(This);
}
/*** ADOCommandConstruction methods ***/
static inline HRESULT ADOCommandConstruction_get_OLEDBCommand(ADOCommandConstruction* This,IUnknown **command) {
    return This->lpVtbl->get_OLEDBCommand(This,command);
}
static inline HRESULT ADOCommandConstruction_put_OLEDBCommand(ADOCommandConstruction* This,IUnknown *command) {
    return This->lpVtbl->put_OLEDBCommand(This,command);
}
#endif
#endif

#endif


#endif  /* __ADOCommandConstruction_INTERFACE_DEFINED__ */

/*****************************************************************************
 * ADORecordsetConstruction interface
 */
#ifndef __ADORecordsetConstruction_INTERFACE_DEFINED__
#define __ADORecordsetConstruction_INTERFACE_DEFINED__

DEFINE_GUID(IID_ADORecordsetConstruction, 0x00000283, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);
#if defined(__cplusplus) && !defined(CINTERFACE)
MIDL_INTERFACE("00000283-0000-0010-8000-00aa006d2ea4")
ADORecordsetConstruction : public IDispatch
{
    virtual HRESULT STDMETHODCALLTYPE get_Rowset(
        IUnknown **row_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Rowset(
        IUnknown *row_set) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_Chapter(
        ADO_LONGPTR *chapter) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_Chapter(
        ADO_LONGPTR chapter) = 0;

    virtual HRESULT STDMETHODCALLTYPE get_RowPosition(
        IUnknown **row_pos) = 0;

    virtual HRESULT STDMETHODCALLTYPE put_RowPosition(
        IUnknown *row_pos) = 0;

};
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(ADORecordsetConstruction, 0x00000283, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#else
typedef struct ADORecordsetConstructionVtbl {
    BEGIN_INTERFACE

    /*** IUnknown methods ***/
    HRESULT (STDMETHODCALLTYPE *QueryInterface)(
        ADORecordsetConstruction *This,
        REFIID riid,
        void **ppvObject);

    ULONG (STDMETHODCALLTYPE *AddRef)(
        ADORecordsetConstruction *This);

    ULONG (STDMETHODCALLTYPE *Release)(
        ADORecordsetConstruction *This);

    /*** IDispatch methods ***/
    HRESULT (STDMETHODCALLTYPE *GetTypeInfoCount)(
        ADORecordsetConstruction *This,
        UINT *pctinfo);

    HRESULT (STDMETHODCALLTYPE *GetTypeInfo)(
        ADORecordsetConstruction *This,
        UINT iTInfo,
        LCID lcid,
        ITypeInfo **ppTInfo);

    HRESULT (STDMETHODCALLTYPE *GetIDsOfNames)(
        ADORecordsetConstruction *This,
        REFIID riid,
        LPOLESTR *rgszNames,
        UINT cNames,
        LCID lcid,
        DISPID *rgDispId);

    HRESULT (STDMETHODCALLTYPE *Invoke)(
        ADORecordsetConstruction *This,
        DISPID dispIdMember,
        REFIID riid,
        LCID lcid,
        WORD wFlags,
        DISPPARAMS *pDispParams,
        VARIANT *pVarResult,
        EXCEPINFO *pExcepInfo,
        UINT *puArgErr);

    /*** ADORecordsetConstruction methods ***/
    HRESULT (STDMETHODCALLTYPE *get_Rowset)(
        ADORecordsetConstruction *This,
        IUnknown **row_set);

    HRESULT (STDMETHODCALLTYPE *put_Rowset)(
        ADORecordsetConstruction *This,
        IUnknown *row_set);

    HRESULT (STDMETHODCALLTYPE *get_Chapter)(
        ADORecordsetConstruction *This,
        ADO_LONGPTR *chapter);

    HRESULT (STDMETHODCALLTYPE *put_Chapter)(
        ADORecordsetConstruction *This,
        ADO_LONGPTR chapter);

    HRESULT (STDMETHODCALLTYPE *get_RowPosition)(
        ADORecordsetConstruction *This,
        IUnknown **row_pos);

    HRESULT (STDMETHODCALLTYPE *put_RowPosition)(
        ADORecordsetConstruction *This,
        IUnknown *row_pos);

    END_INTERFACE
} ADORecordsetConstructionVtbl;

interface ADORecordsetConstruction {
    CONST_VTBL ADORecordsetConstructionVtbl* lpVtbl;
};

#ifdef COBJMACROS
#ifndef WIDL_C_INLINE_WRAPPERS
/*** IUnknown methods ***/
#define ADORecordsetConstruction_QueryInterface(This,riid,ppvObject) (This)->lpVtbl->QueryInterface(This,riid,ppvObject)
#define ADORecordsetConstruction_AddRef(This) (This)->lpVtbl->AddRef(This)
#define ADORecordsetConstruction_Release(This) (This)->lpVtbl->Release(This)
/*** IDispatch methods ***/
#define ADORecordsetConstruction_GetTypeInfoCount(This,pctinfo) (This)->lpVtbl->GetTypeInfoCount(This,pctinfo)
#define ADORecordsetConstruction_GetTypeInfo(This,iTInfo,lcid,ppTInfo) (This)->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define ADORecordsetConstruction_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) (This)->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define ADORecordsetConstruction_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) (This)->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
/*** ADORecordsetConstruction methods ***/
#define ADORecordsetConstruction_get_Rowset(This,row_set) (This)->lpVtbl->get_Rowset(This,row_set)
#define ADORecordsetConstruction_put_Rowset(This,row_set) (This)->lpVtbl->put_Rowset(This,row_set)
#define ADORecordsetConstruction_get_Chapter(This,chapter) (This)->lpVtbl->get_Chapter(This,chapter)
#define ADORecordsetConstruction_put_Chapter(This,chapter) (This)->lpVtbl->put_Chapter(This,chapter)
#define ADORecordsetConstruction_get_RowPosition(This,row_pos) (This)->lpVtbl->get_RowPosition(This,row_pos)
#define ADORecordsetConstruction_put_RowPosition(This,row_pos) (This)->lpVtbl->put_RowPosition(This,row_pos)
#else
/*** IUnknown methods ***/
static inline HRESULT ADORecordsetConstruction_QueryInterface(ADORecordsetConstruction* This,REFIID riid,void **ppvObject) {
    return This->lpVtbl->QueryInterface(This,riid,ppvObject);
}
static inline ULONG ADORecordsetConstruction_AddRef(ADORecordsetConstruction* This) {
    return This->lpVtbl->AddRef(This);
}
static inline ULONG ADORecordsetConstruction_Release(ADORecordsetConstruction* This) {
    return This->lpVtbl->Release(This);
}
/*** IDispatch methods ***/
static inline HRESULT ADORecordsetConstruction_GetTypeInfoCount(ADORecordsetConstruction* This,UINT *pctinfo) {
    return This->lpVtbl->GetTypeInfoCount(This,pctinfo);
}
static inline HRESULT ADORecordsetConstruction_GetTypeInfo(ADORecordsetConstruction* This,UINT iTInfo,LCID lcid,ITypeInfo **ppTInfo) {
    return This->lpVtbl->GetTypeInfo(This,iTInfo,lcid,ppTInfo);
}
static inline HRESULT ADORecordsetConstruction_GetIDsOfNames(ADORecordsetConstruction* This,REFIID riid,LPOLESTR *rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) {
    return This->lpVtbl->GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId);
}
static inline HRESULT ADORecordsetConstruction_Invoke(ADORecordsetConstruction* This,DISPID dispIdMember,REFIID riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams,VARIANT *pVarResult,EXCEPINFO *pExcepInfo,UINT *puArgErr) {
    return This->lpVtbl->Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr);
}
/*** ADORecordsetConstruction methods ***/
static inline HRESULT ADORecordsetConstruction_get_Rowset(ADORecordsetConstruction* This,IUnknown **row_set) {
    return This->lpVtbl->get_Rowset(This,row_set);
}
static inline HRESULT ADORecordsetConstruction_put_Rowset(ADORecordsetConstruction* This,IUnknown *row_set) {
    return This->lpVtbl->put_Rowset(This,row_set);
}
static inline HRESULT ADORecordsetConstruction_get_Chapter(ADORecordsetConstruction* This,ADO_LONGPTR *chapter) {
    return This->lpVtbl->get_Chapter(This,chapter);
}
static inline HRESULT ADORecordsetConstruction_put_Chapter(ADORecordsetConstruction* This,ADO_LONGPTR chapter) {
    return This->lpVtbl->put_Chapter(This,chapter);
}
static inline HRESULT ADORecordsetConstruction_get_RowPosition(ADORecordsetConstruction* This,IUnknown **row_pos) {
    return This->lpVtbl->get_RowPosition(This,row_pos);
}
static inline HRESULT ADORecordsetConstruction_put_RowPosition(ADORecordsetConstruction* This,IUnknown *row_pos) {
    return This->lpVtbl->put_RowPosition(This,row_pos);
}
#endif
#endif

#endif


#endif  /* __ADORecordsetConstruction_INTERFACE_DEFINED__ */

#ifndef __ADODB_LIBRARY_DEFINED__
#define __ADODB_LIBRARY_DEFINED__

DEFINE_GUID(LIBID_ADODB, 0x2a75196c, 0xd9eb, 0x4129, 0xb8,0x03, 0x93,0x13,0x27,0xf7,0x2d,0x5c);

/*****************************************************************************
 * Connection coclass
 */

DEFINE_GUID(CLSID_Connection, 0x00000514, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("00000514-0000-0010-8000-00aa006d2ea4") Connection;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Connection, 0x00000514, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

/*****************************************************************************
 * Command coclass
 */

DEFINE_GUID(CLSID_Command, 0x00000507, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("00000507-0000-0010-8000-00aa006d2ea4") Command;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Command, 0x00000507, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

/*****************************************************************************
 * Recordset coclass
 */

DEFINE_GUID(CLSID_Recordset, 0x00000535, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("00000535-0000-0010-8000-00aa006d2ea4") Recordset;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Recordset, 0x00000535, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

/*****************************************************************************
 * Parameter coclass
 */

DEFINE_GUID(CLSID_Parameter, 0x0000050b, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("0000050b-0000-0010-8000-00aa006d2ea4") Parameter;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Parameter, 0x0000050b, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

/*****************************************************************************
 * Record coclass
 */

DEFINE_GUID(CLSID_Record, 0x00000560, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("00000560-0000-0010-8000-00aa006d2ea4") Record;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Record, 0x00000560, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

/*****************************************************************************
 * Stream coclass
 */

DEFINE_GUID(CLSID_Stream, 0x00000566, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4);

#ifdef __cplusplus
class DECLSPEC_UUID("00000566-0000-0010-8000-00aa006d2ea4") Stream;
#ifdef __CRT_UUID_DECL
__CRT_UUID_DECL(Stream, 0x00000566, 0x0000, 0x0010, 0x80,0x00, 0x00,0xaa,0x00,0x6d,0x2e,0xa4)
#endif
#endif

#endif /* __ADODB_LIBRARY_DEFINED__ */
/* Begin additional prototypes for all interfaces */

ULONG           __RPC_USER VARIANT_UserSize     (ULONG *, ULONG, VARIANT *);
unsigned char * __RPC_USER VARIANT_UserMarshal  (ULONG *, unsigned char *, VARIANT *);
unsigned char * __RPC_USER VARIANT_UserUnmarshal(ULONG *, unsigned char *, VARIANT *);
void            __RPC_USER VARIANT_UserFree     (ULONG *, VARIANT *);
ULONG           __RPC_USER BSTR_UserSize     (ULONG *, ULONG, BSTR *);
unsigned char * __RPC_USER BSTR_UserMarshal  (ULONG *, unsigned char *, BSTR *);
unsigned char * __RPC_USER BSTR_UserUnmarshal(ULONG *, unsigned char *, BSTR *);
void            __RPC_USER BSTR_UserFree     (ULONG *, BSTR *);

/* End additional prototypes */

#ifdef __cplusplus
}
#endif

#endif /* __msado15_backcompat_h__ */
