📄 querybasicdlg.cpp
字号:
// QueryBasicDlg.cpp : implementation file
//
#include "stdafx.h"
#include "Library.h"
#include "BookRS1.h"
#include "QueryAdvanceDlg.h"
#include "QueryBasicDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CQueryBasicDlg dialog
CQueryBasicDlg::CQueryBasicDlg(CWnd* pParent /*=NULL*/)
: CDialog(CQueryBasicDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CQueryBasicDlg)
m_strKeyWord = _T("");
//}}AFX_DATA_INIT
}
void CQueryBasicDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CQueryBasicDlg)
DDX_Control(pDX, IDC_LIST_RESULT, m_listResult);
DDX_Control(pDX, IDC_LIST_DETAIL, m_listDetail);
DDX_Text(pDX, IDC_KEY_WORD, m_strKeyWord);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CQueryBasicDlg, CDialog)
//{{AFX_MSG_MAP(CQueryBasicDlg)
ON_BN_CLICKED(IDC_QUERY, OnQuery)
ON_LBN_SELCHANGE(IDC_LIST_RESULT, OnSelchangeListResult)
ON_BN_CLICKED(IDC_ADVANCED_QUERY, OnAdvancedQuery)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQueryBasicDlg message handlers
void CQueryBasicDlg::OnQuery()
{
// TODO: Add your control notification handler code here
UpdateData();//将编辑框内容更新到与此绑定的成员变量如m_strKeyWord中
m_listResult.ResetContent();//清空结果列表的内容(如果有)
if (!m_bookSet.IsOpen()){
m_bookSet.Open();
}
//设置查询条件,根据书名关键字进行模糊查询
m_bookSet.m_strFilter="title like '%"+m_strKeyWord+"%'";
m_bookSet.m_strSort="title"; //按书名升序排序
m_bookSet.Requery();
//找不到该书
if (m_bookSet.IsEOF()){
AfxMessageBox("查无此书");
return;
}
//将全部的结果显示在结果列表中
while (!m_bookSet.IsEOF()){
m_listResult.AddString(m_bookSet.m_title);
m_bookSet.MoveNext();
}
}
void CQueryBasicDlg::OnSelchangeListResult()
{
// TODO: Add your control notification handler code here
//用数据aColCaption来存放所有列标题信息,与数据库中的次序一致
CString aColCaption[9];
aColCaption[0]="书号: ";
aColCaption[1]="类别: ";
aColCaption[2]="书名: ";
aColCaption[3]="出版社: ";
aColCaption[4]="作者: ";
aColCaption[5]="出版日期: ";
aColCaption[6]="价格: ";
aColCaption[7]="藏书总量: ";
aColCaption[8]="当前库存量: ";
m_listDetail.ResetContent();//清空书目详细信息列表中的原有内容
int curSel;//记录集中的当前位置
CString strDetail;//内容
CString strLine;//列表中的一行,行=标题:+内容
curSel= m_listResult.GetCurSel();//取得结果列表中当前的选中位置
m_bookSet.SetAbsolutePosition(curSel+1); //将记录集指针移到该位置
for (int i=0;i<m_bookSet.m_nFields;i++){
m_bookSet.GetFieldValue(i,strDetail);//从记录集中取出第i列的值,存在strDetail中
strLine.Empty();// 清空原有的内容
strLine+=aColCaption[i];//增加标题
strLine+=strDetail;//增加内容
m_listDetail.AddString(strLine);//把该行添加到书目详细信息的列表中
}
}
void CQueryBasicDlg::OnAdvancedQuery()
{
// TODO: Add your control notification handler code here
int i;
int j;
CQueryAdvanceDlg advancedQuery;
advancedQuery.DoModal();//显示高级查询对话框
CString str;
CString strFilter;//查询条件
CString * astrKeyWord[4];//指向CString的指针数组,记录用户输入的关键字 astrKeyWord[0]不用
CTime * astrKeyDate[3];
double * astrKeyPrice[3];
CString astrColumnCaption[6];//列名
CString * astrColumnVal[6];//指向CString的指针数组,记录用户选择的查询条件
CString * aAndOr[6];//指向CString的指针数组,记录用户选择的是and 还是or
aAndOr[1]=&advancedQuery.m_andOr1;
aAndOr[2]=&advancedQuery.m_andOr2;
aAndOr[3]=&advancedQuery.m_andOr3;
aAndOr[4]=&advancedQuery.m_andOr4;
aAndOr[5]=&advancedQuery.m_andOr5;
astrColumnVal[1]=&advancedQuery.m_condition1;
astrColumnVal[2]=&advancedQuery.m_condition2;
astrColumnVal[3]=&advancedQuery.m_condition3;
astrColumnVal[4]=&advancedQuery.m_condition4;
astrColumnVal[5]=&advancedQuery.m_condition5;
//将中文的查询转换成对应的表列名
for (i=1;i<4;i++){
if (!astrColumnVal[i]->Compare("类别")){
astrColumnCaption[i]="kind";
continue;
}
if (!astrColumnVal[i]->Compare("书名")){
astrColumnCaption[i]="title";
continue;
}
if (!astrColumnVal[i]->Compare("作者")){
astrColumnCaption[i]="authors";
continue;
}
if (!astrColumnVal[i]->Compare("出版社")){
astrColumnCaption[i]="press";
continue;
}
}
astrColumnCaption[4]="pub_date";
astrColumnCaption[5]="price";
astrKeyWord[1]=&advancedQuery.m_keyword1;
astrKeyWord[2]=&advancedQuery.m_keyword2;
astrKeyWord[3]=&advancedQuery.m_keyword3;
astrKeyDate[1]=&advancedQuery.m_keydate1;
astrKeyDate[2]=&advancedQuery.m_keydate2;
astrKeyPrice[1]=&advancedQuery.m_keyprice1;
astrKeyPrice[2]=&advancedQuery.m_keyprice2;
i=1;
while (!astrKeyWord[i]->IsEmpty()&&i<4){//用户输入的查询关键字非空则添加查询条件
if (i!=1){//与前面的查询条件必须用and 或or连接
strFilter+=" ";
strFilter+=*aAndOr[i-1];
strFilter+=" ";
}
str.Format("%s='%s'",astrColumnCaption[i],*astrKeyWord[i]);
strFilter+=str;
i++;
}
j=1;
CString s="1970-01-01 08:00:00";
CString s1 =(*astrKeyDate[j]).Format( "%Y-%m-%d %H:%M:%S" );
CString s2 =(*astrKeyDate[j+1]).Format( "%Y-%m-%d %H:%M:%S" );
if(!(s1==s && s2==s))
{
if(i!=1)
{
strFilter+=" ";
strFilter+=*aAndOr[i-1];
strFilter+=" ";
}
str.Format("%s between '%s' and '%s'",astrColumnCaption[4],s1,s2);
strFilter+=str;
i=5;
}
j=1;
if(!(*astrKeyPrice[j]==0 && *astrKeyPrice[j+1]==0))
{
if(i!=1)
{
strFilter+=" ";
strFilter+=*aAndOr[i-1];
strFilter+=" ";
}
str.Format("%s between %lf and %lf",astrColumnCaption[5],*astrKeyPrice[j],*astrKeyPrice[j+1]);
strFilter+=str;
}
//AfxMessageBox(strFilter);
m_bookSet.m_strFilter=strFilter;//设定查询条件为strFilter
if (!m_bookSet.IsOpen()){
m_bookSet.Open();
}
m_bookSet.m_strSort="title"; //按书名升序排序
m_bookSet.Requery();
m_listResult.ResetContent();//清空原来的查询结果
m_listDetail.ResetContent();//清空原来的查询结果
if (m_bookSet.IsEOF()){//结果集为空
AfxMessageBox("查无此书");
return;
}
while (!m_bookSet.IsEOF()){//将结果集中的每一本书的书名添加到查询结果列表中
m_listResult.AddString(m_bookSet.m_title);
m_bookSet.MoveNext();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -