?? myrecordset.cpp
字號:
// 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=StuMIS.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);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -