www.pudn.com > ExMIS.rar > MyRecordSet.cpp, change:2011-05-11,size:4096b


// MyRecordSet.cpp: implementation of the MyRecordSet class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "ExMIS.h" 
#include "MyRecordSet.h" 
 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
//建立新对象 
MyRecordSet::MyRecordSet() 
{	 
	isConn=false; 
	nFieldRows=0; 
	nFieldCols=0; 
 
	m_pConn.CreateInstance(__uuidof(Connection)); 
	m_pRst.CreateInstance(__uuidof(Recordset)); 
} 
 
MyRecordSet::MyRecordSet(CString m_strDataType) 
{ 
	MyRecordSet(); 
	ADOOpen(m_strDataType); 
} 
 
bool MyRecordSet::ADOOpen(CString m_strDataType) 
{ 
	if(isConn) 
		m_pConn->Close(); 
 
	try{ 
		//选择不同的数据库连接 ACCESS和SQLServer 
		if(m_strDataType=="ACCESS") 
		{ 
			m_pConn->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=GEO.mdb","","",-1); 
		} 
		else 
		{		 
			m_pConn->Open("Provider=SQLOLEDB.1;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=StuMIS;Data Source=ab98b11efbae45b","","",-1); 
		} 
	} 
	catch(...){ 
		AfxMessageBox("与数据建立连接失败!"); 
		return false; 
	} 
 
	//使游标在客户端,才能取出行,列数 
	m_pRst->CursorLocation = adUseClient; 
 
	isConn=true; 
	return true; 
} 
 
 
MyRecordSet::~MyRecordSet() 
{ 
	try{ 
		m_pRst->Close(); 
	} 
	catch(...){} 
 
	try{ 
		m_pConn->Close(); 
	} 
	catch(...){} 
} 
 
bool MyRecordSet::ADOExcute() 
{ 
	//声明对象	 
	_variant_t sql=m_strSQL; 
 
	m_pRst->Open(sql,m_pConn.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); 
 
	bool r=false;	//判断是否有返回值 
	if(m_pRst->State) 
	{ 
		nFieldRows=m_pRst->RecordCount; 
		nFieldCols=m_pRst->GetFields()->GetCount(); 
		 
		r=true;	 
	} 
	return r; 
} 
 
bool MyRecordSet::ADOExcute(CString strSQL) 
{ 
	m_strSQL=strSQL; 
	return ADOExcute(); 
} 
 
void MyRecordSet::ADOClose() 
{ 
	try{ 
		m_pRst->Close(); 
	} 
	catch(...){} 
} 
 
HRESULT MyRecordSet::MoveFirst() 
{ 
	return m_pRst->MoveFirst(); 
} 
 
HRESULT MyRecordSet::MoveLast() 
{ 
	return m_pRst->MoveLast(); 
} 
 
HRESULT MyRecordSet::MovePrev() 
{ 
	return m_pRst->MovePrevious(); 
} 
 
HRESULT MyRecordSet::MoveNext() 
{ 
	return m_pRst->MoveNext(); 
} 
 
//以字符串类型返回数据集中的值 
CString MyRecordSet::GetFieldString(int nCol) 
{ 
	_variant_t var; 
	try{ 
		var=m_pRst->GetCollect((long)nCol); 
	} 
	catch(...) 
	{ 
		AfxMessageBox("读取数据失败"); 
		return ""; 
	} 
 
   	CString strValue; 
	_variant_t var_t; 
	_bstr_t bst_t; 
	time_t cur_time; 
	CTime time_value; 
	COleCurrency var_currency; 
	switch(var.vt) 
	{ 
	case VT_EMPTY:strValue=_T("");break; 
	case VT_UI1:strValue.Format ("%d",var.bVal);break; 
	case VT_I2:strValue.Format ("%d",var.iVal );break; 
	case VT_I4:strValue.Format ("%d",var.lVal);break; 
	case VT_R4:strValue.Format ("%f",var.fltVal);break; 
	case VT_R8:strValue.Format ("%f",var.dblVal);break; 
	case VT_CY: 
		var_currency=var; 
		strValue=var_currency.Format(0); 
		break; 
	case VT_BSTR: 
		var_t=var; 
		bst_t=var_t; 
		strValue.Format ("%s",(const char*)bst_t); 
		break; 
	case VT_NULL:strValue=_T("");break; 
	case VT_DATE: 
		cur_time=var.date; 
		time_value=cur_time; 
        strValue=time_value.Format("%Y-%m-%d"); 
		break; 
	case VT_BOOL:strValue.Format ("%d",var.boolVal );break; 
	default:strValue=_T("");break; 
	} 
	return strValue; 
} 
 
//以整型类型返回数据集中的值 
int MyRecordSet::GetFieldNumber(int nCol) 
{ 
	_variant_t var; 
	try{ 
		var=m_pRst->GetCollect((long)nCol); 
	} 
	catch(...) 
	{ 
		AfxMessageBox("读取数据失败"); 
		return 0; 
	} 
 
	return (int)V_I2(&var); 
} 
 
 
//以浮点类型返回数据集中的值 
float MyRecordSet::GetFieldFloat(int nCol) 
{ 
	_variant_t var; 
	try{ 
		var=m_pRst->GetCollect((long)nCol); 
	} 
 
	catch(...) 
	{ 
		AfxMessageBox("读取数据失败"); 
		return 0; 
	} 
 
	/*   
	VT_I4:是长整型,通过V_I4(&var)可以获得其值。 
	VT_R8:是双精度型,通过V_R8(&var)可以获得其值。   
	*/ 
	return (float)V_R4(&var); 
}