home *** CD-ROM | disk | FTP | other *** search
- //-----------------------------------------------------------------------------
- // Microsoft OLE DB TABLECOPY Sample
- // Copyright (C) 1995-1998 Microsoft Corporation
- //
- // @doc
- //
- // @module TABLE.H
- //
- //-----------------------------------------------------------------------------
- #ifndef _TABLE_H_
- #define _TABLE_H_
-
-
- /////////////////////////////////////////////////////////////////
- // Includes
- //
- /////////////////////////////////////////////////////////////////
- #include "DataSource.h"
- #include "TableCopy.h"
-
-
-
- /////////////////////////////////////////////////////////////////
- // Defines
- //
- /////////////////////////////////////////////////////////////////
- enum ESQL_STMT
- {
- ESQL_SELECT,
- ESQL_INSERT,
- ESQL_CREATE_TABLE,
- ESQL_DROP_TABLE
- };
-
-
- /////////////////////////////////////////////////////////////////
- // Structs for Column/Index info
- //
- /////////////////////////////////////////////////////////////////
- struct TYPEINFO
- {
- WCHAR wszTypeName[MAX_NAME_LEN];
- USHORT wType;
- ULONG ulColumnSize;
- WCHAR wszCreateParams[MAX_NAME_LEN];
- VARIANT_BOOL fIsNullable;
- VARIANT_BOOL fIsAutoInc;
- };
-
-
- struct INDEXINFO
- {
- //INDEXINFO
- WCHAR wszIndexName[MAX_NAME_LEN];
- VARIANT_BOOL fUnique;
- VARIANT_BOOL fClustered;
- DBTYPE wType;
- DWORD dwFillFactor;
- DWORD dwInitialSize;
- DWORD dwNulls;
- VARIANT_BOOL fSortBookmarks;
- VARIANT_BOOL fAutoUpdate;
- DWORD dwNullCollation;
- DWORD iOrdinal;
- WCHAR wszColName[MAX_NAME_LEN];
- DWORD dwCollation;
-
- //PRIMARYKEY
- BOOL fIsPrimaryKey;
- };
-
-
- struct PRIMARYKEY
- {
- WCHAR wszColName[MAX_NAME_LEN];
- };
-
-
- struct TABLEINFO
- {
- WCHAR wszCatalogName[MAX_NAME_LEN];
- WCHAR wszSchemaName[MAX_NAME_LEN];
- WCHAR wszTableName[MAX_NAME_LEN];
- WCHAR wszType[MAX_NAME_LEN];
- };
-
- struct COLDESC
- {
- //DBCOLUMNINFO
- WCHAR wszColName[MAX_NAME_LEN];
- ULONG iOrdinal;
- DBCOLUMNFLAGS dwFlags;
- ULONG ulColumnSize;
- DBTYPE wType;
- BYTE bPrecision;
- BYTE bScale;
-
- //TYPEINFO
- WCHAR wszTypeName[MAX_NAME_LEN];
- ULONG ulCreateParams;
- BOOL fIsNullable;
- BOOL fIsAutoInc;
-
- //INDEXINFO
- BOOL fIsPrimaryKey;
- };
-
-
- struct BINDINGINFO
- {
- HACCESSOR hAccessor;
- ULONG cBindings;
- DBBINDING* rgBindings;
- };
-
-
-
- /////////////////////////////////////////////////////////////////
- // CTable
- //
- /////////////////////////////////////////////////////////////////
- class CTable
- {
- public:
- //Constructors
- CTable(CWizard* pCWizard);
- virtual ~CTable();
-
- //Members
- virtual BOOL Connect(HWND hWnd, CDataSource* pCDataSource = NULL);
- virtual BOOL IsConnected();
-
- virtual BOOL GetQuotedID(WCHAR* pwszOutBuff, WCHAR* pwszInBuff);
- virtual HRESULT GetColInfo(DWORD dwInsertOpt);
- virtual HRESULT GetTypeInfo();
- virtual HRESULT GetLiteralInfo();
- virtual HRESULT GetTypeNameAndParams(ULONG iCol, WCHAR* pwszName);
-
- virtual HRESULT GetColumnDesc(DBCOLUMNDESC** prgColumnDesc);
- virtual HRESULT CreateSQLStmt(ESQL_STMT eSqlStmt, WCHAR* pwszSqlStmt, BOOL fShowSql = TRUE);
-
- virtual HRESULT MapTableInfo(CTable* pCSourceTable);
- virtual HRESULT CreateTable();
-
- virtual HRESULT AdjustBindings(ULONG cBindings, DBBINDING* rgBindings, void* pData);
-
- virtual HRESULT GetRowset(DWORD dwInsertOpt);
- virtual HRESULT CreateAccessors(ULONG* pcBindingInfo, BINDINGINFO** prgBindingInfo, ULONG* pcRowSize, ULONG ulBlobSize, BOOL* pbOutofLine);
-
- virtual HRESULT CopyData(CTable* pCSourceTable, ULONG* pcRowsCopied);
- virtual HRESULT CopyIndexes(CTable* pCSourceTable);
-
- virtual HRESULT GetTypeInfoRowset(IAccessor** ppIAccessor, HACCESSOR* phAccessor, IRowset** ppIRowset);
-
- //Data
- WCHAR m_wszIDQuote[MAX_NAME_LEN];
- WCHAR m_wszIDSeperator[MAX_NAME_LEN];
-
- //TableInfo
- TABLEINFO m_TableInfo;
- WCHAR m_wszQualTableName[MAX_NAME_LEN];
-
- //Index info
- ULONG m_cIndexes; // Count of indexes
- INDEXINFO* m_rgIndexInfo; // Index information
-
- //ColumnInfo
- ULONG m_cColumns; // Count of columns
- COLDESC* m_rgColDesc; // Column Information
-
- //DataSource
- CDataSource* m_pCDataSource;
- CWizard* m_pCWizard;
-
- //Rowset
- IAccessor* m_pIAccessor;
- IRowset* m_pIRowset;
- };
-
-
-
- ///////////////////////////////////////////////////////////////////////////////
- // Class CISeqStream
- //
- // My implementation of ISeqStream interface
- ///////////////////////////////////////////////////////////////////////////////
- class CISeqStream : public ISequentialStream
- {
- public:
- //Constructors
- CISeqStream();
- virtual ~CISeqStream();
-
- virtual BOOL Seek(ULONG iPos);
- virtual BOOL Clear();
- virtual BOOL CompareData(void* pBuffer);
- virtual ULONG Length() { return m_cBufSize; };
-
- virtual operator void* const() { return m_pBuffer; };
-
- STDMETHODIMP_(ULONG) AddRef(void);
- STDMETHODIMP_(ULONG) Release(void);
- STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv);
-
- STDMETHODIMP Read(
- /* [out] */ void __RPC_FAR *pv,
- /* [in] */ ULONG cb,
- /* [out] */ ULONG __RPC_FAR *pcbRead);
-
- STDMETHODIMP Write(
- /* [in] */ const void __RPC_FAR *pv,
- /* [in] */ ULONG cb,
- /* [out] */ ULONG __RPC_FAR *pcbWritten);
-
- virtual HRESULT Write(ISequentialStream* pISeqStream, ULONG* pcbWritten);
-
- protected:
- //Data
-
- private:
-
- ULONG m_cRef; // reference count
-
- void* m_pBuffer; // buffer
- ULONG m_cBufSize; // buffer size
- ULONG m_iPos; // current index position in the buffer
- };
-
-
-
- #endif //_TABLE_H_
-