1、C+编程常用模块1(一):连接SQL数据库 一、连接数据库(SQL):(一)直接写在程序中1、导入动态连接库在StdAfx.h中:#import C:Program FilesCommon FilesSystemadomsado15.dll no_namespace rename(EOF,adoEOF) rename(BOF,adoBOF)2、定义Provider宏在StdAfx.h中:#define Provider Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog
2、=HRMS3、初始化a) .h文件中private: HDC m_hDC; DWORD m_CurrentRecord; _RecordsetPtr m_pRecordset; _ConnectionPtr m_pConnection;b) .cpp文件中CADOOperation:CADOOperation() try m_pConnection.CreateInstance(_uuidof(Connection); m_pConnection-Open(_bstr_t(Provider), , , adModeUnknown); catch(_com_error e) AfxMessage
3、Box(e.Description(), MB_OK); exit(0); m_pRecordset.CreateInstance(_uuidof(Recordset); m_CurrentRecord = -1;4、执行5、关闭CADOOperation:CADOOperation() m_pConnection-Close();(二)通过login.ini文件连接void CBbbApp:IniAdo() try CString temp; char filepathMAX_PATH; GetModuleFileName(NULL,filepath,MAX_PATH); temp = th
4、eApp.ExtractFilePath(filepath);/获取可执行文件的路径,也就是程序运行的.exe文件所在路径 /运行后,temp的值为程序文件.exe 所在路径 CString strAdoConn; char temp1100; /* 在同目录下创建login.ini文件,并在其中设置数据库连接字符串,如:DatabaseConfigServer=. / . 表示本机Database=BookManageUser=saPWD=sa*/ GetPrivateProfileString(DatabaseConfig,Server,temp1,100,temp+login.ini);
5、 strserver = (TCHAR *)temp1; GetPrivateProfileString(DatabaseConfig,Database,temp1,100,temp+login.ini); strdbName = temp1; GetPrivateProfileString(DatabaseConfig,User,temp1,100,temp+login.ini); strUser = temp1; GetPrivateProfileString(DatabaseConfig,PWD,temp1,100,temp+login.ini); strPassword = temp1
6、; strAdoConn.Format(driver=SQL Server;SERVER=%s;UID=%s;PWD=%s;DATABASE=%s, strserver, strUser, strPassword, strdbName); m_pCon.CreateInstance(_uuidof(Connection); m_pCon-ConnectionString = (_bstr_t)strAdoConn; m_pCon-Open(,NULL); m_pCom.CreateInstance(ADODB.Command); m_pRs.CreateInstance(_uuidof(Rec
7、ordset); m_pRs1.CreateInstance(_uuidof(Recordset); / ADOFLAG = TRUE; catch(_com_error) /ADOFLAG = FALSE; Flag = FALSE; MessageBox(0,请检查系统配置信息, 数据库连接失败,MB_OK); return; catch(.) AfxMessageBox(SYS Error); return ; C+编程常用模块(二):连接Access数据库 二、连接数据库 (Access 2000)1、在.h文件中导入动态链接库#import C:Program FilesCommon
8、 FilesSystemadomsado15.dllno_namespace rename(EOF,adoEOF)rename(BOF,adoBOF)类定义:class ADOConn public: BOOL ExecuteSQL(_bstr_t bstrSQL); ADOConn(); virtual ADOConn(); /添加一个指向Connection对象的指针 _ConnectionPtr m_pConnection; /添加一个指向Recordset对象的指针 _RecordsetPtr m_pRecordset; _RecordsetPtr& GetRecordSet(_bst
9、r_t bstrSQL); void ExitConnect(); void OnInitADOConn();2、建立连接void ADOConn:OnInitADOConn() /初始化OLE/COM库环境 :CoInitialize(NULL); try char filepathMAX_PATH; GetModuleFileName(NULL,filepath,MAX_PATH); CString strdb; strdb = ExtractFilePath(filepath) + sm.mdb; strdb = DBQ= + strdb; /创建connection对象 m_pConn
10、ection.CreateInstance(ADODB.Connection); m_pConnection-ConnectionTimeout=3; /设置连接字符串,两种都可以 _bstr_t strConnect=DRIVER=Microsoft Access Driver (*.mdb);uid=;pwd=sm; strConnect = strConnect + strdb; /SERVER和UID,PWD的设置根据实际情况来设置 m_pConnection-Open(strConnect,adModeUnknown); /捕捉异常 catch(_com_error e) /显示错误
11、信息 AfxMessageBox(e.Description(); 3、执行SQL语句/仅执行,无返回BOOL ADOConn:ExecuteSQL(_bstr_t bstrSQL) try /是否已连接数据库 if(m_pConnection=NULL) OnInitADOConn(); m_pConnection-Execute(bstrSQL,NULL,adCmdText); return true; catch(_com_error e) e.Description(); return false; /返回记录集_RecordsetPtr& ADOConn:GetRecordSet(_
12、bstr_t bstrSQL) try if(m_pConnection=NULL) OnInitADOConn(); m_pRecordset.CreateInstance(_uuidof(Recordset); m_pRecordset-Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText); catch(_com_error e) e.Description(); return m_pRecordset;4、关闭连接void ADOConn:ExitConnect() /
13、关闭记录集和连接 if(m_pRecordset!=NULL) m_pRecordset-Close(); m_pRecordset=NULL; if(m_pConnection!=NULL) m_pConnection-Close(); m_pConnection=NULL; /释放环境 :CoUninitialize();C+编程常用模块(三):窗体操作 三、窗体操作1、显示对话框窗体CDlgLogin login ; login.DoModal(); 若要处理“确定”或“取消”: int nResponse = login.DoModal();if (nResponse = IDOK)
14、/ TODO: Place code here to handle when the dialog is / dismissed with OK else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is / dismissed with Cancel 2、关闭对话框窗体 EndDialog(0); 或 CDialog:OnCancel(); 或CDialog:OnOK();3、退出应用程序 exit(0);4、登录:P308void CDlgLogin:OnButton1() CStr
15、ing c_user,c_password; m_user.GetWindowText(c_user); m_password.GetWindowText(c_password); if (c_user.IsEmpty() | c_password.IsEmpty() MessageBox(用户名称或密码不能为空, 用户登录信息); return; CString sql; sql.Format(select * from tb_operator where name = %s and password = %s,c_user,c_password); m_pRs-raw_Close(); m
16、_pRs-Open(_variant_t)sql,m_pCon.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText); /if (m_pRs-RecordCount0) 或者 if (!myConn.m_pRecordset -adoEOF) Flag = true; /Flag为全局变量 user = m_pRs-GetCollect(name).bstrVal; password = m_pRs-GetCollect(password).bstrVal; EndDialog(0); else user = ; password
17、 = ; MessageBox(用户名或密码不正确.,提示,64); return; 在程序启动初始化部分BOOL CBbbApp:InitInstance()函数里完成窗口跳转:if (Flag =true) CBbbDlg dlg; /启动主窗体 m_pMainWnd = &dlg; dlg.DoModal(); 5、动态创建工具栏:P306方法(一):CToolBar m_toolbar;CImageList m_imagelist;m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1); m_imagelist.Add(AfxGetApp(
18、)-LoadIcon(IDI_ICON4); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON11); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON13); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON5); m_imagelist.Add(AfxGetApp()-LoadIcon(IDI_ICON19); UINT array5; for(int i=0;iLoadIcon(IDI_ICON4); m_ImageList.Add(:AfxGetApp()-Lo
19、adIcon(IDI_ICON6); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON5); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON2); m_ImageList.Add(:AfxGetApp()-LoadIcon(IDI_ICON3); m_ToolBar.Create(WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, 0); m_ToolBar.SetImageList(&m_ImageList); for(int j=0; j ICONSUM;
20、j+) tbButtonj.dwData = NULL; tbButtonj.fsState = TBSTATE_ENABLED; tbButtonj.fsStyle = (BYTE)TBSTYLE_FLAT; tbButtonj.iBitmap = j; tbButton0.idCommand = ID_Info; tbButton1.idCommand = ID_MR; tbButton2.idCommand = ID_QS; tbButton3.idCommand = ID_XS; tbButton4.idCommand = ID_HELP; m_ToolBar.AddButtons(I
21、CONSUM, tbButton); m_ToolBar.AutoSize(); m_ToolBar.SetStyle(TBSTYLE_FLAT | CCS_TOP);6、设置菜单有效和失效有效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_ENABLED); 失效:m_Menu.EnableMenuItem(ID_USER_REGISTER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);7、设置状态栏CTime Time; Time = CTime:GetCurrentTime(); C
22、String Str = Time.Format(%Y-%m-%d); UINT Array3; for(int i=0;iGetActiveView(); if (! temp-ispreview) theApp.m_pMainWnd = theApp.m_main; CFrameWnd:OnClose();11、窗体标题栏加上图标先在头文件中声明:HICON m_hIcon;在构造函数中:m_hIcon = AfxGetApp()-LoadIcon(IDI_ICON1); 在OnInitDialog()中: SetIcon(m_hIcon, TRUE); / Set big icon Se
23、tIcon(m_hIcon, FALSE); / Set small icon 在OnPaint()中: void CSmDlg:OnPaint() if (IsIconic() CPaintDC dc(this); / device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); / Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1