//-----------------------------------------------------------------------------
// File:		msado15.idl
//
// Copyright:	Copyright (c) Microsoft Corporation           
//
// Contents:	
//			
// 
// Comments:	ADO interface definitions for inclusion in .IDL files
//
//-----------------------------------------------------------------------------

#ifndef DO_NO_IMPORTS
import "oaidl.idl";
#endif

midl_pragma warning (disable: 2400)

interface _Collection;
interface _DynaCollection;
interface _ADO;
interface Properties;
interface Property;
interface Error;
interface Errors;
interface _Command;
interface Command25;
interface Command15;
interface _Connection;
interface Connection15;
interface _Recordset;
interface Recordset21;
interface Recordset20;
interface Recordset15;
interface _Record;
interface _Stream;
interface Fields;
interface Fields20;
interface Fields15;
interface Field;
interface Field20;
interface Field15;
interface _Parameter;
interface Parameters;
interface ADODebugging;
interface ConnectionEventsVt;
interface RecordsetEventsVt;
dispinterface ConnectionEvents;
dispinterface RecordsetEvents;
interface ADOConnectionConstruction;
interface ADOCommandConstruction;
interface ADORecordsetConstruction;

#ifdef _WIN64
typedef
	[
		public,	
		uuid(54D8B4B9-663B-4a9c-95F6-0E749ABD70F1),
	]
	 __int64				ADO_LONGPTR;
#else
typedef 
	[
		public,	
		uuid(54D8B4B9-663B-4a9c-95F6-0E749ABD70F1),
	]
	long			ADO_LONGPTR;
#endif	


typedef [uuid(0000051B-0000-0010-8000-00AA006D2EA4)]
enum {
        adOpenUnspecified = -1,
        adOpenForwardOnly = 0,
        adOpenKeyset = 1,
        adOpenDynamic = 2,
        adOpenStatic = 3
} CursorTypeEnum;

