Listing 1: The CColumns class

class CColumns : public CRecordset
{
DECLARE_DYNAMIC(CColumns)
public:
   CColumns( CDatabase* pDatabase = NULL);
   BOOL PrepareToOpen(UINT nOpenType,
                      LPCSTR lpszSQL,
                      DWORD dwOptions);
   BOOL OpenDynamicRowset(CString* );
   ~CColumns();
   LPCSTR  GetInsertString( char* );
// Field/Param Data
//{{AFX_FIELD(CColumns, CRecordset)
//}}AFX_FIELD

// members
public:
    CPtrArray m_ColumnList;
private:
    CString   m_Query;
    CString   m_QueryNoWhere;
    CString   m_TableSchema;
    LPSTR     m_pcInsertBuffer;
    int       m_iBufferSize;
    int       m_iBufferInc; 
    int       m_iBufferSafety;
    BOOL      m_bWasPrepared;

// Implementation
private:
    int   LongBinary( CLongBinary*, char* );
    BOOL  ReplaceWhereClause();
    void  AddColumnInfoToList(CColumnInfo* pColInfo);
    BOOL  AllocStorageForColumnVar(CColumnInfo* pColInfo);
    BOOL  MapColumnSQLTypeToCType(CColumnInfo* pColInfo);    
    BOOL  GetCreateParamCount (CColumnInfo* pColInfo);       
    BOOL  GenerateTableCreationString(void);             
    BOOL  MakeColumnListFromQuery();
    void  DecodeSQLError( RETCODE retCode, HDBC hdbc, HSTMT hstmt,
                          LPSTR pszFile, UINT uiLine);
protected:
    virtual CString GetDefaultConnect();                
    virtual CString GetDefaultSQL();                    
    virtual void DoFieldExchange(CFieldExchange* pFX);  
    virtual BOOL Open(UINT nOpenType, LPCSTR lpszSQL, DWORD dwOptions);                 
};
/* End of File */