// bookDlg.cpp : implementation file // #include "stdafx.h" #include "test.h" #include "bookDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CbookDlg dialog CbookDlg::CbookDlg(CWnd* pParent /*=NULL*/) : CDialog(CbookDlg::IDD, pParent) { //{{AFX_DATA_INIT(CbookDlg) m_id = _T(""); m_info = _T(""); m_name = _T(""); m_press = _T(""); m_writer = _T(""); m_msg = _T(""); //}}AFX_DATA_INIT num = 0; } void CbookDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CbookDlg) DDX_Control(pDX, IDC_COMBO2, m_qrymsg); DDX_Control(pDX, IDC_COMBO1, m_combo); DDX_Text(pDX, IDC_ID, m_id); DDX_Text(pDX, IDC_INFO, m_info); DDX_Text(pDX, IDC_NAME, m_name); DDX_Text(pDX, IDC_PRESS, m_press); DDX_Text(pDX, IDC_WRITER, m_writer); DDX_Text(pDX, IDC_MSG, m_msg); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CbookDlg, CDialog) //{{AFX_MSG_MAP(CbookDlg) ON_BN_CLICKED(IDC_ADD, OnAdd) ON_BN_CLICKED(IDC_SAVE, OnSave) ON_BN_CLICKED(IDC_DEL, OnDel) ON_BN_CLICKED(IDC_EDIT, OnEdit) ON_BN_CLICKED(IDC_QRY, OnQry) ON_BN_CLICKED(IDC_AGAIN, OnAgain) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CbookDlg message handlers void CbookDlg::OnAdd() { // TODO: Add your control notification handler code here //清空编辑框内容 m_id=""; m_info=""; m_name=""; m_press=""; m_writer=""; m_combo.SetCurSel(-1); //列表框默认显示内容 UpdateData(false); //编辑框控件可用 GetDlgItem(IDC_ID)->EnableWindow(TRUE); GetDlgItem(IDC_INFO)->EnableWindow(TRUE); GetDlgItem(IDC_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_PRESS)->EnableWindow(TRUE); GetDlgItem(IDC_WRITER)->EnableWindow(TRUE); GetDlgItem(IDC_COMBO1)->EnableWindow(TRUE); } void CbookDlg::OnSave() { // TODO: Add your control notification handler code here UpdateData(true); //更新数据 CString combo; int a=m_combo.GetCurSel(); if(a!=-1) m_combo.GetLBText(a,combo); else combo=""; if(combo==""||m_id==""||m_name==""||m_press==""||m_writer=="") //输入内容不全 { AfxMessageBox("必须填入全部信息"); return; } CoInitialize(NULL); _ConnectionPtr pconnect(__uuidof(Connection)); _RecordsetPtr record(__uuidof(Recordset)); _CommandPtr comd(__uuidof(Command)); 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)); //查看数据库中是否以有ID为m_id的书籍,如果有,那么操作失败 //标准SQL语句 CString cmd="select * from BOOK where BID='"; cmd+=m_id; cmd+="'"; comd->CommandText=_bstr_t(cmd); //得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); if(!record->end) { AfxMessageBox("数据库已有此ID信息,重新输入ID"); //输入的号码已经存在 return; } cmd="INSERT INTO BOOK VALUES('"; cmd+=m_id;cmd+="','"; cmd+=m_name;cmd+="','"; cmd+=m_writer;cmd+="','"; cmd+=m_press;cmd+="','"; cmd+=m_info;cmd+="','"; cmd+=combo;cmd+="')"; comd->CommandText=_bstr_t(cmd); //得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); //执行SQL语句 AfxMessageBox("保存到数据库成功"); //弹出消息框 pconnect->Close(); comd.Release(); record.Release(); pconnect.Release(); CoUninitialize(); //改变控件的状态 GetDlgItem(IDC_ID)->EnableWindow(FALSE); GetDlgItem(IDC_INFO)->EnableWindow(FALSE); GetDlgItem(IDC_NAME)->EnableWindow(FALSE); GetDlgItem(IDC_PRESS)->EnableWindow(FALSE); GetDlgItem(IDC_WRITER)->EnableWindow(FALSE); GetDlgItem(IDC_COMBO1)->EnableWindow(FALSE); } void CbookDlg::OnDel() { // TODO: Add your control notification handler code here UpdateData(true); CoInitialize(NULL); _ConnectionPtr pconnect(__uuidof(Connection)); _RecordsetPtr record(__uuidof(Recordset)); _CommandPtr comd(__uuidof(Command)); 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)); //利用SQL语句进行删除操作 CString cmd="delete from BOOK where BID='"; //标准SQL语句 cmd+=m_id; cmd+="'"; comd->CommandText=_bstr_t(cmd); //得到SQL语句 num--; record=comd->Execute(NULL,NULL,adCmdText); //执行SQL语句 pconnect->Close(); comd.Release(); record.Release(); pconnect.Release(); CoUninitialize(); } void CbookDlg::OnEdit() { // TODO: Add your control notification handler code here //编辑框可用 GetDlgItem(IDC_ID)->EnableWindow(TRUE); GetDlgItem(IDC_INFO)->EnableWindow(TRUE); GetDlgItem(IDC_NAME)->EnableWindow(TRUE); GetDlgItem(IDC_PRESS)->EnableWindow(TRUE); GetDlgItem(IDC_WRITER)->EnableWindow(TRUE); GetDlgItem(IDC_COMBO1)->EnableWindow(TRUE); } void CbookDlg::OnQry() { // TODO: Add your control notification handler code here //查询状态下,所有编辑框不可用 GetDlgItem(IDC_QRY)->EnableWindow(false); GetDlgItem(IDC_COMBO2)->EnableWindow(false); GetDlgItem(IDC_MSG)->EnableWindow(false); GetDlgItem(IDC_AGAIN)->EnableWindow(true); UpdateData(true); //更新数据 CString combo; int a=m_qrymsg.GetCurSel(); if(a!=-1) m_qrymsg.GetLBText(a,combo); else combo=""; if(combo==""||m_msg=="") { 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_msg;cmd1+=m_msg; 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("查无记录"); //记录数目为0 return; } //执行查询语句 comd->CommandText=_bstr_t(cmd); //得到SQL语句 record=comd->Execute(NULL,NULL,adCmdText); if(num+1>=vCount.lVal||vCount.lVal==0) GetDlgItem(IDC_NEXT)->EnableWindow(false); else GetDlgItem(IDC_NEXT)->EnableWindow(true); if(num<1) GetDlgItem(IDC_LAST)->EnableWindow(false); else GetDlgItem(IDC_LAST)->EnableWindow(true); if(!record->end) { record->MoveFirst(); //从头开始定位到num位置,因此可以实现查看"前一条"和"后一条"功能 record->Move(num); m_id=(char*)(_bstr_t)record->GetCollect("BID"); //记录的BID内容 m_name=(char*)(_bstr_t)record->GetCollect("BNAME"); //记录的BNAME内容 m_writer=(char*)(_bstr_t)record->GetCollect("BWRITER"); //记录的BWRITER内容 m_press=(char*)(_bstr_t)record->GetCollect("BPRESS"); //记录的BPRESS内容 m_info=(char*)(_bstr_t)record->GetCollect("BINFO"); //记录的BINFO内容 CString str="可借"; CString restr; restr=(char*)(_bstr_t)record->GetCollect("BSTATE"); //记录的BSTATE内容 int length=str.GetLength(); if(restr.Left(length)==str) // BSTATE为可借 m_combo.SetCurSel(1); //列表框显示第二项内容 else m_combo.SetCurSel(0); UpdateData(false); //更新数据 } if(record->State) record->Close(); if(pconnect->State) pconnect->Close(); comd.Release(); record.Release(); pconnect.Release(); CoUninitialize(); } void CbookDlg::OnAgain() { // TODO: Add your control notification handler code here num=0; //更新按钮的状态 GetDlgItem(IDC_QRY)->EnableWindow(true); GetDlgItem(IDC_COMBO2)->EnableWindow(true); GetDlgItem(IDC_MSG)->EnableWindow(true); GetDlgItem(IDC_AGAIN)->EnableWindow(false); }