2.3 创建公用模块 在这个系统中,频繁地使用到了对数据库的访问,修改等操作,所以把针对数据库的一些公共操作集中起来,可以使代码更加规范和容易维护。在classview中,利用鼠标右键单击“cmaterial_misapp”项目,选择“add member variable”选项,然后依次添加这个工程中要使用到的变量: 内容来自www.paper51.com public: copyright paper51.com
CString m_sCurrentUser; paper51.com
int m_iLoginCount; copyright paper51.com _RecordsetPtr m_pADOSet; paper51.com private: copyright paper51.com
_ConnectionPtrADOConn; //定义ado数据库连接对象指针 http://www.paper51.com 选择 add member function添加函数 http://www.paper51.com boolADOExecute(_RecordsetPtr&ADOSet,_variant_&strSQL); paper51.com 最后手工添加一个外部变量的声明: 内容来自www.paper51.com
extern Cmaterial_MISApptheApp; http://www.paper51.com 在visual c++中进行数据库操作一定要引进ado类,所在把下面这段代码添加到这个工程中的stdafx.h中,才能对记录集进行操作。 内容来自www.paper51.com
#import "C:\Programfiles\common files\System\ado\msado15.dll" no_namespace \ 内容来自www.paper51.com
rename("EOF","EndOfFile")\ copyright paper51.com rename("LockTypeEnum","newLockTypeEnum")\ copyright paper51.com rename("DataTypeEnum","newDataTypeEnum")\ copyright paper51.com rename("FieldAttributeEnum","newFieldAttributeEnum")\ copyright paper51.com
rename("EditModeEnum","newEditModeEnum")\ paper51.com rename("RecordStatusEnum","newRecordStatusEnum")\ http://www.paper51.com
rename("ParameterDirectionEnum","newParameterDirectionEnum")在cmaterial_misapp类的initistance()函数中添加如下代码: paper51.com m_iLoginCount = 0; copyright paper51.com
// 创建ADO连接对象 http://www.paper51.com if( FAILED(::CoInitialize(NULL)) ) paper51.com { http://www.paper51.com
AfxMessageBox("ADO Initfailed"); http://www.paper51.com returnfalse; 内容来自论文无忧网 www.paper51.com
} 内容来自www.paper51.com
try http://www.paper51.com { paper51.com { 内容来自www.paper51.com ADOConn.CreateInstance(__uuidof(Connection)); http://www.paper51.com ADOConn->Open(_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;DataSource="+GetCurDir()+"ylz.mdb"),_bstr_t(""),_bstr_t(""),adModeUnknown); 内容来自www.paper51.com } copyright paper51.com
// 捕捉例外 paper51.com catch(_com_error&e) http://www.paper51.com { 内容来自www.paper51.com CStringerr; http://www.paper51.com err.Format("%s",(char*)(e.Description()) ); copyright paper51.com AfxMessageBox(err); copyright paper51.com } 内容来自论文无忧网 www.paper51.com
catch(...) copyright paper51.com { 内容来自www.paper51.com AfxMessageBox("UnknownError..."); copyright paper51.com } http://www.paper51.com copyright paper51.com // 初始化ADO记录集 paper51.com 添加以上代码后,就完成了打开数据库的工作,同时添加下面的代码,来设置窗口的名称: 内容来自www.paper51.com m_pMainWnd->SetWindowText(_T("物料管理信息系统")); 内容来自www.paper51.com 在函数中bool ADOExecute(_RecordsetPtr&ADOSet, _variant_t &strSQL)中添加如下代码: http://www.paper51.com bool CMaterial_MISApp::ADOExecute(_RecordsetPtr&ADOSet, _variant_t &strSQL) paper51.com { paper51.com if( ADOSet->State == adStateOpen) ADOSet->Close(); 内容来自论文无忧网 www.paper51.com try paper51.com { paper51.com ADOSet->Open(strSQL, ADOConn.GetInterfacePtr(),adOpenStatic, adLockOptimistic, adCmdUnknown); copyright paper51.com return true; 内容来自论文无忧网 www.paper51.com
} http://www.paper51.com catch(_com_error&e) 内容来自论文无忧网 www.paper51.com { 内容来自论文无忧网 www.paper51.com CStringerr; http://www.paper51.com err.Format("ADO Error:%s",(char*)e.Description()); http://www.paper51.com AfxMessageBox(err); 内容来自论文无忧网 www.paper51.com return false; paper51.com } 内容来自www.paper51.com } 内容来自www.paper51.com 最后添加关闭数据库连接的函数。选择ADD Virtual Function添加一个虚函数,重载系统提供的ExitInstance()函数,填写代码如下: 内容来自论文无忧网 www.paper51.com int CMaterial_MISApp::ExitInstance() 内容来自论文无忧网 www.paper51.com
{ paper51.com
// TODO:Add your specialized code here and/or call the base class http://www.paper51.com
内容来自www.paper51.com
//释放ADO连接对象 http://www.paper51.com if(adStateOpen == ADOConn->State ) ADOConn->Close(); http://www.paper51.com ADOConn.Release(); copyright paper51.com paper51.com // 释放ADO记录集 内容来自论文无忧网 www.paper51.com if(adStateOpen==m_pADOSet->State) m_pADOSet->Close(); 内容来自论文无忧网 www.paper51.com m_pADOSet.Release(); 内容来自论文无忧网 www.paper51.com copyright paper51.com returnCWinApp::ExitInstance(); http://www.paper51.com } 内容来自www.paper51.com 通过以上的编写,完成了对数据库的基本操作,为下面的工作提供了最基本的功能。 内容来自www.paper51.com |