设为首页 加入收藏

TOP

4.5.4 职工删除的实现
2013-10-07 00:55:37 来源: 作者: 【 】 浏览:59
Tags:4.5.4 职工 删除 实现

4.5.4  职工删除的实现

上一节介绍了职工信息添加的实现,本节将介绍职工删除的实现。添加一个对话框资源ID为IDD_EMPINFO_MANAGE_DLG,添加如图4-24所示的控件。

 
(点击查看大图)图4-24  职工基本信息管理界面设计

双击对话框为对话框创建一个新类CEmpInfoManageDlg,在头文件中定义变量及成员函数。头文件中相应的代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  class CEmpInfoManageDlg : public CDialog  
  2. 2  {  
  3. 3  public:  
  4. 4   CEmpInfoManageDlg(CWnd* pParent = NULL);  
  5. 5   HTREEITEM m_hParent;                                    //定义树形控件的句柄  
  6. 6   HTREEITEM m_hSelect;  
  7. 7   _RecordsetPtr m_pRecordset;                     //定义记录集  
  8. 8   _RecordsetPtr m_pRecordset1;  
  9. 9   void ShowTreeData();                                //显示树形控件的数据  
  10. 10      void ShowListData(const CString& sql);              //显示列表控件的数据  
  11. 11      int m_nSelect;  
  12. 12      int m_nID;  
  13. 13      .......  
  14. 14  } 

第4~5行代码为树形控件句柄的定义,为向树形控件插入数据做准备工作。

第9~10行代码为定义用户自定义函数,显示树形控件和列表控件的数据。

上述代码为相关变量和成员函数的定义,m_hParent与m_hSelect为属性控件的句柄,函数ShowTreeData()与ShowListData()分别为将数据显示在树形控件和列表控件中。

通过类向导为控件添加相应的变量。并为对话框添加WM_INITDIALOG消息响应函数。OnInitDialog()中的代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  BOOL CEmpInfoManageDlg::OnInitDialog()  
  2. 2  {  
  3. 3   CDialog::OnInitDialog();  
  4. 4   m_pRecordset.CreateInstance("ADODB.Recordset");  
  5. 5   m_pRecordset1.CreateInstance("ADODB.Recordset");            //风格设定  
  6. 6   m_ListCrtl.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT );  
  7. 7   m_ListCrtl.InsertColumn(0, "ID", LVCFMT_CENTER, 40);            //插入列标题  
  8. 8   m_ListCrtl.InsertColumn(1, "员工名称", LVCFMT_CENTER, 60);  
  9. 9   m_ListCrtl.InsertColumn(2, "年龄", LVCFMT_CENTER, 40);  
  10. 10      m_ListCrtl.InsertColumn(3, "性别", LVCFMT_CENTER, 40);  
  11. 11      m_ListCrtl.InsertColumn(4, "籍贯", LVCFMT_CENTER, 120);  
  12. 12      m_ListCrtl.InsertColumn(5, "部门", LVCFMT_CENTER, 120);  
  13. 13      m_ListCrtl.InsertColumn(6, "出生日期", LVCFMT_CENTER, 100);  
  14. 14      m_ListCrtl.InsertColumn(7, "电话", LVCFMT_CENTER, 80);  
  15. 15      m_ListCrtl.InsertColumn(8, "备注", LVCFMT_CENTER, 200);  
  16. 16      ShowTreeData();                                         //显示数据  
  17. 17      return TRUE;  
  18. 18  } 

第4~5行代码为创建记录集的实例。

第6~15行代码为列表控件的初始化工作。

上述代码完成一些初始化工作,函数SetExtendedStyle()设置列表控件的风格,通过InsertColumn()函数可以设置列表控件的列标题,标题的位置和列的宽度。

通过类向导为树形控件添加NM_DBLCLK消息响应函数。主要功能是通过双击树形控件,在列表控件中显示相应的数据,OnDblclkTree1中代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  void CEmpInfoManageDlg::OnDblclkTree1(NMHDR* pNMHDR, LRESULT* pResult)  
  2. 2  {  
  3. 3   _variant_t va;  
  4. 4   CString strSQL;  
  5. 5   HTREEITEM hSelect;  
  6. 6   hSelect = m_TreeCrtl.GetSelectedItem();                 //获取选中节点的索引  
  7. 7   CString strName;  
  8. 8   if(hSelect != m_hParent)                                //判断是否为根节点  
  9. 9   {  
  10. 10          strName = m_TreeCrtl.GetItemText(hSelect);          //获取选中节点的文本  
  11. 11          if(m_TreeCrtl.GetParentItem(hSelect) == m_hParent)  //判断是否为子节点  
  12. 12          {  
  13. 13              strSQL.Format("select * from emp where depart = '%s'", strName);  
  14. 14          }  
  15. 15          else 
  16. 16              strSQL.Format("select * from emp where name = '%s'", strName);  
  17. 17          ShowListData(strSQL);                               //显示数据  
  18. 18      }  
  19. 19      *pResult = 0;  
  20. 20  } 

第4~6行代码为获取选中树形控件的文本。

第8~18行代码实现了构造从不同表中查询数据的SQL语句。

由于树形控件中显示的信息包括职工的单位、部门和职工三种信息,而职工的信息和部门的信息是分别放在数据库中的两个不同的表中。在这里通过单击节点的父节点就可以判断要查询的是哪一张表,从而构造不同的SQL语句来查询职工或者部门的信息。

