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

📄 dynamicrow.cpp

📁 动态连接ODBC数据库.使用通过数据源的名称动态链接访问ODBC数据库
💻 CPP
字号:
// DynamicRow.cpp : implementation file
//
#include "stdafx.h"
#include "DynamicRow.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDynamicRow

IMPLEMENT_DYNAMIC(CDynamicRow, CRecordset)

CDynamicRow::CDynamicRow(CDatabase* pdb)
	: CRecordset(pdb)
{
	//{{AFX_FIELD_INIT(CDynamicRow)
	//}}AFX_FIELD_INIT
	m_nDefaultType = snapshot;
	m_sTableName = "T_DOCBASE"; // By default
	m_bUpdateRow = FALSE;
	
}

CDynamicRow::~CDynamicRow()
{
	// delete list of dynamically added columns
	while (!m_listName.IsEmpty())
	{
		m_listName.RemoveHead();
		m_listValue.RemoveHead();
	}

	for(int n = 0 ; n < m_pFields.GetSize(); n++)
		delete m_pFields[n];
	m_pFields.RemoveAll();
}//CDynamicRow::~CDynamicRow()


// Added by default but not in use now any more
CString CDynamicRow::GetDefaultConnect()
{
	return _T("ODBC;DSN=");
}

// Function : GetDefaultSQL
// Purpose  : Retrives the defaulttable name that this row is constructed to handle
// Param    : none
// Return   : Table name
CString CDynamicRow::GetDefaultSQL()
{
	CString sRet;
	sRet.Format("[%s]",m_sTableName);
	return _T(sRet);
}

void CDynamicRow::DoFieldExchange(CFieldExchange* pFX)
{
	//{{AFX_FIELD_MAP(CDynamicRow)
		pFX->SetFieldType(CFieldExchange::outputColumn);
	//}}AFX_FIELD_MAP
	
	// Register dynamically added fields. This is late binding
	
	pFX->SetFieldType(CFieldExchange::outputColumn);
	if(m_bUpdateRow)
		for(int j = 0; j < m_pFields.GetSize(); j++)
		{
			RFX_Text(pFX,m_pFields.ElementAt(j)->m_sColumn,
				m_pFields.ElementAt(j)->m_sNewValue);
		}
	else
		for(int i = 0; i < m_pFields.GetSize(); i++)
		{
			RFX_Text(pFX,m_pFields.ElementAt(i)->m_sColumn,
				m_pFields.ElementAt(i)->m_sValue);
		}
	
	// ToDo : switch to different types of data
	// Here I am using only strings for all fields

}//void CDynamicRow::DoFieldExchange(CFieldExchange* pFX)

/////////////////////////////////////////////////////////////////////////////
// CDynamicRow diagnostics

#ifdef _DEBUG
void CDynamicRow::AssertValid() const
{
	CRecordset::AssertValid();
}

void CDynamicRow::Dump(CDumpContext& dc) const
{
	CRecordset::Dump(dc);
}
#endif //_DEBUG

// Function : AddExchangeField
// Purpose  : Adds an field that should be used to exchange data between Resultset and variables
// Param    : Field name
// Return   : nothing
void CDynamicRow::AddExchangeField(CString& strName)
{
	m_listValue.AddTail(""); // by default this is empty. It will hold the returned data
	m_listName.AddTail(strName);
	m_nFields++;

	CDBField *pField = new CDBField();
	pField->m_sColumn = strName;
	m_pFields.Add(pField);
}

// Function : FindField
// Purpose  : Looks for a given field in the resultset 
// Param    : field name to look for
// Return   : TRUE if field is found, otherwise FALSE. // We could return Index of field here
BOOL CDynamicRow::FindField(const char* szName)
{
	for (UINT nField = 0; nField != m_nFields; nField++)
	{
		CODBCFieldInfo fi;

		GetODBCFieldInfo(nField, fi);
		if (fi.m_strName.Compare(szName) == 0)
			return TRUE;
	}

	return FALSE;
}


⌨️ 快捷键说明

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