// QryDlg.cpp : implementation file // #include "stdafx.h" #include "test.h" #include "QryDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CQryDlg dialog CQryDlg::CQryDlg(CWnd* pParent /*=NULL*/) : CDialog(CQryDlg::IDD, pParent) { //{{AFX_DATA_INIT(CQryDlg) m_edit = _T(""); //}}AFX_DATA_INIT } void CQryDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CQryDlg) DDX_Control(pDX, IDC_LIST1, m_list); DDX_Control(pDX, IDC_COMBO, m_combo); DDX_Text(pDX, IDC_EDIT, m_edit); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CQryDlg, CDialog) //{{AFX_MSG_MAP(CQryDlg) ON_BN_CLICKED(IDC_QRY, OnQry) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CQryDlg message handlers BOOL CQryDlg::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here //列表框中初始化 m_list.InsertColumn(0,"书籍号码"); m_list.InsertColumn(1,"书籍名称"); m_list.InsertColumn(2,"书籍作者"); m_list.InsertColumn(3,"出版社"); m_list.InsertColumn(4,"书籍简介"); m_list.InsertColumn(5,"书籍状态"); //获取列表的宽度 RECT rect; m_list.GetWindowRect(&rect); int wid=rect.right-rect.left; //为每列分宽度 m_list.SetColumnWidth(0,wid/12+wid/24); m_list.SetColumnWidth(1,3*wid/12); m_list.SetColumnWidth(2,wid/12+wid/24); m_list.SetColumnWidth(3,2*wid/12); m_list.SetColumnWidth(4,2*wid/12); m_list.SetColumnWidth(5,2*wid/12); m_list.SetExtendedStyle(LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT|LVS_EX_HEADERDRAGDROP); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CQryDlg::OnQry() { // TODO: Add your control notification handler code here m_list.DeleteAllItems(); //删除所有内容 UpdateData(true); //更新显示 CString combo; int a=m_combo.GetCurSel(); if(a!=-1) m_combo.GetLBText(a,combo); else combo=""; if(combo==""||m_edit=="") { AfxMessageBox("必须选择项目并输入查询信息"); //查询项目或者关键字为空 return; } CoInitialize(NULL); _ConnectionPtr pconnect(__uuidof(Connection)); _CommandPtr comd(__uuidof(Command)); _RecordsetPtr record(__uuidof(Recordset)); pconnect->ConnectionString="Provider=MSDASQL.1;Persist Security Info=False;User ID=Administrator;Data Source=student;Initial Catalog=Library"; pconnect->Open("","","",NULL); comd->put_ActiveConnection(_variant_t((IDispatch *)pconnect)); CString cmd; CString cmd1; //保存select count(*)获取记录数目 //标准SQL语句 if(combo=="书籍作者") //查询项目为书籍作者 { cmd="select * from BOOK where BWRITER='"; cmd1="select count(*) from BOOK where BWRITER='"; } if(combo=="出版社") //查询项目为出版社 { cmd="select * from BOOK where BPRESS='"; cmd1="select count(*) from BOOK where BPRESS='"; } if(combo=="书籍名称") //查询项目为书籍名称 { cmd="select * from BOOK where BNAME='"; cmd1="select count(*) from BOOK where BNAME='"; } if(combo=="书籍号") //查询项目为书籍号 { cmd="select * from BOOK where BID='"; cmd1="select count(*) from BOOK where BID='"; } cmd+=m_edit;cmd1+=m_edit; cmd+="'"; cmd1+="'"; comd->CommandText=_bstr_t(cmd1); //得到SQL语句,求解记录数目 record=comd->Execute(NULL,NULL,adCmdText); //得到记录的总数目,在vCount.lVal中保存 variant_t vCount = record->GetCollect((_variant_t)((long)0)); if(vCount.lVal==0) { AfxMessageBox("查无记录"); //数据库中记录为空 return; } //执行查询语句 comd->CommandText=_bstr_t(cmd); //得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); //执行SQL语句 for(int i=0;iGetCollect("BID")); m_list.SetItemText(0,1,(char*)(_bstr_t)record->GetCollect ("BNAME")); m_list.SetItemText(0,2,(char*)(_bstr_t)record->GetCollect ("BWRITER")); m_list.SetItemText(0,3,(char*)(_bstr_t)record->GetCollect ("BPRESS")); m_list.SetItemText(0,4,(char*)(_bstr_t)record->GetCollect ("BINFO")); m_list.SetItemText(0,5,(char*)(_bstr_t)record->GetCollect ("BSTATE")); record->MoveNext(); } if(record->State) record->Close(); if(pconnect->State) pconnect->Close(); comd.Release(); record.Release(); pconnect.Release(); CoUninitialize(); }