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

📄 recset.cpp

📁 中国电信文字短信收发程序。采用电信提供的接口动态库。
💻 CPP
字号:
// RecSet.cpp : implementation file
//

#include "stdafx.h"
#include "HHSJ_Msg.h"
#include "RecSet.h"
#include "DataStruct.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRecSet

IMPLEMENT_DYNAMIC(CRecSet, CRecordset)

CRecSet::CRecSet(CDatabase* pdb)
	: CRecordset(pdb)
{
	//{{AFX_FIELD_INIT(CRecSet)
	//}}AFX_FIELD_INIT
	AbsolutePosition = 1 ;
	m_nDefaultType = snapshot;
	RecordCount=0;
}
CRecSet::~CRecSet()
{
	if (IsOpen()) Close();
}
////////////////////////////////////////////////////////////////////////////////////
//打开记录集合,参数 SQL语句
bool CRecSet::OpenRecordSet(CString strSQL)
{
	if (IsOpen()) Close();
	int i;
	try
	{
		i=Open(CRecordset::snapshot,_T(strSQL),CRecordset::none);
	}
	catch (CDBException* pDBE)
	{
		WriteLogFile("打开记录集合时数据库异常\n"+strSQL+"\n"+pDBE->m_strError);
		pDBE->Delete();
		return false;
		
	}
	catch (CMemoryException* pME)
	{
		WriteLogFile("Memory Exception When Open Recordset");
		pME->Delete();
		//AfxAbort();
		return false;		
	}	
	GetRecordCountFromDB();
	return true;	
}


//获取当前记录集合中的记录总数,保存在成员变量RecordCount中
void CRecSet::GetRecordCountFromDB()
{
	if  (!IsOpen()) return;

//移动光标到记录集起始位置
	if(0==GetRecordCount()) return ;
	MoveFirst() ;
	RecordCount=0;
	while (!IsEOF()) 
	{
		RecordCount++ ;
		MoveNext();
	}
	MoveFirst() ;
}
//获取字段的值
bool CRecSet::GetFieldVal(CString FieldName,short FieldType,CDBVariant &FieldVal)
{
	if (GetRecordCount()>0 )
	{
		char *p;
		p=FieldName.GetBuffer(0);
		if (IsBOF())
		{
			MoveNext();
			MovePrev();
		}else
		{		
			MovePrev();
			MoveNext();
		}
		try
		{
			GetFieldValue(p,FieldVal,FieldType);
		}
		catch (CDBException* pDBE)
		{
			WriteLogFile("Exception When Read FieldValue\n"+FieldName+pDBE->m_strError+"\n"+FieldName);
			pDBE->Delete();
			return false;
			
		}catch(...)
		{
			WriteLogFile("Exception When Read FieldValue:  "+FieldName);
		}
		return true;
	}else return false;
}
//通过AbsolutePosition定位记录指针的绝对位置
//也即:AbsolutePosition = 当前记录号
//参数:1--下一条 -1--上一条 0--当前条 
void CRecSet::LocateRecord(short IsNext)
{
	AbsolutePosition= AbsolutePosition + IsNext ;
	if ( AbsolutePosition == 0 )
	{
		SetAbsolutePosition(RecordCount);
		AbsolutePosition = RecordCount;
		return;
	}
	else if ( AbsolutePosition == RecordCount + 1 ) 
	{
		SetAbsolutePosition(1);
		AbsolutePosition = 1;
		return;
	}
	if ( IsNext == 1 ) MoveNext();
	else if ( IsNext ==-1 ) MovePrev();
	return;
}
CString CRecSet::GetFieldValueByName(CString FieldName, unsigned short FieldType)
{
	CDBVariant FieldVal;
	CString Temp = _T("");
	if (RecordCount==0) return "";
	if (!GetFieldVal(FieldName,FieldType,FieldVal)) return "";
	if (DBVT_LONG==FieldVal.m_dwType)
	{
		Temp.Format("%d",FieldVal.m_lVal);
		return Temp;
	}
	if (DBVT_STRING==FieldVal.m_dwType)
	{
		Temp = *(FieldVal.m_pstring);
		return Temp;
	}
	if (DBVT_DATE==FieldVal.m_dwType)
	{
		int year=FieldVal.m_pdate->year;
		int month=FieldVal.m_pdate->month;
		int day=FieldVal.m_pdate->day;
		int hour=FieldVal.m_pdate->hour;
		int minute=FieldVal.m_pdate->minute;
		int second=FieldVal.m_pdate->second;

		COleDateTime t;
		t.SetDateTime(year,month,day,hour,minute,second);

		CString Time=_T("");
		Time=t.Format(_T("%Y%m%d%H%M%S"));
		return Time;
	}
	return Temp;
}
/////////////////////////////////////////////////////////////////////////////////////

CString CRecSet::GetDefaultConnect()
{
	return _T("ODBC;DSN=");
}

CString CRecSet::GetDefaultSQL()
{
	return _T("");
}

void CRecSet::DoFieldExchange(CFieldExchange* pFX)
{
	//{{AFX_FIELD_MAP(CRecSet)
	pFX->SetFieldType(CFieldExchange::outputColumn);
	//}}AFX_FIELD_MAP
}

/////////////////////////////////////////////////////////////////////////////
// CRecSet diagnostics

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

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

⌨️ 快捷键说明

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