通过类向导为列表控件添加LVN_ITEMCHANGED消息响应函数。OnItemchangedList1中代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  void CEmpInfoManageDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult)  
  2. 2  {  
  3. 3   NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;  
  4. 4   int nSelect = pNMListView->iItem;                       //获取选定的行号  
  5. 5   theApp.m_strEmpID = m_ListCrtl.GetItemText(nSelect,0);  //获取选定的文本  
  6. 6   *pResult = 0;  
  7. 7  } 

第4~5行代码实现了获取选中列表控件行的第一列的文本。

pNMListView->iItem为当前单击列表控件行的索引,该索引是从0开始的,这样可通过GetItemText()函数获取指定行列的字符串。自定义成员函数ShowTreeData()用来显示树形控件的数据,代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  void CEmpInfoManageDlg::ShowTreeData()  
  2. 2  {  
  3. 3   m_TreeCrtl.DeleteAllItems();                            //删除所有的子项  
  4. 4   HTREEITEM hItem;                                        //定义句柄  
  5. 5   TVINSERTSTRUCT tvInsert;                                //定义结构体  
  6. 6   tvInsert.hParent = NULL;  
  7. 7   tvInsert.hInsertAfter = NULL;  
  8. 8   tvInsert.item.mask = TVIF_TEXT;  
  9. 9   tvInsert.item.pszText = _T("某单位");                  //根节点的赋值  
  10. 10      m_hParent = m_TreeCrtl.InsertItem(&tvInsert);           //插入根节点  
  11. 11      _variant_t vName;  
  12. 12      CString strSQL;                                     //定义字符串变量  
  13. 13      strSQL.Format("select [name] from dep");  
  14. 14      try  
  15. 15      {  
  16. 16          m_pRecordset = theApp.m_pConnection->Execute((_bstr_t)
    strSQL, 
    NULL, adCmdText);  
  17. 17          while(!m_pRecordset->adoEOF)                        //如果记录没有到末尾  
  18. 18          {  
  19. 19              vName = m_pRecordset->GetCollect(_variant_t((long)0));  
    //获取记录集第一列值  
  20. 20              hItem = m_TreeCrtl.InsertItem((char*)_bstr_t(vName), m_hParent);  
  21. 21              strSQL.Format("select name from emp");  
  22. 22              m_pRecordset1=theApp.m_pConnection->  
  23. 23                  Execute((_bstr_t)strSQL,NULL,adCmdText);        //执行SQL语句  
  24. 24              while(!m_pRecordset1->adoEOF)                   //如果记录没有到末尾  
  25. 25              {  
  26. 26                  vName = m_pRecordset1->GetCollect(_variant_t((long)0));  
  27. 27                  m_TreeCrtl.InsertItem((char*)_bstr_t(vName), hItem);  
  28. 28                  m_pRecordset1->MoveNext();  
  29. 29              }  
  30. 30              m_pRecordset->MoveNext();  
  31. 31          }  
  32. 32          m_TreeCrtl.Expand(m_hParent,TVE_EXPAND);            //展开根节点  
  33. 33      }  
  34. 34      CATCH_ERROR;  
  35. 35  } 

第4~9行代码实现了树形控件根节点的设置。

第12~33行代码实现了从数据库中读取数据插入到树形控件中。

由于树形控件中需要显示部门信息又要显示职工信息,而职工信息是根据部门来划分的,所以在这里使用了两层的循环语句。第一个whlie循环读取部门信息,根据读取到的部门信息再遍历记录集读取相应的职工信息。双击【删除】按钮添加消息响应函数,实现职工信息的删除,代码如下:

代码位置:见光盘中本章源代码的CEmpInfoManageDlg类。

  1. 1  void CEmpInfoManageDlg::OnDel()  
  2. 2  {  
  3. 3   if(theApp.m_strEmpID == "")                         //职工编号不能为空  
  4. 4   {  
  5. 5       MessageBox("请选择一条信息!");                     //信息提示  
  6. 6       return ;  
  7. 7   }  
  8. 8   CString strSQL;                                     //定义字符串变量  
  9. 9   strSQL.Format("delete from emp where id = %s", theApp.m_strEmpID);  
  10. 10      if(MessageBox("确定删除吗?""注意", MB_YESNO) == IDYES)   //消息提示  
  11. 11      {  
  12. 12          try  
  13. 13          {  
  14. 14              theApp.m_pConnection->Execute((_bstr_t)strSQL, NULL, adCmdText);  
  15. 15              MessageBox("删除成功!");  
  16. 16              ShowTreeData();  
  17. 17              m_ListCrtl.DeleteAllItems();  
  18. 18          }  
  19. 19          CATCH_ERROR;  
  20. 20      }  
  21. 21  } 


第3~7行代码为删除数据的条件判断。

第8~19行代码为执行SQL语句从数据库中删除数据。

上述代码中读者要注意MessageBox()函数的另一种使用方法,根据提示的信息进行操作。借助Format()函数,使用了"delete from 表名 where"完成了从表中删除数据操作SQL语句的构造,通过Execute()函数执行SQL语句。

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.5.5 职工修改的实现 下一篇4.5.2 职工模块技术分析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: