在总结1中 主要讲的各个View与各控件的操作。
项目中也涉及到对数据库的操作:
(1).项目中使用的是ADO来进行对Access数据库的运用。
由于在MFC的库类中没有可与ADO一起使用的类,因此使用ADO需要通过导入DLL文件来实现。微软提供了通过使用新的#import的C++编译命令,来为ADO中的每个对象创建和使用类。 #import "msado15.dll" no_namespace, rename("EOF","adoEOF") 其中我把msado15.dll文件直接放在了工程里。
首先创个DB类 CDBManage。
声明个 ADO的Connection对象智能指针: _ConnectionPtr m_pConnection;
在构造函数中: HRESULT hr = NOERROR; hr是各种warning与 error的data代表 ( HRESULT就是状态码)
hr = ::CoInitialize(NULL); 用来告诉 Windows以单线程的方式创建com对象,初始化com库。
m_pConnection = NULL; 初始化。
与数据库连接的函数: HRESULT hr = NOERROR;
if(m_pConnection==NULL)
hr=m_pConnection .CreateInstance(__uuidof(Connection)); 给对象智能指针赋值。
CString strName="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+
CGetDirectory.GetDirectory()+"\\Data\\VRSDBCS.mdb"; 得到数据库具体路径
_bstr_t strConnect=strName;
if(m_pConnection->GetState() == adStateClosed) 智能指针的操作
hr=m_pConnection ->Open(strConnect,"","",adModeUnknown);
return hr == S_OK;
读取数据库数据的函数:Excute(CString strSQL,_RecordsetPtr &m_pRecordset) 参数一是数据库操作语句 ,参数二 存放数据库数据。
_bstr_t bstrSQL=strSQL;
HRESULT hr=NOERROR;
hr=m_pRecordset.CreateInstance(__uuidof(Recordset));
if(m_pConnection->GetState()!=adStateClosed)
{
hr=m_pRecordset->Open(bstrSQL,m_pConnection .GetInterfacePtr(), 数据库打开后传入数据
adOpenDynamic,adLockOptimistic,adCmdText);
return hr==S_OK;
}
else
{
MessageBoxA(AfxGetMainWnd()->GetSafeHwnd(),"数据库没有打开,执行SQL失败!",MB_OK|MB_ICONINFORMATION);
if(m_pRecordset->GetState()!=adStateClosed)
m_pRecordset->Close();
return FALSE;
}
最后结束数据库操作:if(m_pConnection->GetState() != adStateClosed)
m_pConnection ->Close(); 调用智能指针关闭。
以上操作可以放入异常处理中实现。
在操作数据库时,首先创一个以上的数据库对象,调用连接函数和读取函数。再对读取的数据m_pRecordset进行操作, 最后销毁对象。