/////////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1998, Microsoft Corp. All rights reserved. // // FILE // // dsenum.h // // SYNOPSIS // // This file declares the class DBEnumerator. // // MODIFICATION HISTORY // // 02/20/1998 Original version. // /////////////////////////////////////////////////////////////////////////////// #ifndef _DSENUM_H_ #define _DSENUM_H_ #include #include #include /////////////////////////////////////////////////////////////////////////////// // // CLASS // // DBEnumerator // // DESCRIPTION // // This class implements IEnumVARIANT for a rowset of objects. // /////////////////////////////////////////////////////////////////////////////// class DBEnumerator : public IEnumVARIANT { public: DBEnumerator(DBObject* container, IRowset* members); ~DBEnumerator() { Bind::releaseAccessor(items, readAccess); } ////////// // IUnknown ////////// STDMETHOD_(ULONG, AddRef)(); STDMETHOD_(ULONG, Release)(); STDMETHOD(QueryInterface)(const IID& iid, void** ppv); ////////// // IEnumVARIANT ////////// STDMETHOD(Next)(/*[in]*/ ULONG celt, /*[length_is][size_is][out]*/ VARIANT* rgVar, /*[out]*/ ULONG* pCeltFetched); STDMETHOD(Skip)(/*[in]*/ ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(/*[out]*/ IEnumVARIANT** ppEnum); protected: LONG refCount; // Interface ref count. CComPtr parent; // The container being enumerated. Rowset items; // Items in the container. HACCESSOR readAccess; // Accessor for reading rows. ULONG identity; // Identity buffer. WCHAR name[OBJECT_NAME_LENGTH]; // Name buffer. BEGIN_BIND_MAP(DBEnumerator, ReadAccessor, DBACCESSOR_ROWDATA) BIND_COLUMN(identity, 1, DBTYPE_I4), BIND_COLUMN(name, 2, DBTYPE_WSTR) END_BIND_MAP() }; #endif // _DSENUM_H_