操作ACCESS的类CADOConn (八)

2014-11-24 03:07:08 · 作者: · 浏览: 21
////////////////////////////////////////////////////////////


CADOConn::CADOConn()
{
//数据库类型:Access
m_iDatabaseType = 1;
m_strDatabaseName = _bstr_t("ShopSale.mdb");
}

CADOConn::~CADOConn()
{

}

/************************************************************************
函数名: CADOConn
作 者: 谭友亮(Charles Tan)
日 期: 2013-3-5
作 用: 将数据库名称传递给m_strDatabaseName,并判断数据库类型
形参数: strDatabaseName 数据库名称
返回值:
修改记录:
************************************************************************/
CADOConn::CADOConn(CString strDatabaseName)
{
CString strFormat;
strDatabaseName.TrimLeft();
strDatabaseName.TrimRight();
m_strDatabaseName = _bstr_t(strDatabaseName);
strFormat = strDatabaseName.Right(strDatabaseName.GetLength() - strDatabaseName.ReverseFind('.') - 1);

if(strFormat == "mdb")
{
m_iDatabaseType = 1;
}
if(strFormat == "xls" || strFormat == "xlsx")
{
m_iDatabaseType = 2;
}
}

/************************************************************************
函数名: GetAppPath
作 者: 谭友亮(Charles Tan)
日 期: 2013-3-18
作 用: 获取当前程序的可执行文件所在的目录
形参数:
返回值:
修改记录:
************************************************************************/
CString CADOConn::GetAppPath()
{
char lpFilePath[MAX_PATH];
CString strPath;

GetModuleFileName(AfxGetInstanceHandle(), lpFilePath, MAX_PATH);
strPath = lpFilePath;
strPath = strPath.Left(strPath.ReverseFind('\\'));

return strPath;
}

/************************************************************************
函数名: InitCADOConn
作 者: 谭友亮(Charles Tan)
日 期: 2013-3-5
作 用: 初始化数据库连接
形参数:
返回值:
修改记录:
************************************************************************/
void CADOConn::InitCADOConn()
{
CString toolPath = GetAppPath();

//初始化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_iDatabaseType)
{
case 1://ACCESS
strConnect = _bstr_t("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ");
strConnect = strConnect + _bstr_t(toolPath) + _bstr_t("\\data\\") + m_strDatabaseName;
break;
case 2://EXCEL
strConnect = _bstr_t("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ");
strConnect = strConnect + _bstr_t(toolPath) + _bstr_t("\\") + m_strDatabaseName;
strConnect = strConnect + ";Extended Properties=Excel 8.0";
break;
case 3://SQL SERVER
strConnect = _bstr_t("Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ");
strConnect = strConnect + _bstr_t(toolPath) + _bstr_t("\\") + m_strDatabaseName;
strConnect = strConnect + ";Extended Properties=Excel 8.0";
break;
}

m_pConnection->Open(strConnect, _bstr_t(""), _bstr_t(""), adModeUnknown);
//ShellExecute(NULL, _T("open"), toolPath + "\\" + m_strDatabaseName, NULL, NULL, SW_SHOWMAXIMIZED);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
}

/************************************************************************
函数名: GetRecordSet
作 者: 谭友亮(Charles Tan)
日 期: 2013-3-5
作 用: 执行查询
形参数: strSQL SQL语句
返回值: m_pRecordset 字段集的指针
修改记录: