?? columnset.cpp
字號:
// ColumnSet.cpp : implementation file
//
#include "stdafx.h"
#include "MyOdbcSmpl.h"
#include "ColumnSet.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CColumnSet
IMPLEMENT_DYNAMIC(CColumnSet, CRecordset)
CColumnSet::CColumnSet(CDatabase* pdb)
: CRecordset(pdb)
{
//{{AFX_FIELD_INIT(CColumnSet)
m_strQualifier = "";
m_strOwner = "";
m_strTableName = "";
m_strColumnName = "";
m_nDataType = 0;
m_strTypeName = "";
m_lPrecision = 0;
m_lLength = 0;
m_nScale = 0;
m_nRadix = 0;
m_nFields = 11;
//}}AFX_FIELD_INIT
m_strQualifierParam = "";
m_strOwnerParam = "";
m_strTableNameParam = "";
m_strColumnNameParam = "";
}
CString CColumnSet::GetDefaultConnect()
{
return _T("ODBC;DSN=");
}
CString CColumnSet::GetDefaultSQL()
{
return _T("!");
}
void CColumnSet::DoFieldExchange(CFieldExchange* pFX)
{
//{{AFX_FIELD_MAP(CColumnSet)
pFX->SetFieldType(CFieldExchange::outputColumn);
RFX_Text(pFX, "table_qualifier", m_strQualifier);
RFX_Text(pFX, "table_owner", m_strOwner);
RFX_Text(pFX, "table_name", m_strTableName);
RFX_Text(pFX, "column_name", m_strColumnName);
RFX_Int(pFX, "data_type", m_nDataType);
RFX_Text(pFX, "type_name", m_strTypeName);
RFX_Long(pFX, "precision", m_lPrecision);
RFX_Long(pFX, "length", m_lLength);
RFX_Int(pFX, "scale", m_nScale);
RFX_Int(pFX, "radix", m_nRadix);
RFX_Int(pFX, "nullable", m_nNullable);
//}}AFX_FIELD_MAP
}
/////////////////////////////////////////////////////////////////////////////
// CColumnSet diagnostics
#ifdef _DEBUG
void CColumnSet::AssertValid() const
{
CRecordset::AssertValid();
}
void CColumnSet::Dump(CDumpContext& dc) const
{
CRecordset::Dump(dc);
}
#endif //_DEBUG
BOOL CColumnSet::Open(UINT nOpenType, LPCTSTR lpszSql, DWORD dwOptions)
{
ASSERT(lpszSql == NULL);
RETCODE nRetCode;
// 設置緩沖區狀態
SetState(nOpenType,NULL,noDirtyFieldCheck);
// 分配語句句柄
if (!AllocHstmt())
return FALSE;
TRY
{
OnSetOptions(m_hstmt);
AllocStatusArrays();
// 調用參數化ODBC編目函數
AFX_SQL_ASYNC(this, ::SQLColumns(m_hstmt,
(m_strQualifierParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strQualifierParam), SQL_NTS,
(m_strOwnerParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strOwnerParam), SQL_NTS,
(m_strTableNameParam.IsEmpty()? (UCHAR FAR *)NULL: (UCHAR FAR *)(const char*)m_strTableNameParam), SQL_NTS,
NULL, SQL_NTS));
if (!Check(nRetCode))
ThrowDBException(nRetCode, m_hstmt);
// 分配內存和緩沖區
AllocAndCacheFieldInfo();
AllocRowset();
// 獲得結果集中第一條記錄
MoveNext();
// 如果已經是結果集尾,則結果集為空,設置ISBOF,ISEOF為真。
m_bBOF = m_bEOF;
}
CATCH_ALL(e)
{
Close();
THROW_LAST();
}
END_CATCH_ALL
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -