📄 dynamicrow.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 + -