⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ex24bset.cpp

📁 VC++技术内幕(第四版)的实例
💻 CPP
字号:
// ex24bset.cpp : implementation file
//

#include "stdafx.h"
#include "ex24b.h"
#include "ex24bset.h"
#include "columnst.h"

#ifdef _DEBUG
#undef THIS_FILE
static char BASED_CODE THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CEx24bSet

IMPLEMENT_DYNAMIC(CEx24bSet, CRecordset)

CEx24bSet::CEx24bSet(CDatabase* pdb)
    : CRecordset(pdb)
{
}

void CEx24bSet::Initialize(const char* pchTableName)
{
// second construction phase

    void* pVar = NULL;

    m_nFields = 0;
    CColumns columns(m_pDatabase);  // closed on destruction
    columns.m_strTableNameParam = pchTableName;
    columns.Open();
    while (!columns.IsEOF()) {
      m_arrayName.Add(columns.m_strColumnName);
      m_nColWidth[m_nFields] = max(((int) columns.m_lLength + 2),
                            columns.m_strColumnName.GetLength());
      // data types defined in sql.h and sqlext.h
      m_nDatType[m_nFields] = columns.m_nDataType;
      switch (columns.m_nDataType) {
      case SQL_BIT:
          pVar = new BOOL;
          break;
      case SQL_TINYINT:
          pVar = new BYTE;
          break;
      case SQL_SMALLINT:
          pVar = new int;
          break;
      case SQL_INTEGER:
          pVar = new long;
          break;
      case SQL_REAL:
          pVar = new float;
          break;
      case SQL_FLOAT:
      case SQL_DOUBLE:
          pVar = new double;
          break;
      case SQL_DATE:
      case SQL_TIME:
      case SQL_TIMESTAMP:
          pVar = new CTime;
          break;
      case SQL_BINARY:
      case SQL_VARBINARY:
          pVar = new CByteArray;
          break;
      case SQL_DECIMAL:
      case SQL_NUMERIC:
      case SQL_CHAR:
      case SQL_VARCHAR:
          pVar = new CString;
          break;
      case SQL_LONGVARCHAR:
      case SQL_LONGVARBINARY:
          pVar = new CLongBinary;
          break;
      default:
          ASSERT(FALSE);
      }
      m_arrayValue.Add(pVar);
      columns.MoveNext();
      m_nFields++;
    }
}

CEx24bSet::~CEx24bSet()
{
    for (int i = 0; i < (int) m_nFields; i++) {
      switch (m_nDatType[i]) {
      case SQL_DECIMAL:
      case SQL_NUMERIC:
      case SQL_CHAR:
      case SQL_VARCHAR:
          delete (CString*) m_arrayValue[i];
          break;
      case SQL_BINARY:
      case SQL_VARBINARY:
          delete (CByteArray*) m_arrayValue[i];
          break;
      case SQL_LONGVARCHAR:
      case SQL_LONGVARBINARY:
          delete (CLongBinary*) m_arrayValue[i];
      default:        
          delete m_arrayValue[i];
      }
    }
}

CString CEx24bSet::GetDefaultSQL()
{
    // necessary because it's pure virtual
    return "";
}

void CEx24bSet::DoFieldExchange(CFieldExchange* pFX)
{
    pFX->SetFieldType(CFieldExchange::outputColumn);
    for (int i = 0; i < (int) m_nFields; i++) {
      switch (m_nDatType[i]) {
      case SQL_BIT:
          RFX_Bool(pFX, m_arrayName[i],
                 *((BOOL*) m_arrayValue[i]));
          break;
      case SQL_TINYINT:
          RFX_Byte(pFX, m_arrayName[i],
                 *((BYTE*) m_arrayValue[i]));
          break;
      case SQL_SMALLINT:
          RFX_Int(pFX,  m_arrayName[i],
                *((int*) m_arrayValue[i]));
          break;
      case SQL_INTEGER:
          RFX_Long(pFX,  m_arrayName[i],
                 *((long*) m_arrayValue[i]));
          break;
      case SQL_REAL:
          RFX_Single(pFX,  m_arrayName[i],
                   *((float*) m_arrayValue[i]));
          break;
      case SQL_FLOAT:
      case SQL_DOUBLE:
          RFX_Double(pFX, m_arrayName[i],
                   *((double*) m_arrayValue[i]));
          break;
      case SQL_DATE:
      case SQL_TIME:
      case SQL_TIMESTAMP:
          RFX_Date(pFX,  m_arrayName[i],
                 *((CTime*) m_arrayValue[i]));
          break;
      case SQL_BINARY:
      case SQL_VARBINARY:
          RFX_Binary(pFX,  m_arrayName[i],
                   *((CByteArray*) m_arrayValue[i]));
          break;
      case SQL_DECIMAL:
      case SQL_NUMERIC:
      case SQL_CHAR:
      case SQL_VARCHAR:
          RFX_Text(pFX, m_arrayName[i],
           *((CString*) m_arrayValue[i]));
          break;
      case SQL_LONGVARCHAR:
      case SQL_LONGVARBINARY:
          RFX_LongBinary(pFX, m_arrayName[i],
             *((CLongBinary*) m_arrayValue[i]));
          break;
      default:
          ASSERT(FALSE);
      }
    }   
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -