Access 与C++编程
来源:互联网 发布:慈溪楼市每日成交数据 编辑:程序博客网 时间:2024/06/06 20:50
本项目用C++做一个与Access数据库操作的项目。
一个登陆,一个增删改查。
主界面设计如下:
控件关联变量如下:
登录设计界面如下:(添加类CLoginDialog)
控件关联变量如下:
打开Microsoft Office->Access->建数据库Employee.accdb
建两张表:
t_worker存放员工信息
t_user存放登录用户信息
两张表插入一些数据,保存后,将Employee.accdb放在项目源文件同一目录下。
准备工作:引入吕鑫老师封装好的操作数据库的类CAdoLx,功能强大,使用简单。在“鑫路历程”官网可下载源代码。
若因为Access版本的原因连接不上数据库,下载AccessDatabaseEngine.exe,安装就可以了。
我使用的是Microsoft Office2007
启动项目时,登录对话框先弹出来:在App类的InitInstance()中实现
BOOL CWorkerApp::InitInstance(){CLoginDialog logDlg;logDlg.DoModal();CWorkerDlg dlg;m_pMainWnd = &dlg;INT_PTR nResponse = dlg.DoModal();return FALSE;}
登录验证:
添加数据库操作的类对象:CAdoLx m_ado1;
void CLoginDialog::OnBnClickedBtnLogin(){//连接数据库if(!m_ado1.Connect(CAdoLx::DBT_ACCESS,_T("./Employee.accdb")))MessageBox(m_ado1.GetLastError());UpdateData();CString szSql;//根据用户名和密码查询数据szSql.Format(_T("SELECT * FROM t_user WHERE f_name='%s' AND f_pwd='%s'"),m_user,m_pwd);if(!m_ado1.Select(szSql)) //执行查询AfxMessageBox(m_ado1.GetLastError());if(m_ado1.IsEOF()) //如果查询记录为空,则失败MessageBox(_T("用户名或密码错误!"));elseCDialog::OnOK();}
在主对话框的OnInitDialog()中初始化控件及连接数据库
添加数据库操作的类对象:CAdoLx m_ado;
//列表框插入列m_list.InsertColumn(0,_T("工号"),0,120);m_list.InsertColumn(1,_T("姓名"),0,120);m_list.InsertColumn(2,_T("薪水"),0,120);m_list.InsertColumn(3,_T("入职日期"),0,120);//设置扩展风格m_list.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT);//连接Access数据库中的Employee.accdb,该文件在源文件同目录下if(!m_ado.Connect(CAdoLx::DBT_ACCESS,_T("./Employee.accdb")))MessageBox(m_ado.GetLastError());Refresh();//刷新列表框,查询到的数据显示在列表框中
其中Refresh()的代码如下:(查询功能)
void CWorkerDlg::Refresh(void) //将表内数据显示到列表框{m_list.DeleteAllItems(); //先清空列表框CString szSql=_T("SELECT * FROM t_worker"); //查询语句//szSql=_T("SELECT * FROM t_worker WHERE f_id<100"); //条件查询if(!m_ado.Select(szSql)) //执行查询MessageBox(m_ado.GetLastError());int nID,i=0;double dSal;COleDateTime dt;CString str;while(!m_ado.IsEOF()) //遍历表中数据,添加到列表框中{//获取ID//**********注意:GetFieldByIndex()第一个参数为返回的记录数据的字段索引,而非表中字段的索引**********m_ado.GetFieldByIndex(0,nID);str.Format(_T("%d"),nID);m_list.InsertItem(i,str);//获取姓名m_ado.GetFieldByIndex(1,str);m_list.SetItemText(i,1,str);//获取薪水m_ado.GetFieldByIndex(2,dSal);str.Format(_T("%0.2lf"),dSal);m_list.SetItemText(i,2,str);//获取入职日期m_ado.GetFieldByIndex(3,dt);//str.Format(_T("%d"),nID);m_list.SetItemText(i,3,dt.Format(_T("%Y年%m月%d日")));m_ado.MoveNext(); //下一条记录i++;}}
增:
void CWorkerDlg::OnBnClickedBtnAdd(){UpdateData();CString szSql;//全字段插入数据//szSql.Format(_T("INSERT INTO t_worker VALUES(%d,'%s',%0.2lf,'%s')"),m_nID,m_name,m_sala,m_date.Format(_T("%Y-%m-%d")));//部分字段插入数据szSql.Format(_T("INSERT INTO t_worker (f_name,f_salary,f_date) VALUES('%s',%0.2lf,'%s')"),m_name,m_sala,m_date.Format(_T("%Y-%m-%d")));if(m_ado.ExecSQL(szSql)<0) //执行失败,返回负数MessageBox(szSql);Refresh(); //将表内数据显示到列表框}
删:
void CWorkerDlg::OnBnClickedBtnDel(){int nSel=m_list.GetSelectionMark();if(nSel<0){MessageBox(_T("请选择一条数据删除!"));return;}CString szID=m_list.GetItemText(nSel,0);if(AfxMessageBox(_T("确定要删除工号为")+szID+_T("的这条记录吗?"),MB_YESNO)==IDNO)return;CString szSql;szSql.Format(_T("DELETE FROM t_worker WHERE f_ID=%s"),szID);if(m_ado.ExecSQL(szSql)<0)MessageBox(szSql);elseRefresh();}
改:
void CWorkerDlg::OnBnClickedBtnModify(){int nSel=m_list.GetSelectionMark();if(nSel<0){MessageBox(_T("请选择一条数据进行修改!"));return;}CString szID=m_list.GetItemText(nSel,0);if(AfxMessageBox(_T("确定要修改工号为")+szID+_T("的这条记录吗?"),MB_YESNO)==IDNO)return;UpdateData();CString szSql;szSql.Format(_T("UPDATE t_worker SET f_name='%s',f_salary=%0.2lf,f_date='%s' WHERE f_ID=%s"),m_name,m_sala,m_date.Format(_T("%Y-%m-%d")),szID);if(m_ado.ExecSQL(szSql)<0)MessageBox(szSql);elseRefresh();}
阅读全文
0 0
- Access 与C++编程
- Matlab与Access数据库编程
- Matlab与Access数据库编程指南
- access.c
- [转]C#.net编程创建 Access 文件和 Excel 文件
- [转]C#.net编程创建 Access 文件和 Excel 文件
- 编程学C#(1):Access数据库管理
- C与MATLAB编程
- C与shell混合编程
- C与C++编程区别
- C与C#混合编程
- C与C++混合编程
- nasm与c混合编程
- Lua 与 C混合编程 .
- ARM与C混合编程
- socket编程 与c通信
- c与c++混合编程
- C与汇编混合编程
- 网络干货,无论是运维还是开发都要知道的网络知识系列之(一)
- jsp取得绝对路径
- 哈哈
- bzoj3408 [Usaco2009 Oct]Heat Wave 热浪(Dijkstra裸题)
- bzoj1787 [Ahoi2008]Meet 紧急集合 树上倍增
- Access 与C++编程
- qt静态链接库心得
- 正则表达式
- Elasticsearch 架构
- BZOJ1801 Ahoi2009 chess 中国象棋
- 关联容器
- C. The Tag Game【dfs】
- 佳能iR2018一体机驱动下载 v14.2官方版
- poj 前缀中的周期