typedef [uuid(0000051C-0000-0010-8000-00AA006D2EA4)]
enum {
	adHoldRecords = 256,
    adMovePrevious = 512,
    adAddNew = 16778240,
    adDelete = 16779264,
    adUpdate = 16809984,
    adBookmark = 8192,
    adApproxPosition = 16384,
    adUpdateBatch = 65536,
    adResync = 131072,
    adNotify = 262144,
    adFind = 524288,
	adSeek = 4194304,
	adIndex	= 8388608
} CursorOptionEnum;

    typedef [uuid(0000051D-0000-0010-8000-00AA006D2EA4)]
    enum {
        adLockUnspecified = -1,
        adLockReadOnly = 1,
        adLockPessimistic = 2,
        adLockOptimistic = 3,
        adLockBatchOptimistic = 4
    } LockTypeEnum;

    typedef [uuid(0000051E-0000-0010-8000-00AA006D2EA4)]
    enum {
        adOptionUnspecified = -1,
        adAsyncExecute = 16,
        adAsyncFetch = 32,
        adAsyncFetchNonBlocking = 64,
        adExecuteNoRecords = 128,
		adExecuteStream = 1024,
		[hidden] adExecuteRecord = 2048
    } ExecuteOptionEnum;

    typedef [uuid(00000541-0000-0010-8000-00AA006D2EA4)]
    enum {
        adConnectUnspecified = -1,
        adAsyncConnect = 16
    } ConnectOptionEnum;

    typedef [uuid(00000532-0000-0010-8000-00AA006D2EA4)]
    enum {
        adStateClosed = 0,
        adStateOpen = 1,
        adStateConnecting = 2,
        adStateExecuting = 4,
        adStateFetching = 8
    } ObjectStateEnum;

    typedef [uuid(0000052F-0000-0010-8000-00AA006D2EA4)]
    enum {
        adUseNone = 1,
        adUseServer = 2,
        adUseClient = 3,
        adUseClientBatch = 3
    } CursorLocationEnum;

    typedef [uuid(0000051F-0000-0010-8000-00AA006D2EA4)]
    enum {
        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 [uuid(00000525-0000-0010-8000-00AA006D2EA4)]
    enum {
        adFldUnspecified		=      -1,
		adFldMayDefer			= 0x00000002,
		adFldUpdatable			= 0x00000004,
		adFldUnknownUpdatable	= 0x00000008,
		adFldFixed				= 0x00000010,
		adFldIsNullable			= 0x00000020,
		adFldMayBeNull			= 0x00000040,
		adFldLong				= 0x00000080,
		adFldRowID				= 0x00000100,
		adFldRowVersion			= 0x00000200,
		adFldCacheDeferred		= 0x00001000,
		adFldIsChapter			= 0x00002000,	
		adFldNegativeScale		= 0x00004000,
		adFldKeyColumn			= 0x00008000,
		adFldIsRowURL			= 0x00010000,
		adFldIsDefaultStream	= 0x00020000,
		adFldIsCollection		= 0x00040000
    } FieldAttributeEnum;

    typedef [uuid(00000526-0000-0010-8000-00AA006D2EA4)]
    enum {
        adEditNone = 0,
        adEditInProgress = 1,
        adEditAdd = 2,
        adEditDelete = 4
    } EditModeEnum;

    typedef [uuid(00000527-0000-0010-8000-00AA006D2EA4)]
    enum {
        adRecOK = 0,
        adRecNew = 1,
        adRecModified = 2,
        adRecDeleted = 4,
        adRecUnmodified = 8,
        adRecInvalid = 16,
        adRecMultipleChanges = 64,
        adRecPendingChanges = 128,
        adRecCanceled = 256,
        adRecCantRelease = 1024,
        adRecConcurrencyViolation = 2048,
        adRecIntegrityViolation = 4096,
        adRecMaxChangesExceeded = 8192,
        adRecObjectOpen = 16384,
        adRecOutOfMemory = 32768,
        adRecPermissionDenied = 65536,
        adRecSchemaViolation = 131072,
        adRecDBDeleted = 262144
    } RecordStatusEnum;

    typedef [uuid(00000542-0000-0010-8000-00AA006D2EA4)]
    enum {
        adGetRowsRest = -1
    } GetRowsOptionEnum;

    typedef [uuid(00000528-0000-0010-8000-00AA006D2EA4)]
    enum {
        adPosUnknown = -1,
        adPosBOF = -2,
        adPosEOF = -3
    } PositionEnum;

#ifdef _WIN64
typedef 
	[
		public,	
		uuid(A56187C5-D690-4037-AE32-A00EDC376AC3),
	]
	ADO_LONGPTR PositionEnum_Param;
#else
typedef	
	[
		public,	
		uuid(A56187C5-D690-4037-AE32-A00EDC376AC3),
	]
	PositionEnum PositionEnum_Param;
#endif


    typedef enum {
        adBookmarkCurrent = 0,
        adBookmarkFirst = 1,
        adBookmarkLast = 2
    } BookmarkEnum;

    typedef [uuid(00000540-0000-0010-8000-00AA006D2EA4)]
    enum {
        adMarshalAll = 0,
        adMarshalModifiedOnly = 1
    } MarshalOptionsEnum;

    typedef [uuid(00000543-0000-0010-8000-00AA006D2EA4)]
    enum {
        adAffectCurrent = 1,
        adAffectGroup = 2,
        adAffectAll = 3,
        adAffectAllChapters = 4
    } AffectEnum;

    typedef [uuid(00000544-0000-0010-8000-00AA006D2EA4)]
    enum {
        adResyncUnderlyingValues = 1,
        adResyncAllValues = 2
    } ResyncEnum;

    typedef [uuid(00000545-0000-0010-8000-00AA006D2EA4)]
    enum {
        adCompareLessThan = 0,
        adCompareEqual = 1,
        adCompareGreaterThan = 2,
        adCompareNotEqual = 3,
        adCompareNotComparable = 4
    } CompareEnum;

    typedef [uuid(00000546-0000-0010-8000-00AA006D2EA4)]
    enum {
        adFilterNone = 0,
        adFilterPendingRecords = 1,
        adFilterAffectedRecords = 2,
        adFilterFetchedRecords = 3,
        adFilterPredicate = 4,
        adFilterConflictingRecords = 5
    } FilterGroupEnum;

    typedef [uuid(00000547-0000-0010-8000-00AA006D2EA4)]
    enum {
        adSearchForward = 1,
        adSearchBackward = -1
    } SearchDirectionEnum;

typedef [public]
SearchDirectionEnum SearchDirection;

    typedef [uuid(00000548-0000-0010-8000-00AA006D2EA4)]
    enum {
        adPersistADTG = 0,
        adPersistXML = 1
    } PersistFormatEnum;

    typedef [uuid(00000549-0000-0010-8000-00AA006D2EA4)]
    enum {
        adClipString = 2
    } StringFormatEnum;


    typedef [uuid(00000520-0000-0010-8000-00AA006D2EA4)]
    enum {
        adPromptAlways = 1,
        adPromptComplete = 2,
        adPromptCompleteRequired = 3,
        adPromptNever = 4
    } ConnectPromptEnum;

    typedef [uuid(00000521-0000-0010-8000-00AA006D2EA4)]
    enum {
        adModeUnknown = 0,
        adModeRead = 1,
        adModeWrite = 2,
        adModeReadWrite = 3,
        adModeShareDenyRead = 4,
        adModeShareDenyWrite = 8,
        adModeShareExclusive = 12,
        adModeShareDenyNone = 16,
		adModeRecursive =4194304
    } ConnectModeEnum;

    typedef [uuid(00000523-0000-0010-8000-00AA006D2EA4)]
    enum {
        adXactUnspecified = -1,
        adXactChaos = 16,
        adXactReadUncommitted = 256,
        adXactBrowse = 256,
        adXactCursorStability = 4096,
        adXactReadCommitted = 4096,
        adXactRepeatableRead = 65536,
        adXactSerializable = 1048576,
        adXactIsolated = 1048576
    } IsolationLevelEnum;

    typedef [uuid(00000524-0000-0010-8000-00AA006D2EA4)]
    enum {
        adXactCommitRetaining = 131072,
        adXactAbortRetaining = 262144,
        adXactAsyncPhaseOne = 524288,
        adXactSyncPhaseOne = 1048576
    } XactAttributeEnum;

    typedef [uuid(00000529-0000-0010-8000-00AA006D2EA4)]
    enum {
        adPropNotSupported = 0,
        adPropRequired = 1,
        adPropOptional = 2,
        adPropRead = 512,
        adPropWrite = 1024
    } PropertyAttributesEnum;

    typedef [uuid(0000052A-0000-0010-8000-00AA006D2EA4)]
    enum {
        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,
		//adErrURLIntegrViolSetColumns	=3727,
		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

    } ErrorValueEnum;

    typedef [uuid(0000052B-0000-0010-8000-00AA006D2EA4)]
    enum {
        adParamSigned = 16,
        adParamNullable = 64,
        adParamLong = 128
    } ParameterAttributesEnum;

    typedef [uuid(0000052C-0000-0010-8000-00AA006D2EA4)]
    enum {
        adParamUnknown = 0,
        adParamInput = 1,
        adParamOutput = 2,
        adParamInputOutput = 3,
        adParamReturnValue = 4
    } ParameterDirectionEnum;

    typedef [uuid(0000052E-0000-0010-8000-00AA006D2EA4)]
    enum {
        adCmdUnspecified = -1,
        adCmdUnknown = 8,
        adCmdText = 1,
        adCmdTable = 2,
        adCmdStoredProc = 4,
        adCmdFile = 256,
        adCmdTableDirect = 512
    } CommandTypeEnum;

    typedef [uuid(00000530-0000-0010-8000-00AA006D2EA4)]
    enum {
        adStatusOK = 1,
        adStatusErrorsOccurred = 2,
        adStatusCantDeny = 3,
        adStatusCancel = 4,
        adStatusUnwantedEvent = 5
    } EventStatusEnum;

    typedef [uuid(00000531-0000-0010-8000-00AA006D2EA4)]
    enum {
        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 [uuid(00000533-0000-0010-8000-00AA006D2EA4)]
    enum {
        adSchemaProviderSpecific = -1,
        adSchemaAsserts = 0,
        adSchemaCatalogs = 1,
        adSchemaCharacterSets = 2,
        adSchemaCollations = 3,
        adSchemaColumns = 4,
        adSchemaCheckConstraints = 5,
        adSchemaConstraintColumnUsage = 6,
        adSchemaConstraintTableUsage = 7,
        adSchemaKeyColumnUsage = 8,
        [hidden] 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 [uuid(00000552-0000-0010-8000-00AA006D2EA4)]
	enum {
		adSeekFirstEQ = 1,
		adSeekLastEQ = 2,
		adSeekAfterEQ = 4,
		adSeekAfter = 8,
		adSeekBeforeEQ = 16,
		adSeekBefore = 32
	} SeekEnum;

    typedef [uuid(0000054A-0000-0010-8000-00AA006D2EA4)]
    enum {
        adCriteriaKey = 0,
        adCriteriaAllCols = 1,
        adCriteriaUpdCols = 2,
        adCriteriaTimeStamp = 3
    } ADCPROP_UPDATECRITERIA_ENUM;

    typedef [uuid(0000054B-0000-0010-8000-00AA006D2EA4)]
    enum {
        adPriorityLowest = 1,
        adPriorityBelowNormal = 2,
        adPriorityNormal = 3,
        adPriorityAboveNormal = 4,
        adPriorityHighest = 5
    } ADCPROP_ASYNCTHREADPRIORITY_ENUM;


	typedef [uuid(00000553-0000-0010-8000-00AA006D2EA4)]
	enum {
		adResyncNone = 0,
		adResyncAutoIncrement = 1,
		adResyncConflicts = 2,
		adResyncUpdates = 4,
		adResyncInserts = 8,
		adResyncAll = 15
	} CEResyncEnum;

	typedef [uuid(00000554-0000-0010-8000-00AA006D2EA4)]
	enum {
		adRecalcUpFront = 0,
		adRecalcAlways = 1
	} ADCPROP_AUTORECALC_ENUM;

// Field states
typedef [uuid(0000057E-0000-0010-8000-00AA006D2EA4)]
enum FieldStatusEnum 
	{
		adFieldOK = 0,
		adFieldCantConvertValue = 2,
		adFieldIsNull = 3,
		adFieldTruncated = 4,
		adFieldSignMismatch = 5,
		adFieldDataOverflow = 6,
		adFieldCantCreate = 7,
		adFieldUnavailable = 8,
		adFieldPermissionDenied = 9,
		adFieldIntegrityViolation = 10,
		adFieldSchemaViolation = 11,
		adFieldBadStatus = 12,
		adFieldDefault = 13,
		adFieldIgnore = 15,
		adFieldDoesNotExist = 16, //(&H10)
		adFieldInvalidURL = 17, //(&H11)
		adFieldResourceLocked = 18, //(&H12)
		adFieldResourceExists = 19, //(&H13)
		adFieldCannotComplete = 20, //(&H14)
		adFieldVolumeNotFound = 21, //(&H15)
		adFieldOutOfSpace = 22, //(&H16)
		adFieldCannotDeleteSource = 23, //(&H17)
		adFieldReadOnly = 24, //(&H18)
		adFieldResourceOutOfScope = 25,	//(&H19)
		adFieldAlreadyExists = 26, //(&H1A)
		adFieldPendingInsert	= 0x10000,
		adFieldPendingDelete	= 0x20000,
		adFieldPendingChange	= 0x40000,
		adFieldPendingUnknown	= 0x80000,
		adFieldPendingUnknownDelete	= 0x100000
	} 
	FieldStatusEnum;


	typedef [uuid(00000570-0000-0010-8000-00AA006D2EA4)]
	enum {
		adCreateCollection		= 0x00002000,
		adCreateStructDoc		= 0x80000000,
		adCreateNonCollection	= 0x00000000,
		adOpenIfExists			= 0x02000000,
		adCreateOverwrite		= 0x04000000,
		adFailIfNotExists		= -1
	} RecordCreateOptionsEnum;

	typedef [uuid(00000571-0000-0010-8000-00AA006D2EA4)]
	enum {		
		adOpenRecordUnspecified		= -1,
		[hidden]adOpenSource		= 0x00800000,
		adOpenOutput				= 0x00800000,
		adOpenAsync					= 0x00001000,
		adDelayFetchStream			= 0x00004000,
		adDelayFetchFields			= 0x00008000,
		adOpenExecuteCommand		= 0x00010000
	} RecordOpenOptionsEnum;

	typedef [uuid(00000573-0000-0010-8000-00AA006D2EA4)]
	enum {
		adMoveUnspecified = -1,
		adMoveOverWrite = 1,
		adMoveDontUpdateLinks = 2,
		adMoveAllowEmulation = 4
	} MoveRecordOptionsEnum;

	typedef [uuid(00000574-0000-0010-8000-00AA006D2EA4)]
	enum {
		adCopyUnspecified = -1,
		adCopyOverWrite = 1,
		adCopyAllowEmulation = 4,
		adCopyNonRecursive = 2
	} CopyRecordOptionsEnum;

	typedef [uuid(00000576-0000-0010-8000-00AA006D2EA4)]
	enum {
		adTypeBinary		= 1,
		adTypeText			= 2
	} StreamTypeEnum;

    typedef [uuid(00000577-0000-0010-8000-00AA006D2EA4)]
    enum {
		adLF		= 10,
		adCR		= 13,
		adCRLF		= -1
    } LineSeparatorEnum;

    typedef [uuid(0000057A-0000-0010-8000-00AA006D2EA4)]
    enum {
		adOpenStreamUnspecified		= -1,
		adOpenStreamAsync				= 1,
		adOpenStreamFromRecord			= 4
#ifdef ADOSTREAMFROMCMD
		, 
		adOpenStreamFromCommand			= 8
#endif //ADOSTREAMFROMCMD
    } StreamOpenOptionsEnum;

    typedef [uuid(0000057B-0000-0010-8000-00AA006D2EA4)]
	enum
	{
		adWriteChar			= 0,
		adWriteLine			= 1
	}
	StreamWriteEnum;

    typedef [uuid(0000057C-0000-0010-8000-00AA006D2EA4)]
	enum
	{
		adSaveCreateNotExist	= 1,
		adSaveCreateOverWrite	= 2
	}
	SaveOptionsEnum;

	// Special Fields
	typedef	enum
	{
		adDefaultStream		= -1,
		adRecordURL			= -2
	}
	FieldEnum;

	// stream read options
	typedef	enum
	{
		adReadAll			= -1,
		adReadLine			= -2
	}
	StreamReadEnum;

    typedef [uuid(0000057D-0000-0010-8000-00AA006D2EA4)]
	enum
	{
		adSimpleRecord		= 0,
		adCollectionRecord	= 1,
		adStructDoc			= 2
	}
	RecordTypeEnum;

    [
      odl,
      uuid(00000512-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface _Collection : IDispatch {
        [id(0x60020000), propget]
        HRESULT _stdcall Count([out, retval] long* c);
        [id(0xfffffffc), restricted]
        HRESULT _stdcall _NewEnum([out, retval] IUnknown** ppvObject);
        [id(0x60020002)]
        HRESULT _stdcall Refresh();
    };

    [
      odl,
      uuid(00000513-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface _DynaCollection : _Collection {
        [id(0x60030000)]
        HRESULT _stdcall Append([in] IDispatch* Object);
        [id(0x60030001)]
        HRESULT _stdcall Delete([in] VARIANT Index);
    };

    [
      odl,
      uuid(00000534-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface _ADO : IDispatch {
        [id(0x000001f4), propget]
        HRESULT _stdcall Properties([out, retval] Properties** ppvObject);
    };

    [
      odl,
      uuid(00000504-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Properties : _Collection {
        [id(00000000), propget]
        HRESULT _stdcall Item(
                        [in] VARIANT Index, 
                        [out, retval] Property** ppvObject);
    };

    [
      odl,
      uuid(00000503-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Property : IDispatch {
        [id(00000000), propget]
        HRESULT _stdcall Value([out, retval] VARIANT* pval);
        [id(00000000), propput]
        HRESULT _stdcall Value([in] VARIANT pval);
        [id(0x60020002), propget]
        HRESULT _stdcall Name([out, retval] BSTR* pbstr);
        [id(0x60020003), propget]
        HRESULT _stdcall Type([out, retval] DataTypeEnum* ptype);
        [id(0x60020004), propget]
        HRESULT _stdcall Attributes([out, retval] long* plAttributes);
        [id(0x60020004), propput]
        HRESULT _stdcall Attributes([in] long plAttributes);
    };

    [
      odl,
      uuid(00000500-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Error : IDispatch {
        [id(0x60020000), propget]
        HRESULT _stdcall Number([out, retval] long* pl);
        [id(0x60020001), propget]
        HRESULT _stdcall Source([out, retval] BSTR* pbstr);
        [id(00000000), propget]
        HRESULT _stdcall Description([out, retval] BSTR* pbstr);
        [id(0x60020003), propget]
        HRESULT _stdcall HelpFile([out, retval] BSTR* pbstr);
        [id(0x60020004), propget]
        HRESULT _stdcall HelpContext([out, retval] long* pl);
        [id(0x60020005), propget]
        HRESULT _stdcall SQLState([out, retval] BSTR* pbstr);
        [id(0x60020006), propget]
        HRESULT _stdcall NativeError([out, retval] long* pl);
    };

    [
      odl,
      uuid(00000501-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Errors : _Collection {
        [id(00000000), propget]
        HRESULT _stdcall Item(
                        [in] VARIANT Index, 
                        [out, retval] Error** ppvObject);
        [id(0x60030001)]
        HRESULT _stdcall Clear();
    };

    [
      odl,
      uuid(00000508-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Command15 : _ADO {
        [id(0x60030000), propget]
        HRESULT _stdcall ActiveConnection([out, retval] _Connection** ppvObject);
        [id(0x60030000), propputref]
        HRESULT _stdcall ActiveConnection([in] _Connection* ppvObject);
        [id(0x60030000), propput]
        HRESULT _stdcall ActiveConnection([in] VARIANT ppvObject);
        [id(0x60030003), propget]
        HRESULT _stdcall CommandText([out, retval] BSTR* pbstr);
        [id(0x60030003), propput]
        HRESULT _stdcall CommandText([in] BSTR pbstr);
        [id(0x60030005), propget]
        HRESULT _stdcall CommandTimeout([out, retval] long* pl);
        [id(0x60030005), propput]
        HRESULT _stdcall CommandTimeout([in] long pl);
        [id(0x60030007), propget]
        HRESULT _stdcall Prepared([out, retval] VARIANT_BOOL* pfPrepared);
        [id(0x60030007), propput]
        HRESULT _stdcall Prepared([in] VARIANT_BOOL pfPrepared);
        [id(0x60030009)]
        HRESULT _stdcall Execute(
                        [out, optional] VARIANT* RecordsAffected, 
                        [in, optional] VARIANT* Parameters, 
                        [in, defaultvalue(-1)] long Options, 
                        [out, retval] _Recordset** ppiRs);
        [id(0x6003000a)]
        HRESULT _stdcall CreateParameter(
                        [in,  defaultvalue("")] BSTR Name, 
                        [in, defaultvalue(adEmpty)] DataTypeEnum Type, 
                        [in, defaultvalue(adParamInput)] ParameterDirectionEnum Direction, 
                        [in, defaultvalue(0)] ADO_LONGPTR Size, 
                        [in, optional] VARIANT Value, 
                        [out, retval] _Parameter** ppiprm);
        [id(00000000), propget]
        HRESULT _stdcall Parameters([out, retval] Parameters** ppvObject);
        [id(0x6003000c), propput]
        HRESULT _stdcall CommandType([in] CommandTypeEnum plCmdType);
        [id(0x6003000c), propget]
        HRESULT _stdcall CommandType([out, retval] CommandTypeEnum* plCmdType);
        [id(0x6003000e), propget]
        HRESULT _stdcall Name([out, retval] BSTR* pbstrName);
        [id(0x6003000e), propput]
        HRESULT _stdcall Name([in] BSTR pbstrName);
    };

    [
      odl,
      uuid(0000054E-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Command25 : Command15 {
        [id(0x60030010), propget]
        HRESULT _stdcall State([out, retval] long* plObjState);
        [id(0x60030011)]
        HRESULT _stdcall Cancel();
    };

	[
      odl,
      uuid(B08400BD-F9D1-4D02-B856-71D5DBA123E9),
      dual,
      nonextensible,
      oleautomation
    ]
	interface _Command : Command25 {
		[id(0x60030012), propputref]
		HRESULT _stdcall CommandStream([in] IUnknown *pStream);
		[id(0x60030012), propget]
		HRESULT _stdcall CommandStream([out, retval] VARIANT* pvStream);
		[id(0x60030013), propput]
		HRESULT _stdcall Dialect([in] BSTR bstrDialect);
		[id(0x60030013), propget]
		HRESULT _stdcall Dialect([out, retval] BSTR* pbstrDialect);
		[id(0x60030014), propput]
		HRESULT _stdcall NamedParameters([in] VARIANT_BOOL fNamedParameters);
		[id(0x60030014), propget]
		HRESULT _stdcall NamedParameters([out, retval] VARIANT_BOOL* pfNamedParameters);
	};


    [
      odl,
      uuid(00000515-0000-0010-8000-00AA006D2EA4),
      dual,
      oleautomation
    ]
    interface Connection15 : _ADO {
        [id(00000000), propget]
        HRESULT _stdcall ConnectionString([out, retval] BSTR* pbstr);
        [id(00000000), propput]
        HRESULT _stdcall ConnectionString([in] BSTR pbstr);
        [id(0x00000002), propget]
        HRESULT _stdcall CommandTimeout([out, retval] long* plTimeout);
        [id(0x00000002), propput]
        HRESULT _stdcall CommandTimeout([in] long plTimeout);
        [id(0x00000003), propget]
        HRESULT _stdcall ConnectionTimeout([out, retval] long* plTimeout);
        [id(0x00000003), propput]
        HRESULT _stdcall ConnectionTimeout([in] long plTimeout);
        [id(0x00000004), propget]
        HRESULT _stdcall Version([out, retval] BSTR* pbstr);
        [id(0x00000005)]
        HRESULT _stdcall Close();
        [id(0x00000006)]
        HRESULT _stdcall Execute(
                        [in] BSTR CommandText, 
                        [out, optional] VARIANT* RecordsAffected, 
                        [in, defaultvalue(-1)] long Options, 
                        [out, retval] _Recordset** ppiRset);
        [id(0x00000007)]
        HRESULT _stdcall BeginTrans([out, retval] long* TransactionLevel);
        [id(0x00000008)]
        HRESULT _stdcall CommitTrans();
        [id(0x00000009)]
        HRESULT _stdcall RollbackTrans();
        [id(0x0000000a)]
        HRESULT _stdcall Open(
                        [in, defaultvalue("")] BSTR ConnectionString, 
                        [in, defaultvalue("")] BSTR UserID, 
                        [in, defaultvalue("")] BSTR Password, 
                        [in, defaultvalue(-1)] long Options);
        [id(0x0000000b), propget]
        HRESULT _stdcall Errors([out, retval] Errors** ppvObject);
        [id(0x0000000c), propget]
        HRESULT _stdcall DefaultDatabase([out, retval] BSTR* pbstr);
        [id(0x0000000c), propput]
        HRESULT _stdcall DefaultDatabase([in] BSTR pbstr);
        [id(0x0000000d), propget]
        HRESULT _stdcall IsolationLevel([out, retval] IsolationLevelEnum* Level);
        [id(0x0000000d), propput]
        HRESULT _stdcall IsolationLevel([in] IsolationLevelEnum Level);
        [id(0x0000000e), propget]
        HRESULT _stdcall Attributes([out, retval] long* plAttr);
        [id(0x0000000e), propput]
        HRESULT _stdcall Attributes([in] long plAttr);
        [id(0x0000000f), propget]
        HRESULT _stdcall CursorLocation([out, retval] CursorLocationEnum* plCursorLoc);
        [id(0x0000000f), propput]
        HRESULT _stdcall CursorLocation([in] CursorLocationEnum plCursorLoc);
        [id(0x00000010), propget]
        HRESULT _stdcall Mode([out, retval] ConnectModeEnum* plMode);
        [id(0x00000010), propput]
        HRESULT _stdcall Mode([in] ConnectModeEnum plMode);
        [id(0x00000011), propget]
        HRESULT _stdcall Provider([out, retval] BSTR* pbstr);
        [id(0x00000011), propput]
        HRESULT _stdcall Provider([in] BSTR pbstr);
        [id(0x00000012), propget]
        HRESULT _stdcall State([out, retval] long* plObjState);
        [id(0x00000013)]
        HRESULT _stdcall OpenSchema(
                        [in] SchemaEnum Schema, 
                        [in, optional] VARIANT Restrictions, 
                        [in, optional] VARIANT SchemaID, 
                        [out, retval] _Recordset** pprset);
    };

    [
      odl,
      uuid(00000550-0000-0010-8000-00AA006D2EA4),
      dual,
      oleautomation
    ]
    interface _Connection : Connection15 {
        [id(0x00000015)]
        HRESULT _stdcall Cancel();
    };



    [
      odl,
      uuid(0000050E-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Recordset15 : _ADO {
        [id(0x000003e8), propget]
        HRESULT _stdcall AbsolutePosition([out, retval] PositionEnum_Param *pl);
        [id(0x000003e8), propput]
        HRESULT _stdcall AbsolutePosition([in] PositionEnum_Param pl);
        [id(0x000003e9), propputref]
        HRESULT _stdcall ActiveConnection([in] IDispatch* pvar);
        [id(0x000003e9), propput]
        HRESULT _stdcall ActiveConnection([in] VARIANT pvar);
        [id(0x000003e9), propget]
        HRESULT _stdcall ActiveConnection([out, retval] VARIANT* pvar);
        [id(0x000003ea), propget]
        HRESULT _stdcall BOF([out, retval] VARIANT_BOOL* pb);
        [id(0x000003eb), propget]
        HRESULT _stdcall Bookmark([out, retval] VARIANT* pvBookmark);
        [id(0x000003eb), propput]
        HRESULT _stdcall Bookmark([in] VARIANT pvBookmark);
        [id(0x000003ec), propget]
        HRESULT _stdcall CacheSize([out, retval] long* pl);
        [id(0x000003ec), propput]
        HRESULT _stdcall CacheSize([in] long pl);
        [id(0x000003ed), propget]
        HRESULT _stdcall CursorType([out, retval] CursorTypeEnum* plCursorType);
        [id(0x000003ed), propput]
        HRESULT _stdcall CursorType([in] CursorTypeEnum plCursorType);
        [id(0x000003ee), propget]
        HRESULT _stdcall EOF([out, retval] VARIANT_BOOL* pb);
        [id(00000000), propget]
        HRESULT _stdcall Fields([out, retval] Fields** ppvObject);
        [id(0x000003f0), propget]
        HRESULT _stdcall LockType([out, retval] LockTypeEnum* plLockType);
        [id(0x000003f0), propput]
        HRESULT _stdcall LockType([in] LockTypeEnum plLockType);
        [id(0x000003f1), propget]
        HRESULT _stdcall MaxRecords([out, retval] ADO_LONGPTR* plMaxRecords);
        [id(0x000003f1), propput]
        HRESULT _stdcall MaxRecords([in] ADO_LONGPTR plMaxRecords);
        [id(0x000003f2), propget]
        HRESULT _stdcall RecordCount([out, retval] ADO_LONGPTR* pl);
        [id(0x000003f3), propputref]
        HRESULT _stdcall Source([in] IDispatch* pvSource);
        [id(0x000003f3), propput]
        HRESULT _stdcall Source([in] BSTR pvSource);
        [id(0x000003f3), propget]
        HRESULT _stdcall Source([out, retval] VARIANT* pvSource);
        [id(0x000003f4)]
        HRESULT _stdcall AddNew(
                        [in, optional] VARIANT FieldList, 
                        [in, optional] VARIANT Values);
        [id(0x000003f5)]
        HRESULT _stdcall CancelUpdate();
        [id(0x000003f6)]
        HRESULT _stdcall Close();
        [id(0x000003f7)]
        HRESULT _stdcall Delete([in, defaultvalue(adAffectCurrent)] AffectEnum AffectRecords);
        [id(0x000003f8)]
        HRESULT _stdcall GetRows(
                        [in, defaultvalue(-1)] long Rows, 
                        [in, optional] VARIANT Start, 
                        [in, optional] VARIANT Fields, 
                        [out, retval] VARIANT* pvar);
        [id(0x000003f9)]
        HRESULT _stdcall Move(
                        [in] ADO_LONGPTR NumRecords, 
                        [in, optional] VARIANT Start);
        [id(0x000003fa)]
        HRESULT _stdcall MoveNext();
        [id(0x000003fb)]
        HRESULT _stdcall MovePrevious();
        [id(0x000003fc)]
        HRESULT _stdcall MoveFirst();
        [id(0x000003fd)]
        HRESULT _stdcall MoveLast();
        [id(0x000003fe)]
        HRESULT _stdcall Open(
                        [in, optional] VARIANT Source, 
                        [in, optional] VARIANT ActiveConnection, 
                        [in, defaultvalue(adOpenUnspecified)] CursorTypeEnum CursorType, 
                        [in, defaultvalue(adLockUnspecified)] LockTypeEnum LockType, 
                        [in, defaultvalue(-1)] long Options);
        [id(0x000003ff)]
        HRESULT _stdcall Requery([in, defaultvalue(-1)] long Options);
        [id(0x60030022), hidden]
        HRESULT _stdcall _xResync([in, defaultvalue(adAffectAll)] AffectEnum AffectRecords);
        [id(0x00000401)]
        HRESULT _stdcall Update(
                        [in, optional] VARIANT Fields, 
                        [in, optional] VARIANT Values);
        [id(0x00000417), propget]
        HRESULT _stdcall AbsolutePage([out, retval] PositionEnum_Param* pl);
        [id(0x00000417), propput]
        HRESULT _stdcall AbsolutePage([in] PositionEnum_Param pl);
        [id(0x00000402), propget]
        HRESULT _stdcall EditMode([out, retval] EditModeEnum* pl);
        [id(0x00000406), propget]
        HRESULT _stdcall Filter([out, retval] VARIANT* Criteria);
        [id(0x00000406), propput]
        HRESULT _stdcall Filter([in] VARIANT Criteria);
        [id(0x0000041a), propget]
        HRESULT _stdcall PageCount([out, retval] ADO_LONGPTR* pl);
        [id(0x00000418), propget]
        HRESULT _stdcall PageSize([out, retval] long* pl);
        [id(0x00000418), propput]
        HRESULT _stdcall PageSize([in] long pl);
        [id(0x00000407), propget]
        HRESULT _stdcall Sort([out, retval] BSTR* Criteria);
        [id(0x00000407), propput]
        HRESULT _stdcall Sort([in] BSTR Criteria);
        [id(0x00000405), propget]
        HRESULT _stdcall Status([out, retval] long* pl);
        [id(0x0000041e), propget]
        HRESULT _stdcall State([out, retval] long* plObjState);
        [id(0x60030030), hidden]
        HRESULT _stdcall _xClone([out, retval] _Recordset** ppvObject);
        [id(0x0000040b)]
        HRESULT _stdcall UpdateBatch([in, defaultvalue(adAffectAll)] AffectEnum AffectRecords);
        [id(0x00000419)]
        HRESULT _stdcall CancelBatch([in, defaultvalue(adAffectAll)] AffectEnum AffectRecords);
        [id(0x0000041b), propget]
        HRESULT _stdcall CursorLocation([out, retval] CursorLocationEnum* plCursorLoc);
        [id(0x0000041b), propput]
        HRESULT _stdcall CursorLocation([in] CursorLocationEnum plCursorLoc);
        [id(0x0000041c)]
        HRESULT _stdcall NextRecordset(
                        [out, optional] VARIANT* RecordsAffected, 
                        [out, retval] _Recordset** ppiRs);
        [id(0x0000040c)]
        HRESULT _stdcall Supports(
                        [in] CursorOptionEnum CursorOptions, 
                        [out, retval] VARIANT_BOOL* pb);
        [id(0xfffffff8), propget, hidden]
        HRESULT _stdcall Collect(
                        [in] VARIANT Index, 
                        [out, retval] VARIANT* pvar);
        [id(0xfffffff8), propput, hidden]
        HRESULT _stdcall Collect(
                        [in] VARIANT Index, 
                        [in] VARIANT pvar);
        [id(0x0000041d), propget]
        HRESULT _stdcall MarshalOptions([out, retval] MarshalOptionsEnum* peMarshal);
        [id(0x0000041d), propput]
        HRESULT _stdcall MarshalOptions([in] MarshalOptionsEnum peMarshal);
        [id(0x00000422)]
        HRESULT _stdcall Find(
                        [in] BSTR Criteria, 
                        [in, defaultvalue(0)] ADO_LONGPTR SkipRecords, 
                        [in, defaultvalue(adSearchForward)] SearchDirectionEnum SearchDirection, 
                        [in, optional] VARIANT Start);
    };

    [
      odl,
      uuid(0000054F-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Recordset20 : Recordset15 {
        [id(0x0000041f)]
        HRESULT _stdcall Cancel();
        [id(0x00000420), propget]
        HRESULT _stdcall DataSource([out, retval] IUnknown** ppunkDataSource);
        [id(0x00000420), propputref]
        HRESULT _stdcall DataSource([in] IUnknown* ppunkDataSource);
        [hidden]
        HRESULT _stdcall _xSave(
                        [in, optional] BSTR FileName, 
                        [in, defaultvalue(adPersistADTG)] PersistFormatEnum PersistFormat);
        [id(0x00000425), propget]
        HRESULT _stdcall ActiveCommand([out, retval] IDispatch** ppCmd);
        [id(0x00000427), propput]
        HRESULT _stdcall StayInSync([in] VARIANT_BOOL pbStayInSync);
        [id(0x00000427), propget]
        HRESULT _stdcall StayInSync([out, retval] VARIANT_BOOL* pbStayInSync);
        [id(0x00000426)]
        HRESULT _stdcall GetString(
                        [in, defaultvalue(adClipString)] StringFormatEnum StringFormat, 
                        [in, defaultvalue(-1)] long NumRows, 
                        [in, optional] BSTR ColumnDelimeter, 
                        [in, optional] BSTR RowDelimeter, 
                        [in, optional] BSTR NullExpr, 
                        [out, retval] BSTR* pRetString);
        [id(0x00000428), propget]
        HRESULT _stdcall DataMember([out, retval] BSTR* pbstrDataMember);
        [id(0x00000428), propput]
        HRESULT _stdcall DataMember([in] BSTR pbstrDataMember);
        [id(0x00000429)]
        HRESULT _stdcall CompareBookmarks(
                        [in] VARIANT Bookmark1, 
                        [in] VARIANT Bookmark2, 
                        [out, retval] CompareEnum* pCompare);
        [id(0x0000040a)]
        HRESULT _stdcall Clone(
                        [in, defaultvalue(adLockUnspecified)] LockTypeEnum LockType, 
                        [out, retval] _Recordset** ppvObject);
        [id(0x00000400)]
        HRESULT _stdcall Resync(
                        [in, defaultvalue(adAffectAll)] AffectEnum AffectRecords, 
                        [in, defaultvalue(adResyncAllValues)] ResyncEnum ResyncValues);
    };


	[
	  odl,
	  uuid(00000555-0000-0010-8000-00AA006D2EA4),
	  dual,
	  nonextensible,
	  oleautomation
	]
	interface Recordset21 : Recordset20 {
		[id(0x0000042a), helpcontext(0x001356db)]
		HRESULT _stdcall Seek(
						[in] VARIANT KeyValues, 
						[in, defaultvalue(adSeekFirstEQ)] SeekEnum SeekOption);
		[id(0x0000042b), propput, helpcontext(0x001356da)]
		HRESULT _stdcall Index([in] BSTR pbstrIndex);
		[id(0x0000042b), propget, helpcontext(0x001356da)]
		HRESULT _stdcall Index([out, retval] BSTR* pbstrIndex);
	};


	[
		odl,
		uuid(00000556-0000-0010-8000-00AA006D2EA4),
		dual,
		nonextensible,
		oleautomation
	]
	interface _Recordset : Recordset21
	{
		[
			id(0x00000421),
			helpcontext(0x0012C8DF)
		]
		HRESULT Save(
			[in, optional] VARIANT Destination,
			[in, defaultvalue(adPersistADTG)] PersistFormatEnum PersistFormat
			);
	}





    [
      odl,
      uuid(00000506-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Fields15 : _Collection {
        [id(00000000), propget]
        HRESULT _stdcall Item(
                        [in] VARIANT Index, 
                        [out, retval] Field** ppvObject);
    };

    [
      odl,
      uuid(0000054D-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Fields20 : Fields15 {
        [id(0x60030001)]
        HRESULT _stdcall _Append(
                        [in] BSTR Name, 
                        [in] DataTypeEnum Type, 
                        [in, defaultvalue(0)] ADO_LONGPTR DefinedSize, 
                        [in, defaultvalue(adFldUnspecified)] FieldAttributeEnum Attrib);
        [id(0x60030002)]
        HRESULT _stdcall Delete([in] VARIANT Index);
    };

	[
      odl,
      uuid(00000564-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
	]
	interface Fields : Fields20
	{
		[id(0x60040001)]
		HRESULT _stdcall Append(
						[in] BSTR Name,
						[in] DataTypeEnum Type,
						[in, defaultvalue(0)] ADO_LONGPTR DefinedSize,
						[in, defaultvalue(adFldUnspecified)] FieldAttributeEnum Attrib,
						[in, optional] VARIANT FieldValue);
		[id(0x60040002)]
		HRESULT _stdcall Update();
		[id(0x60040003)]
		HRESULT _stdcall Resync([in, defaultvalue(adResyncAllValues)] ResyncEnum ResyncValues);
		[id(0x60040004)]
		HRESULT _stdcall CancelUpdate();
	};

    [
      odl,
      uuid(00000505-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Field15 : _ADO {
        [id(0x00000455), propget]
        HRESULT _stdcall ActualSize([out, retval] ADO_LONGPTR* pl);
        [id(0x0000040c), propget]
        HRESULT _stdcall Attributes([out, retval] long* pl);
        [id(0x0000044f), propget]
        HRESULT _stdcall DefinedSize([out, retval] ADO_LONGPTR* pl);
        [id(0x0000044c), propget]
        HRESULT _stdcall Name([out, retval] BSTR* pbstr);
        [id(0x0000044e), propget]
        HRESULT _stdcall Type([out, retval] DataTypeEnum* pDataType);
        [id(00000000), propget]
        HRESULT _stdcall Value([out, retval] VARIANT* pvar);
        [id(00000000), propput]
        HRESULT _stdcall Value([in] VARIANT pvar);
        [id(0x60030007), propget]
        HRESULT _stdcall Precision([out, retval] unsigned char* pbPrecision);
        [id(0x60030008), propget]
        HRESULT _stdcall NumericScale([out, retval] unsigned char* pbNumericScale);
        [id(0x00000453)]
        HRESULT _stdcall AppendChunk([in] VARIANT Data);
        [id(0x00000454)]
        HRESULT _stdcall GetChunk(
                        [in] long Length, 
                        [out, retval] VARIANT* pvar);
        [id(0x00000450), propget]
        HRESULT _stdcall OriginalValue([out, retval] VARIANT* pvar);
        [id(0x00000451), propget]
        HRESULT _stdcall UnderlyingValue([out, retval] VARIANT* pvar);
    };

    [
      odl,
      uuid(0000054C-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation,
	  hidden
    ]
    interface Field20 : _ADO {
        [id(0x00000455), propget]
        HRESULT _stdcall ActualSize([out, retval] ADO_LONGPTR* pl);
        [id(0x0000040c), propget]
        HRESULT _stdcall Attributes([out, retval] long* pl);
        [id(0x0000044f), propget]
        HRESULT _stdcall DefinedSize([out, retval] ADO_LONGPTR* pl);
        [id(0x0000044c), propget]
        HRESULT _stdcall Name([out, retval] BSTR* pbstr);
        [id(0x0000044e), propget]
        HRESULT _stdcall Type([out, retval] DataTypeEnum* pDataType);
        [id(00000000), propget]
        HRESULT _stdcall Value([out, retval] VARIANT* pvar);
        [id(00000000), propput]
        HRESULT _stdcall Value([in] VARIANT pvar);
        [id(0x60030007), propget]
        HRESULT _stdcall Precision([out, retval] unsigned char* pbPrecision);
        [id(0x60030008), propget]
        HRESULT _stdcall NumericScale([out, retval] unsigned char* pbNumericScale);
        [id(0x00000453)]
        HRESULT _stdcall AppendChunk([in] VARIANT Data);
        [id(0x00000454)]
        HRESULT _stdcall GetChunk(
                        [in] long Length, 
                        [out, retval] VARIANT* pvar);
        [id(0x00000450), propget]
        HRESULT _stdcall OriginalValue([out, retval] VARIANT* pvar);
        [id(0x00000451), propget]
        HRESULT _stdcall UnderlyingValue([out, retval] VARIANT* pvar);
        [id(0x6003000d), propget]
        HRESULT _stdcall DataFormat([out, retval] IUnknown** ppiDF);
        [id(0x6003000d), propputref]
        HRESULT _stdcall DataFormat([in] IUnknown* ppiDF);
        [id(0x60030007), propput]
        HRESULT _stdcall Precision([in] unsigned char pbPrecision);
        [id(0x60030008), propput]
        HRESULT _stdcall NumericScale([in] unsigned char pbNumericScale);
        [id(0x0000044e), propput]
        HRESULT _stdcall Type([in] DataTypeEnum pDataType);
        [id(0x0000044f), propput]
        HRESULT _stdcall DefinedSize([in] ADO_LONGPTR pl);
        [id(0x0000040c), propput]
        HRESULT _stdcall Attributes([in] long pl);
    };

	[
      odl,
      uuid(00000569-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Field : Field20
	{
        [ id(0x0000045c),propget]
		HRESULT _stdcall Status( [out, retval] long *pFStatus);
    };

    [
      odl,
      uuid(0000050C-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface _Parameter : _ADO {
        [id(0x60030000), propget]
        HRESULT _stdcall Name([out, retval] BSTR* pbstr);
        [id(0x60030000), propput]
        HRESULT _stdcall Name([in] BSTR pbstr);
        [id(00000000), propget]
        HRESULT _stdcall Value([out, retval] VARIANT* pvar);
        [id(00000000), propput]
        HRESULT _stdcall Value([in] VARIANT pvar);
        [id(0x60030004), propget]
        HRESULT _stdcall Type([out, retval] DataTypeEnum* psDataType);
        [id(0x60030004), propput]
        HRESULT _stdcall Type([in] DataTypeEnum psDataType);
        [id(0x60030006), propput]
        HRESULT _stdcall Direction([in] ParameterDirectionEnum plParmDirection);
        [id(0x60030006), propget]
        HRESULT _stdcall Direction([out, retval] ParameterDirectionEnum* plParmDirection);
        [id(0x60030008), propput]
        HRESULT _stdcall Precision([in] unsigned char pbPrecision);
        [id(0x60030008), propget]
        HRESULT _stdcall Precision([out, retval] unsigned char* pbPrecision);
        [id(0x6003000a), propput]
        HRESULT _stdcall NumericScale([in] unsigned char pbScale);
        [id(0x6003000a), propget]
        HRESULT _stdcall NumericScale([out, retval] unsigned char* pbScale);
        [id(0x6003000c), propput]
        HRESULT _stdcall Size([in] ADO_LONGPTR pl);
        [id(0x6003000c), propget]
        HRESULT _stdcall Size([out, retval] ADO_LONGPTR* pl);
        [id(0x6003000e)]
        HRESULT _stdcall AppendChunk([in] VARIANT Val);
        [id(0x6003000f), propget]
        HRESULT _stdcall Attributes([out, retval] long* plParmAttribs);
        [id(0x6003000f), propput]
        HRESULT _stdcall Attributes([in] long plParmAttribs);
    };

    [
      odl,
      uuid(0000050D-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
    ]
    interface Parameters : _DynaCollection {
        [id(00000000), propget]
        HRESULT _stdcall Item(
                        [in] VARIANT Index, 
                        [out, retval] _Parameter** ppvObject);
    };

	[
      odl,
      uuid(00000562-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
	]
	interface _Record : _ADO
	{
		[id(1), propget]
		HRESULT _stdcall ActiveConnection(
						[out, retval] VARIANT *pvar);
		[id(1), propput]
		HRESULT _stdcall ActiveConnection(
						[in] BSTR bstrConn);
		[id(1), propputref]
		HRESULT ActiveConnection(
						[in] _Connection *Con);
		[id(2), propget]
		HRESULT _stdcall State(
						[out, retval] ObjectStateEnum *pState);
		[id(3), propget]
		HRESULT _stdcall Source(
						[out, retval] VARIANT *pvar);
		[id(3), propput]
		HRESULT _stdcall Source(
						[in] BSTR Source);
		[id(3), propputref]
		HRESULT _stdcall Source(
						[in] IDispatch *Source);
		[id(4), propget]
		HRESULT _stdcall Mode(
						[out, retval] ConnectModeEnum *pMode);
		[id(4), propput]
		HRESULT _stdcall Mode(
						[in] ConnectModeEnum Mode);
		[id(5), propget]
		HRESULT _stdcall ParentURL(
						[out, retval] BSTR *pbstrParentURL);
		[id(6)]
		HRESULT _stdcall MoveRecord(
						[in, defaultvalue("")] BSTR Source,
						[in, defaultvalue("")] BSTR Destination,
						[in, optional] BSTR UserName,
						[in, optional] BSTR Password,
						[in, defaultvalue(adMoveUnspecified)] MoveRecordOptionsEnum Options,
						[in, optional] VARIANT_BOOL Async,
						[out, retval] BSTR *pbstrNewURL);
		[id(7)]
		HRESULT _stdcall CopyRecord(
						[in, defaultvalue("")] BSTR Source,
						[in, defaultvalue("")] BSTR Destination,
						[in, optional] BSTR UserName,
						[in, optional] BSTR Password,
						[in, defaultvalue(adCopyUnspecified)] CopyRecordOptionsEnum Options,
						[in, optional] VARIANT_BOOL Async,
						[out, retval] BSTR *pbstrNewURL);
		[id(8)]
		HRESULT _stdcall DeleteRecord(
						[in] BSTR Source,
						[in, optional] VARIANT_BOOL Async);
		[id(9)]
		HRESULT _stdcall Open(
						[in, optional] VARIANT Source,
						[in, optional] VARIANT ActiveConnection,
						[in, optional] ConnectModeEnum Mode,
						[in, defaultvalue(adFailIfNotExists)] RecordCreateOptionsEnum CreateOptions,
						[in, defaultvalue(adOpenRecordUnspecified)] RecordOpenOptionsEnum Options,
						[in, optional] BSTR UserName,
						[in, optional] BSTR Password);
		[id(10)]
		HRESULT _stdcall Close();
		[id(0), propget]
		HRESULT _stdcall Fields(
						[out, retval] Fields **ppFlds);
		[id(11), propget]
		HRESULT _stdcall RecordType(
						[out, retval] RecordTypeEnum *pType);
		[id(12)]
		HRESULT _stdcall GetChildren(
						[out, retval] _Recordset **ppRSet);
		[id(13)]
		HRESULT _stdcall Cancel();

	};

	[
      odl,
      uuid(00000565-0000-0010-8000-00AA006D2EA4),
      dual,
      nonextensible,
      oleautomation
	]
	interface _Stream : IDispatch
	{
		[id(1), propget]
		HRESULT _stdcall Size(
						[out, retval] ADO_LONGPTR *pSize );
		[id(2), propget]
		HRESULT _stdcall EOS(
						[out, retval] VARIANT_BOOL *pEOS );
		[id(3), propget]
		HRESULT _stdcall Position(
						[out, retval] ADO_LONGPTR *pPos );
		[id(3), propput]
		HRESULT _stdcall Position(
						[in] ADO_LONGPTR Position );
		[id(4), propget]
		HRESULT _stdcall Type(
						[out, retval] StreamTypeEnum *pType );
		[id(4), propput]
		HRESULT _stdcall Type(
						[in] StreamTypeEnum Type );
		[id(5), propget]
		HRESULT _stdcall LineSeparator(
						[out, retval] LineSeparatorEnum *pLS );
		[id(5), propput]
		HRESULT _stdcall LineSeparator(
						[in] LineSeparatorEnum LineSeparator );
		[id(6), propget]
		HRESULT _stdcall State(
						[out, retval] ObjectStateEnum *pState );
		[id(7), propget]
		HRESULT _stdcall Mode(
						[out, retval] ConnectModeEnum *pMode );
		[id(7), propput]
		HRESULT _stdcall Mode(
						[in] ConnectModeEnum Mode );
		[id(8), propget]
		HRESULT Charset(
						[out, retval] BSTR *pbstrCharset );
		[id(8), propput]
		HRESULT Charset(
						[in] BSTR Charset );
		[id(9)] 
		HRESULT _stdcall Read(
						[in, defaultvalue(adReadAll)]long NumBytes,
						[out, retval]VARIANT *pVal);
		[id(10)]
		HRESULT _stdcall Open(
						[in, optional] VARIANT Source,
						[in, defaultvalue(adModeUnknown)] ConnectModeEnum Mode,
						[in, defaultvalue(adOpenStreamUnspecified)] StreamOpenOptionsEnum Options,
						[in, optional] BSTR UserName,
						[in, optional] BSTR Password);
		[id(11)]
		HRESULT _stdcall Close(void);
		[id(12)] 
		HRESULT _stdcall SkipLine(void);
		[id(13)] 
		HRESULT _stdcall Write(
						[in]VARIANT Buffer);
		[id(14)] 
		HRESULT _stdcall SetEOS(void);
		[id(15)] 
		HRESULT _stdcall CopyTo(
						[in]_Stream *DestStream, 
						[in, defaultvalue(-1)]ADO_LONGPTR CharNumber);
		[id(16)]
		HRESULT _stdcall Flush(void);
		[id(17)]
		HRESULT _stdcall SaveToFile(
						[in] BSTR FileName,
						[in, defaultvalue(adSaveCreateNotExist)] SaveOptionsEnum Options);
		[id(18)]
		HRESULT _stdcall LoadFromFile(
						[in] BSTR FileName);
		[id(19)]
		HRESULT _stdcall ReadText(
						[in, defaultvalue(adReadAll)] long NumChars,
						[out, retval] BSTR *pbstr);
		[id(20)]
		HRESULT _stdcall WriteText(
						[in] BSTR Data,
						[in, defaultvalue(adWriteChar)] StreamWriteEnum Options);
		[id(21)]
		HRESULT _stdcall Cancel(void);
	};

    [
      odl,
      uuid(00000538-0000-0010-8000-00AA006D2EA4),
      hidden
    ]
    interface ADODebugging : IUnknown {
        HRESULT _stdcall IsGlobalDebugMode(VARIANT_BOOL* pfDebuggingOn);
        HRESULT _stdcall SetGlobalDebugMode(
                        IUnknown* pDebugger, 
                        VARIANT_BOOL fDebuggingOn);
    };

    [
      odl,
      uuid(00000402-0000-0010-8000-00AA006D2EA4),
      hidden
    ]
    interface ConnectionEventsVt : IUnknown {
        HRESULT _stdcall InfoMessage(
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall BeginTransComplete(
                        [in] long TransactionLevel, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall CommitTransComplete(
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall RollbackTransComplete(
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall WillExecute(
                        [in, out] BSTR* Source, 
                        [in, out] CursorTypeEnum* CursorType, 
                        [in, out] LockTypeEnum* LockType, 
                        [in, out] long* Options, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Command* pCommand, 
                        [in] _Recordset* pRecordset, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall ExecuteComplete(
                        [in] long RecordsAffected, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Command* pCommand, 
                        [in] _Recordset* pRecordset, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall WillConnect(
                        [in, out] BSTR* ConnectionString, 
                        [in, out] BSTR* UserID, 
                        [in, out] BSTR* Password, 
                        [in, out] long* Options, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall ConnectComplete(
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
        HRESULT _stdcall Disconnect(
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Connection* pConnection);
    };

    [
      odl,
      uuid(00000403-0000-0010-8000-00AA006D2EA4),
      hidden
    ]
    interface RecordsetEventsVt : IUnknown {
        HRESULT _stdcall WillChangeField(
                        [in] long cFields, 
                        [in] VARIANT Fields, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall FieldChangeComplete(
                        [in] long cFields, 
                        [in] VARIANT Fields, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall WillChangeRecord(
                        [in] EventReasonEnum adReason, 
                        [in] long cRecords, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall RecordChangeComplete(
                        [in] EventReasonEnum adReason, 
                        [in] long cRecords, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall WillChangeRecordset(
                        [in] EventReasonEnum adReason, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall RecordsetChangeComplete(
                        [in] EventReasonEnum adReason, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall WillMove(
                        [in] EventReasonEnum adReason, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall MoveComplete(
                        [in] EventReasonEnum adReason, 
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall EndOfRecordset(
                        [in, out] VARIANT_BOOL* fMoreData, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall FetchProgress(
                        [in] long Progress, 
                        [in] long MaxProgress, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
        HRESULT _stdcall FetchComplete(
                        [in] Error* pError, 
                        [in, out] EventStatusEnum* adStatus, 
                        [in] _Recordset* pRecordset);
    };

    [
      uuid(00000400-0000-0010-8000-00AA006D2EA4)
    ]
    dispinterface ConnectionEvents {
        properties:
        methods:
            [id(00000000)]
            HRESULT InfoMessage(
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000001)]
            HRESULT BeginTransComplete(
                            [in] long TransactionLevel, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000003)]
            HRESULT CommitTransComplete(
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000002)]
            HRESULT RollbackTransComplete(
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000004)]
            HRESULT WillExecute(
                            [in, out] BSTR* Source, 
                            [in, out] CursorTypeEnum* CursorType, 
                            [in, out] LockTypeEnum* LockType, 
                            [in, out] long* Options, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Command* pCommand, 
                            [in] _Recordset* pRecordset, 
                            [in] _Connection* pConnection);
            [id(0x00000005)]
            HRESULT ExecuteComplete(
                            [in] long RecordsAffected, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Command* pCommand, 
                            [in] _Recordset* pRecordset, 
                            [in] _Connection* pConnection);
            [id(0x00000006)]
            HRESULT WillConnect(
                            [in, out] BSTR* ConnectionString, 
                            [in, out] BSTR* UserID, 
                            [in, out] BSTR* Password, 
                            [in, out] long* Options, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000007)]
            HRESULT ConnectComplete(
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
            [id(0x00000008)]
            HRESULT Disconnect(
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Connection* pConnection);
    };

    [
      uuid(00000266-0000-0010-8000-00AA006D2EA4)
    ]
    dispinterface RecordsetEvents {
        properties:
        methods:
            [id(0x00000009)]
            HRESULT WillChangeField(
                            [in] long cFields, 
                            [in] VARIANT Fields, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000a)]
            HRESULT FieldChangeComplete(
                            [in] long cFields, 
                            [in] VARIANT Fields, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000b)]
            HRESULT WillChangeRecord(
                            [in] EventReasonEnum adReason, 
                            [in] long cRecords, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000c)]
            HRESULT RecordChangeComplete(
                            [in] EventReasonEnum adReason, 
                            [in] long cRecords, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000d)]
            HRESULT WillChangeRecordset(
                            [in] EventReasonEnum adReason, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000e)]
            HRESULT RecordsetChangeComplete(
                            [in] EventReasonEnum adReason, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x0000000f)]
            HRESULT WillMove(
                            [in] EventReasonEnum adReason, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x00000010)]
            HRESULT MoveComplete(
                            [in] EventReasonEnum adReason, 
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x00000011)]
            HRESULT EndOfRecordset(
                            [in, out] VARIANT_BOOL* fMoreData, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x00000012)]
            HRESULT FetchProgress(
                            [in] long Progress, 
                            [in] long MaxProgress, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
            [id(0x00000013)]
            HRESULT FetchComplete(
                            [in] Error* pError, 
                            [in, out] EventStatusEnum* adStatus, 
                            [in] _Recordset* pRecordset);
    };

    [
      odl,
      uuid(00000516-0000-0010-8000-00AA006D2EA4),
      restricted
    ]
    interface ADOConnectionConstruction15 : IUnknown {
        [propget]
        HRESULT _stdcall DSO([out, retval] IUnknown** ppDSO);
        [propget]
        HRESULT _stdcall Session([out, retval] IUnknown** ppSession);
        HRESULT _stdcall WrapDSOandSession(
                        [in] IUnknown* pDSO, 
                        [in] IUnknown* pSession);
    };

    [
      odl,
      uuid(00000551-0000-0010-8000-00AA006D2EA4),
      restricted
    ]
    interface ADOConnectionConstruction : ADOConnectionConstruction15 {
    };

    [
      odl,
      uuid(00000283-0000-0010-8000-00AA006D2EA4),
      restricted
    ]
    interface ADORecordsetConstruction : IDispatch {
        [propget]
        HRESULT _stdcall Rowset([out, retval] IUnknown** ppRowset);
        [propput]
        HRESULT _stdcall Rowset([in] IUnknown* ppRowset);
        [propget]
        HRESULT _stdcall Chapter([out, retval] ADO_LONGPTR* plChapter);
        [propput]
        HRESULT _stdcall Chapter([in] ADO_LONGPTR plChapter);
        [propget]
        HRESULT _stdcall RowPosition([out, retval] IUnknown** ppRowPos);
        [propput]
        HRESULT _stdcall RowPosition([in] IUnknown* ppRowPos);
    };

    [
      odl,
      uuid(00000517-0000-0010-8000-00AA006D2EA4),
      restricted
    ]
    interface ADOCommandConstruction : IUnknown {
        [propget]
        HRESULT _stdcall OLEDBCommand([out, retval] IUnknown** ppOLEDBCommand);
        [propput]
        HRESULT _stdcall OLEDBCommand([in] IUnknown* ppOLEDBCommand);
    };

	[
	  odl,
      uuid(00000567-0000-0010-8000-00AA006D2EA4),
	  restricted
	]
	interface ADORecordConstruction : IDispatch {
		[propget]
		HRESULT _stdcall Row([out, retval] IUnknown **ppRow);
		[propput]
		HRESULT _stdcall Row([in] IUnknown *pRow);
		[propput]
		HRESULT _stdcall ParentRow([in] IUnknown *pRow);
	};

	[
	  odl,
      uuid(00000568-0000-0010-8000-00AA006D2EA4),
	  restricted
	]
	interface ADOStreamConstruction : IDispatch
	{
		[propget]
		HRESULT _stdcall Stream([out, retval] IUnknown **ppStm);
		[propput]
		HRESULT _stdcall Stream([in] IUnknown *pStm);
	};

[
  uuid(EF53050B-882E-4776-B643-EDA472E8E3F2),
  version(2.7),
  helpstring("Microsoft ActiveX Data Objects 2.7 Library")
]
library ADODB
{
    // TLib : OLE Automation : {00020430-0000-0000-C000-000000000046}
    importlib("stdole2.tlb");

    [
      uuid(00000514-0000-0010-8000-00AA006D2EA4),
      licensed
    ]
    coclass Connection {
        [default] interface _Connection;
        [default, source] dispinterface ConnectionEvents;
    };

    [
      uuid(00000507-0000-0010-8000-00AA006D2EA4),
      licensed
    ]
    coclass Command {
        [default] interface _Command;
    };

    [
      uuid(00000535-0000-0010-8000-00AA006D2EA4),
      licensed
    ]
    coclass Recordset {
        [default] interface _Recordset;
        [default, source] dispinterface RecordsetEvents;
    };

    [
      uuid(0000050B-0000-0010-8000-00AA006D2EA4),
      licensed
    ]
    coclass Parameter {
        [default] interface _Parameter;
    };

	[
      uuid(00000560-0000-0010-8000-00AA006D2EA4),
		licensed
	]
	coclass Record {
		[default] interface       _Record;
	};

	[
      uuid(00000566-0000-0010-8000-00AA006D2EA4),
		licensed
	]
	coclass Stream {
		[default] interface       _Stream;
	};
};
