VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 161|回复: 0

VC++高级班之数据库篇-[11]查询功能的实现

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-6-12 00:52:57 | 显示全部楼层 |阅读模式
①、补充上节课源码:QueryDVDName 函数的实现:
代码已放入VC驿站Vip的QQ技术交流群共享中,请各位Vip会员手动下载!
===================================================
②、主对话框中 ComboBox 控件的初始化:
  1. void CRentMgrDlg::InitDVDNameComboBox()
  2. {
  3.         _RecordsetPtr pDvdNameRecordset;
  4.         pDvdNameRecordset.CreateInstance(__uuidof(Recordset));
  5.         CString strSQL;
  6.         strSQL = _T("SELECT sDVDName FROM tbDVDInfo");
  7.         try
  8.         {
  9.                 HRESULT hr = pDvdNameRecordset->Open(_variant_t(strSQL), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
  10.                 if (FAILED(hr)) {
  11.                         return;
  12.                 }
  13.         }
  14.         catch(_com_error *e){
  15.                 MessageBox(e->ErrorMessage());
  16.                 return;
  17.         }

  18.         CString strValue;
  19.         _variant_t var;

  20.         int iCurrIdx = 0;
  21.         m_comboDVD.InsertString(iCurrIdx++, _T(""));
  22.         try
  23.         {
  24.                 while(!pDvdNameRecordset->GetadoEof())
  25.                 {
  26.                         var = pDvdNameRecordset->GetCollect(_T("sDVDName"));
  27.                         if (var.vt != NULL) {
  28.                                 strValue = (LPCTSTR)_bstr_t(var);
  29.                                 m_comboDVD.InsertString(iCurrIdx++, strValue);
  30.                                 pDvdNameRecordset->MoveNext();
  31.                         }
  32.                 }

  33.                 pDvdNameRecordset->Close();
  34.                 pDvdNameRecordset = NULL;
  35.         }
  36.         catch(_com_error *e){
  37.                 MessageBox(e->ErrorMessage());
  38.                 return;
  39.         }
  40. }
复制代码

===================================================
③、主界面上查询功能按钮的实现:
  1. void CRentMgrDlg::OnBnClickedButtonQuery()
  2. {
  3.         UpdateData(TRUE);
  4.         _RecordsetPtr pQueryRecordset;
  5.         pQueryRecordset.CreateInstance(__uuidof(Recordset));

  6.         CString strDataFrom, strDataTo, strDVDName;
  7.         m_comboDVD.GetWindowText(strDVDName);

  8.         CString strSQL;
  9.         if ((!m_check_Date) && m_name.IsEmpty() && strDVDName.IsEmpty()) {
  10.                 strSQL = _T("SELECT * FROM tbRentInfo");
  11.         }else{
  12.                 strSQL = _T("SELECT * FROM tbRentInfo where");
  13.         }

  14.         if (m_check_Date) {
  15.                 CTime timeFrom, timeTo;
  16.                 m_DateFrom.GetTime(timeFrom);
  17.                 m_DateTo.GetTime(timeTo);

  18.                 m_DateFrom.GetWindowText(strDataFrom);
  19.                 m_DateTo.GetWindowText(strDataTo);

  20.                 if (timeFrom.GetMonth() > timeTo.GetMonth()) {
  21.                         MessageBox(_T("日期设置错误."));
  22.                         return;
  23.                 }else if (timeFrom.GetMonth() == timeTo.GetMonth()) {
  24.                         if (timeFrom.GetDay() > timeTo.GetDay()) {
  25.                                 MessageBox(_T("日期设置错误."));
  26.                                 return;
  27.                         }
  28.                 }

  29.                 strSQL.AppendFormat(_T(" sDate>=\'%s\' and sDate<=\'%s\'"), strDataFrom, strDataTo);
  30.         }

  31.         if (!m_name.IsEmpty()) {
  32.                 if (m_check_Date) {
  33.                         strSQL.AppendFormat(_T(" and sName=\'%s\'"), m_name);
  34.                 }else{
  35.                         strSQL.AppendFormat(_T(" sName=\'%s\'"), m_name);
  36.                 }
  37.         }

  38.         if (!strDVDName.IsEmpty()) {
  39.                 if ((!m_check_Date) && m_name.IsEmpty()) {
  40.                         strSQL.AppendFormat(_T(" sDVDID=%d"), QueryDVDId(strDVDName));
  41.                 }else{
  42.                         strSQL.AppendFormat(_T(" and sDVDID=%d"), QueryDVDId(strDVDName));
  43.                 }
  44.         }

  45.         //////////////////////////////////////////////////////////////////////////
  46.         //上面构造好SQL查询语句之后,下面就开始查询啦
  47.         try
  48.         {
  49.                 HRESULT hr = pQueryRecordset->Open(_variant_t(strSQL), m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText);
  50.                 if (FAILED(hr)) {
  51.                         return;
  52.                 }
  53.         }
  54.         catch (_com_error* e)
  55.         {
  56.                 MessageBox(e->ErrorMessage());
  57.                 return;
  58.         }
  59.         //判断记录集是否为空
  60.         if (pQueryRecordset->GetadoEof()) {
  61.                 MessageBox(_T("记录集为空。。。"));
  62.                 return;
  63.         }else{
  64.                 _variant_t var;
  65.                 CString strValue;
  66.                 int curItem = 0;

  67.                 m_rentInfoList.DeleteAllItems();

  68.                 try {
  69.                         while(!pQueryRecordset->GetadoEof()){
  70.                                 var = pQueryRecordset->GetCollect((long)0);
  71.                                 if (var.vt != NULL)
  72.                                         strValue = (LPCTSTR)_bstr_t(var);
  73.                                 m_rentInfoList.InsertItem(curItem, strValue);

  74.                                 var = pQueryRecordset->GetCollect(_T("sName"));
  75.                                 if (var.vt != NULL)
  76.                                         strValue = (LPCTSTR)_bstr_t(var);
  77.                                 m_rentInfoList.SetItemText(curItem, 1, strValue);

  78.                                 var = pQueryRecordset->GetCollect(_T("sDVDID"));
  79.                                 if (var.vt != NULL)
  80.                                         strValue = (LPCTSTR)_bstr_t(var);
  81.                                 m_rentInfoList.SetItemText(curItem, 2, QueryDVDName(strValue));

  82.                                 var = pQueryRecordset->GetCollect(_T("sDate"));
  83.                                 if (var.vt != NULL)
  84.                                         strValue = (LPCTSTR)_bstr_t(var);
  85.                                 m_rentInfoList.SetItemText(curItem, 3, strValue);

  86.                                 pQueryRecordset->MoveNext();
  87.                                 curItem++;
  88.                         }
  89.                 }catch(_com_error *e){
  90.                         MessageBox(e->ErrorMessage());
  91.                         return;
  92.                 }
  93.         }

  94.         pQueryRecordset->Close();
  95.         pQueryRecordset = NULL;
  96. }
复制代码

===================================================
涉及到的另外一个函数:QueryDVDId 下节课讲解。
功能是根据DVD的名字获取DVD的ID。
===================================================
※※※ 小作业:
1、熟练掌握记录集对象的使用方法;
2、实现 QueryDVDId 函数的功能,下节课给源码。
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
VC驿站Vip会员售后答疑截图【持续更新】:http://www.cctry.com/thread-288054-1-1.html
教程介绍及详情请见:http://www.cctry.com/static/vip/index.html
VC驿站Vip会员详情请见:http://www.cctry.com/static/vip/index.html

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /1 下一条

QQ
QQ在线咨询
联系电话
13591366679
手机扫一扫 关注本站精彩内容
wxqrcode

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-6-24 17:09

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表