home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / dbmsg / oledb / tablecopy / table.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-03-12  |  5.5 KB  |  232 lines

  1. //-----------------------------------------------------------------------------
  2. // Microsoft OLE DB TABLECOPY Sample
  3. // Copyright (C) 1995-1998 Microsoft Corporation
  4. //
  5. // @doc
  6. //
  7. // @module TABLE.H
  8. //
  9. //-----------------------------------------------------------------------------
  10. #ifndef _TABLE_H_
  11. #define _TABLE_H_
  12.  
  13.  
  14. /////////////////////////////////////////////////////////////////
  15. // Includes
  16. //
  17. /////////////////////////////////////////////////////////////////
  18. #include "DataSource.h"
  19. #include "TableCopy.h"
  20.  
  21.  
  22.  
  23. /////////////////////////////////////////////////////////////////
  24. // Defines
  25. //
  26. /////////////////////////////////////////////////////////////////
  27. enum ESQL_STMT
  28. {
  29.     ESQL_SELECT,
  30.     ESQL_INSERT,
  31.     ESQL_CREATE_TABLE,
  32.     ESQL_DROP_TABLE
  33. };
  34.  
  35.  
  36. /////////////////////////////////////////////////////////////////
  37. // Structs for Column/Index info
  38. //
  39. /////////////////////////////////////////////////////////////////
  40. struct TYPEINFO
  41. {
  42.     WCHAR            wszTypeName[MAX_NAME_LEN];
  43.     USHORT            wType;
  44.     ULONG            ulColumnSize;
  45.     WCHAR            wszCreateParams[MAX_NAME_LEN];
  46.     VARIANT_BOOL    fIsNullable;
  47.     VARIANT_BOOL    fIsAutoInc;
  48. };
  49.  
  50.  
  51. struct INDEXINFO
  52. {
  53.     //INDEXINFO
  54.     WCHAR            wszIndexName[MAX_NAME_LEN];
  55.     VARIANT_BOOL    fUnique;
  56.     VARIANT_BOOL    fClustered;
  57.     DBTYPE            wType;
  58.     DWORD            dwFillFactor;
  59.     DWORD            dwInitialSize;
  60.     DWORD            dwNulls;
  61.     VARIANT_BOOL    fSortBookmarks;
  62.     VARIANT_BOOL    fAutoUpdate;
  63.       DWORD            dwNullCollation;
  64.       DWORD            iOrdinal;
  65.     WCHAR            wszColName[MAX_NAME_LEN];
  66.     DWORD            dwCollation;
  67.  
  68.     //PRIMARYKEY 
  69.     BOOL            fIsPrimaryKey;
  70. };
  71.  
  72.  
  73. struct PRIMARYKEY
  74. {
  75.     WCHAR            wszColName[MAX_NAME_LEN];
  76. };
  77.  
  78.  
  79. struct TABLEINFO
  80. {
  81.     WCHAR            wszCatalogName[MAX_NAME_LEN];
  82.     WCHAR            wszSchemaName[MAX_NAME_LEN];
  83.     WCHAR            wszTableName[MAX_NAME_LEN];
  84.     WCHAR            wszType[MAX_NAME_LEN];
  85. };
  86.  
  87. struct COLDESC
  88. {
  89.     //DBCOLUMNINFO
  90.     WCHAR            wszColName[MAX_NAME_LEN];
  91.     ULONG            iOrdinal;
  92.     DBCOLUMNFLAGS    dwFlags;
  93.     ULONG            ulColumnSize;
  94.     DBTYPE            wType;
  95.     BYTE            bPrecision;
  96.     BYTE            bScale;
  97.  
  98.     //TYPEINFO
  99.     WCHAR            wszTypeName[MAX_NAME_LEN];
  100.     ULONG            ulCreateParams;
  101.     BOOL            fIsNullable;
  102.     BOOL            fIsAutoInc;
  103.  
  104.     //INDEXINFO
  105.     BOOL            fIsPrimaryKey;
  106. };
  107.  
  108.  
  109. struct BINDINGINFO
  110. {
  111.     HACCESSOR    hAccessor;
  112.     ULONG        cBindings;
  113.     DBBINDING*  rgBindings;
  114. };
  115.  
  116.  
  117.  
  118. /////////////////////////////////////////////////////////////////
  119. // CTable 
  120. //
  121. /////////////////////////////////////////////////////////////////
  122. class CTable
  123. {
  124. public:
  125.     //Constructors
  126.     CTable(CWizard* pCWizard);
  127.     virtual ~CTable();
  128.     
  129.     //Members
  130.     virtual BOOL    Connect(HWND hWnd, CDataSource* pCDataSource = NULL);
  131.     virtual BOOL    IsConnected();
  132.  
  133.     virtual BOOL    GetQuotedID(WCHAR* pwszOutBuff, WCHAR* pwszInBuff);
  134.     virtual HRESULT GetColInfo(DWORD dwInsertOpt);    
  135.     virtual HRESULT GetTypeInfo();
  136.     virtual HRESULT GetLiteralInfo();
  137.     virtual HRESULT GetTypeNameAndParams(ULONG iCol, WCHAR* pwszName);
  138.  
  139.     virtual HRESULT GetColumnDesc(DBCOLUMNDESC** prgColumnDesc);
  140.     virtual HRESULT CreateSQLStmt(ESQL_STMT eSqlStmt, WCHAR* pwszSqlStmt, BOOL fShowSql = TRUE);
  141.  
  142.     virtual HRESULT MapTableInfo(CTable* pCSourceTable);
  143.     virtual HRESULT CreateTable();
  144.  
  145.     virtual HRESULT AdjustBindings(ULONG cBindings, DBBINDING* rgBindings, void* pData);
  146.  
  147.     virtual HRESULT GetRowset(DWORD dwInsertOpt);
  148.     virtual HRESULT CreateAccessors(ULONG* pcBindingInfo, BINDINGINFO** prgBindingInfo, ULONG* pcRowSize, ULONG ulBlobSize, BOOL* pbOutofLine);
  149.  
  150.     virtual HRESULT CopyData(CTable* pCSourceTable, ULONG* pcRowsCopied);
  151.     virtual HRESULT CopyIndexes(CTable* pCSourceTable);
  152.  
  153.     virtual HRESULT GetTypeInfoRowset(IAccessor** ppIAccessor, HACCESSOR* phAccessor, IRowset** ppIRowset);
  154.  
  155.     //Data
  156.     WCHAR         m_wszIDQuote[MAX_NAME_LEN];
  157.     WCHAR         m_wszIDSeperator[MAX_NAME_LEN];
  158.  
  159.     //TableInfo
  160.     TABLEINFO    m_TableInfo;
  161.     WCHAR        m_wszQualTableName[MAX_NAME_LEN];
  162.  
  163.     //Index info
  164.     ULONG        m_cIndexes;            // Count of indexes
  165.     INDEXINFO*    m_rgIndexInfo;        // Index information
  166.  
  167.     //ColumnInfo
  168.     ULONG        m_cColumns;            // Count of columns
  169.     COLDESC*     m_rgColDesc;        // Column Information
  170.     
  171.     //DataSource
  172.     CDataSource*    m_pCDataSource;
  173.     CWizard*        m_pCWizard;
  174.  
  175.     //Rowset
  176.     IAccessor*        m_pIAccessor;
  177.     IRowset*        m_pIRowset;
  178. };
  179.  
  180.  
  181.  
  182. ///////////////////////////////////////////////////////////////////////////////
  183. // Class CISeqStream
  184. // 
  185. // My implementation of ISeqStream interface
  186. ///////////////////////////////////////////////////////////////////////////////
  187. class CISeqStream : public ISequentialStream
  188. {
  189. public:
  190.     //Constructors
  191.     CISeqStream();
  192.     virtual ~CISeqStream();
  193.  
  194.     virtual BOOL Seek(ULONG iPos);
  195.     virtual BOOL Clear();
  196.     virtual BOOL CompareData(void* pBuffer);
  197.     virtual ULONG Length()  { return m_cBufSize; };
  198.  
  199.     virtual operator void* const() { return m_pBuffer; };
  200.  
  201.     STDMETHODIMP_(ULONG)    AddRef(void);
  202.     STDMETHODIMP_(ULONG)    Release(void);
  203.     STDMETHODIMP QueryInterface(REFIID riid, LPVOID *ppv);
  204.     
  205.     STDMETHODIMP Read( 
  206.             /* [out] */ void __RPC_FAR *pv,
  207.             /* [in] */ ULONG cb,
  208.             /* [out] */ ULONG __RPC_FAR *pcbRead);
  209.         
  210.     STDMETHODIMP Write( 
  211.             /* [in] */ const void __RPC_FAR *pv,
  212.             /* [in] */ ULONG cb,
  213.             /* [out] */ ULONG __RPC_FAR *pcbWritten);
  214.  
  215.     virtual HRESULT Write(ISequentialStream* pISeqStream, ULONG* pcbWritten);
  216.  
  217. protected:
  218.     //Data
  219.  
  220. private:
  221.  
  222.     ULONG        m_cRef;            // reference count
  223.  
  224.     void*       m_pBuffer;        // buffer
  225.     ULONG       m_cBufSize;     // buffer size
  226.     ULONG       m_iPos;         // current index position in the buffer
  227. };
  228.  
  229.  
  230.  
  231. #endif    //_TABLE_H_
  232.