📄 adoconn.cpp
字号:
#include "StdAfx.h"
#include "ADOConn.h"
//功能:构造函数
//strData:数据库的名字
CString CADOConn::GetAppPath()
{
char lpFileName[MAX_PATH];
GetModuleFileName(AfxGetInstanceHandle(),lpFileName,MAX_PATH);
CString strFileName = lpFileName;
int nIndex = strFileName.ReverseFind ('\\');
CString strPath;
if (nIndex > 0)
strPath = strFileName.Left (nIndex);
else
strPath = "";
return strPath;
}
CADOConn::CADOConn(CString strData)
{
CString strValue;
strData.TrimLeft();
strData.TrimRight();
m_strData=_bstr_t(strData);
strValue=strData.Right(3);
if(strValue=="mdb") m_DataType=1;
if(strValue=="xls") m_DataType=2;
}
CADOConn::CADOConn()
{
m_DataType=3;
}
//功能:析构函数
CADOConn::~CADOConn()
{
}
//功能:初始化数据库连接
void CADOConn::OnInitCADOConn()
{
// 初始化OLE/COM库环境
::CoInitialize(NULL);
try
{
//初始化指针
m_pConnection=NULL;
//初始化指针
m_pRecordset=NULL;
// 创建Connection对象
m_pConnection.CreateInstance("ADODB.Connection");
// 设置连接字符串,必须是BSTR型或者_bstr_t类型
_bstr_t strConnect;
switch(m_DataType)
{
case 1://ACCESS
strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
strConnect=strConnect+_bstr_t("Data Source=");
strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\\");
strConnect=strConnect+m_strData;
break;
case 2://EXCEL
strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
strConnect=strConnect+_bstr_t("Data Source=");
strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\\");
strConnect=strConnect+m_strData;
strConnect=strConnect+";Extended Properties=Excel 8.0";
break;
case 3://SQLSERVER
strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
strConnect=strConnect+_bstr_t("Data Source=D:\\FECG\\");
strConnect=strConnect+";Extended Properties=Excel 8.0";
break;
}
m_pConnection->Open(strConnect,_bstr_t(""),_bstr_t(""),adModeUnknown);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
ASSERT(m_pConnection != NULL);
}
//功能:执行查询
//返回值:字段集的指针
_RecordsetPtr& CADOConn::GetRecordSet(CString strSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)OnInitCADOConn();
strSQL.TrimLeft();
strSQL.TrimRight();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
}
ASSERT(m_pRecordset!= NULL);
// 返回记录集
return m_pRecordset;
}
//功能:打开字符集
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::Open(CString strSQL)
{
try
{
// 连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL) OnInitCADOConn();
strSQL.TrimLeft();
strSQL.TrimRight();
// 创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
// 取得表中的记录
m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
// 捕捉异常
catch(_com_error e)
{
// 显示错误信息
AfxMessageBox(e.Description());
return FALSE;
}
// 返回记录集
ASSERT(m_pRecordset!= NULL);
return TRUE;
}
//功能:记录集移向开头
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::MoveFirst()
{
if(m_pRecordset==NULL)
return FALSE;
else
{
m_pRecordset->MoveFirst();
return TRUE;
}
}
//功能:记录集向下移动
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::MoveNext()
{
if(m_pRecordset==NULL)
return FALSE;
else
{
if (!m_pRecordset->adoEOF)
{
m_pRecordset->MoveNext();
return TRUE;
}
else
return FALSE;
}
}
//功能:取得字段中的字符串
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueString(int index,int strSum)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
CString strValue,strType,str;//strValue:初始返回值 strType:格式化字符串 str:最终返回值
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
str="";
break;
case VT_ERROR:
str="";
break;
case VT_EMPTY:
str="";
break;
default:
str=(LPCSTR)_bstr_t(vValue);
}
strType.Format("%d",strSum);
strType="%"+strType+"s";
strValue.Format(strType,str);
return strValue;
}
//功能:取得字段中的字节型整数
//index:字段集中的索引
byte CADOConn::GetValueByte(int index)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
byte bValue;//数值返回值
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
bValue=0;
break;
case VT_ERROR:
bValue=0;
break;
case VT_EMPTY:
bValue=0;
break;
default:
bValue=vValue.bVal;
}
return bValue;
}
//功能:取得字段中的字节型整数的字符串形式
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueByteStr (int index,int strSum)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
byte bValue;//数值返回值
CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
bValue=0;
break;
case VT_ERROR:
bValue=0;
break;
case VT_EMPTY:
bValue=0;
break;
default:
bValue=vValue.bVal;
}
strType.Format("%d",strSum);
strType="%"+strType+"d";
strValue.Format(strType,bValue);
return strValue;
}
//功能:取得字段中的短整型整数
//index:字段集中的索引
int CADOConn::GetValueInt(int index)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
int iValue;//数值返回值
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
iValue=0;
break;
case VT_ERROR:
iValue=0;
break;
case VT_EMPTY:
iValue=0;
break;
default:
iValue=vValue.iVal;
}
return iValue;
}
//功能:取得字段中的短整型整数的字符串形式
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueIntStr(int index,int strSum)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
int iValue;//数值返回值
CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
iValue=0;
break;
case VT_ERROR:
iValue=0;
break;
case VT_EMPTY:
iValue=0;
break;
default:
iValue=vValue.iVal;
}
strType.Format("%d",strSum);
strType="%"+strType+"d";
strValue.Format(strType,iValue);
return strValue;
}
//功能:取得字段中的双精度浮点数
//index:字段集中的索引
double CADOConn::GetValueDouble(int index)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
double dValue;//数值返回值
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
dValue=0;
break;
case VT_ERROR:
dValue=0;
break;
case VT_EMPTY:
dValue=0;
break;
default:
dValue=vValue.dblVal;
}
return dValue;
}
//功能:取得字段中的双精度浮点数的字符串形式
//index:字段集中的索引
//strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
//strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
CString CADOConn::GetValueDoubleStr(int index,int strLSum,int strRSum)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
double dValue;//数值返回值
CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
dValue=0;
break;
case VT_ERROR:
dValue=0;
break;
case VT_EMPTY:
dValue=0;
break;
default:
dValue=vValue.dblVal;
}
strType.Format("%d.%d",strLSum,strRSum);
strType="%"+strType+"f";
strValue.Format(strType,dValue);
return strValue;
}
//功能:取得字段中的单精度浮点数
//index:字段集中的索引
float CADOConn::GetValueFloat(int index)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
float fValue;//数值返回值
vIndex.vt=VT_I2;
vIndex.iVal=index;
vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
switch(vValue.vt)
{
case VT_NULL:
fValue=0;
break;
case VT_ERROR:
fValue=0;
break;
case VT_EMPTY:
fValue=0;
break;
default:
fValue=vValue.fltVal;
}
return fValue;
}
//功能:取得字段中的单精度浮点数的字符串形式
//index:字段集中的索引
//strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
//strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
CString CADOConn::GetValueFloatStr(int index,int strLSum,int strRSum)
{
_variant_t vValue;//var型返回值
_variant_t vIndex;//索引
float fValue;//数值返回值
CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
vIndex.vt=VT_I2;
vIndex.iVal=index;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -