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