www.gusucode.com > 一个VC++课程管理程序,MSSQL数据库-源码程序 > 一个VC++课程管理程序,MSSQL数据库-源码程序\code\SourceCode\DialogTEA.cpp
//Download by http://www.NewXing.com // DialogTEA.cpp : implementation file // #include "stdafx.h" #include "YDMS.h" #include "DialogTEA.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CDialogTEA dialog CDialogTEA::CDialogTEA(CWnd* pParent /*=NULL*/) : CDialog(CDialogTEA::IDD, pParent) { //{{AFX_DATA_INIT(CDialogTEA) m_TeaID = 0; m_TeaName = _T(""); m_TeaWay = _T(""); m_TeaSex = _T(""); m_TeaStatus = _T(""); //}}AFX_DATA_INIT } void CDialogTEA::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CDialogTEA) DDX_Control(pDX, IDC_EDIT_TEAID, m_ctlTeaID); DDX_Control(pDX, IDC_BUTTON_QUERY, m_btnQuery); DDX_Control(pDX, IDC_BUTTON_PRE, m_btnPre); DDX_Control(pDX, IDC_BUTTON_OK, m_btnOK); DDX_Control(pDX, IDC_BUTTON_NEXT, m_btnNext); DDX_Control(pDX, IDC_BUTTON_MODIFY, m_btnModify); DDX_Control(pDX, IDC_BUTTON_LAST, m_btnLast); DDX_Control(pDX, IDC_BUTTON_FIRST, m_btnFirst); DDX_Control(pDX, IDC_BUTTON_DELETE, m_btnDelete); DDX_Control(pDX, IDC_BUTTON_ADD, m_btnAdd); DDX_Text(pDX, IDC_EDIT_TEAID, m_TeaID); DDV_MinMaxInt(pDX, m_TeaID, 0, 10000); DDX_Text(pDX, IDC_EDIT_TEANAME, m_TeaName); DDV_MaxChars(pDX, m_TeaName, 10); DDX_Text(pDX, IDC_EDIT_TEAWAY, m_TeaWay); DDV_MaxChars(pDX, m_TeaWay, 50); DDX_CBString(pDX, IDC_COMBO_TEASEX, m_TeaSex); DDX_Text(pDX, IDC_EDIT_TEASTATUS, m_TeaStatus); DDV_MaxChars(pDX, m_TeaStatus, 20); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CDialogTEA, CDialog) //{{AFX_MSG_MAP(CDialogTEA) ON_BN_CLICKED(IDC_BUTTON_QUERY, OnButtonQuery) ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) ON_BN_CLICKED(IDC_BUTTON_DELETE, OnButtonDelete) ON_BN_CLICKED(IDC_BUTTON_MODIFY, OnButtonModify) ON_BN_CLICKED(IDC_BUTTON_FIRST, OnButtonFirst) ON_BN_CLICKED(IDC_BUTTON_PRE, OnButtonPre) ON_BN_CLICKED(IDC_BUTTON_NEXT, OnButtonNext) ON_BN_CLICKED(IDC_BUTTON_LAST, OnButtonLast) ON_BN_CLICKED(IDC_BUTTON_CANCEL, OnButtonCancel) ON_BN_CLICKED(IDC_BUTTON_OK, OnButtonOK) ON_BN_CLICKED(IDC_BUTTON_GOBACK, OnButtonGoBack) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CDialogTEA message handlers // //添加枚举变量来实现对不同功能的区分 // enum examTEA { INIT, //对应没有功能 SEARCH, //对应查找功能 ADD, //对应添加功能 DEL, //对应删除功能 MODIFY, //对应修改功能 }; //定义枚举变量FOUNCTION examTEA FOUNCTION = INIT; BOOL CDialogTEA::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ADD extra initialization here //创建记录集对象 m_pRecordset.CreateInstance(__uuidof(Recordset)); m_pRecordsetSTU.CreateInstance(__uuidof(Recordset)); m_pRecordsetCOU.CreateInstance(__uuidof(Recordset)); //在ADO操作中建议语句中要常用try...catch()来捕获错误信息, //因为它有时会经常出现一些想不到的错误 try { //从SQL数据库中打开TEACHERS表 m_pRecordset->Open("SELECT * FROM TEACHERS", theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } _variant_t var; CString str; try { if(!m_pRecordset->BOF) { m_pRecordset->MoveFirst(); } //如果表内数据为空,设置控件属性并初始对话框 else { AfxMessageBox("表内数据为空"); m_btnQuery.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); return TRUE; } // // 读入库中首字段并加入控件中 // //更新编辑框m_TeaID var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal ; //更新编辑框m_TeaName var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; //更新组合框m_TeaSex var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; //更新编辑框m_TeaStatus var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; //更新编辑框m_TeaWay var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; //更新所有控件显示 UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CDialogTEA::OnButtonQuery() { // TODO: ADD your control notification handler code here m_TeaID = 0; m_TeaStatus = ""; m_TeaName = ""; m_TeaSex = ""; m_TeaWay = ""; UpdateData(false); //更新FOUNCTION值 FOUNCTION = SEARCH; //修改各个矩形按钮的属性 m_btnQuery.SetState(TRUE); m_btnAdd.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } ////////////////////////// // //执行查找功能 // ///////////////////////// void CDialogTEA::Query() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); try { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("TeaID"); if(m_TeaID == var.iVal) { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) { m_TeaID = var.iVal; } var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); break; } else { m_pRecordset->MoveNext(); } } if(m_pRecordset->adoEOF) { MessageBox("没有这个导师编号!"); } } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } ////////////////////////// // //执行添加功能 // ///////////////////////// void CDialogTEA::Add() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); //判断要添加的导师号是否存在 if(m_TeaID != 0 && !m_pRecordset->BOF) { m_pRecordset->MoveFirst(); while(!m_pRecordset->adoEOF) { var = m_pRecordset->GetCollect("TeaID"); if(m_TeaID == var.iVal) { AfxMessageBox("已经存在这个导师号!"); break; } m_pRecordset->MoveNext(); } if(!m_pRecordset->adoEOF) { return; } } if(m_TeaID == 0 || m_TeaName == "") { AfxMessageBox("姓名和编号信息不能为空!"); return; } else { try { // // 写入各字段值 // m_pRecordset->AddNew(); //写入TeaID字段 var.iVal = m_TeaID; m_pRecordset->PutCollect("TeaID", var.iVal); //写入TeaName字段 m_pRecordset->PutCollect("TeaName", _variant_t(m_TeaName)); //写入TeaSex字段 m_pRecordset->PutCollect("TeaSex", _variant_t(m_TeaSex)); //写入TeaStatus字段 m_pRecordset->PutCollect("TeaStatus", _variant_t(m_TeaStatus)); //写入TeaWay字段 m_pRecordset->PutCollect("TeaWay", _variant_t(m_TeaWay)); //更新SQL数据库 m_pRecordset->Update(); //当前记录移动到最后 m_pRecordset->MoveLast(); AfxMessageBox("插入成功!"); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } } ////////////////////////// // //执行删除功能 // ///////////////////////// void CDialogTEA::Delete() { //定义变量 _variant_t var; CString str; //判断当前是否有记录 if(m_TeaID == 0) { MessageBox(" 没有记录!"); return; } //判断是否作为外键被使用 str.Format("select * from STUDENTS where TeaID = %d",m_TeaID); m_pRecordsetSTU->Open(str.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); if(!m_pRecordsetSTU->BOF) { AfxMessageBox("此数据正在被其他表使用,不能删除!"); m_pRecordsetSTU->Close(); return; } else { m_pRecordsetSTU->Close(); } //判断是否作为外键被使用 str.Format("select * from COURSES where CouTea = %d",m_TeaID); m_pRecordsetCOU->Open(str.AllocSysString(), theApp.m_pConnection.GetInterfacePtr(), adOpenDynamic, adLockOptimistic, adCmdText); if(!m_pRecordsetCOU->BOF) { AfxMessageBox("此数据正在被其他表使用,不能删除!"); m_pRecordsetCOU->Close(); return; } else { m_pRecordsetCOU->Close(); } try { // // 删除当前行记录 // m_pRecordset->Delete(adAffectCurrent); m_pRecordset->Update(); m_pRecordset->MoveFirst(); //判断删除后表内数据是否为空 if(m_pRecordset->BOF) { AfxMessageBox("表内数据已经为空!"); m_btnQuery.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); return; } //显示最后一条记录 m_pRecordset->MoveLast(); var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal ; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } ////////////////////////// // //执行修改功能 // ///////////////////////// void CDialogTEA::Modify() { //定义变量 _variant_t var; CString str; //更新控件变量的值 UpdateData(true); if(m_TeaID == 0 || m_TeaName == "") { AfxMessageBox("姓名和年龄信息不能为空!"); return; } // // 修改当前记录的字段值 // try { var.iVal = m_TeaID; m_pRecordset->PutCollect("TeaID", var.iVal); m_pRecordset->PutCollect("TeaName", _variant_t(m_TeaName)); m_pRecordset->PutCollect("TeaSex", _variant_t(m_TeaSex)); m_pRecordset->PutCollect("TeaStatus", _variant_t(m_TeaStatus)); m_pRecordset->PutCollect("TeaWay", _variant_t(m_TeaWay)); m_pRecordset->Update(); AfxMessageBox("修改成功!"); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogTEA::OnButtonOK() { // TODO: ADD your control notification handler code here if(FOUNCTION == SEARCH) { Query(); } else if(FOUNCTION == ADD) { Add(); } else if(FOUNCTION == DEL) { Delete(); } else if(FOUNCTION == MODIFY) { Modify(); } } void CDialogTEA::OnButtonGoBack() { // TODO: ADD your control notification handler code here //关闭记录集,退出 m_pRecordset->Close(); OnCancel(); } void CDialogTEA::OnButtonAdd() { // TODO: ADD your control notification handler code here // //给所有显示控件一个添加之前的初值 // m_TeaID = 0; m_TeaStatus = ""; m_TeaName = ""; m_TeaSex = "男"; m_TeaWay = ""; UpdateData(false); //更新FOUNCTION值 FOUNCTION = ADD; //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(FALSE); m_btnAdd.SetState(TRUE); m_btnDelete.EnableWindow(FALSE); m_btnModify.EnableWindow(FALSE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } void CDialogTEA::OnButtonDelete() { // TODO: ADD your control notification handler code here if(MessageBox("真的删除?\n是请按“是”,\n否请按“否”!", NULL, MB_YESNO | MB_ICONQUESTION) == IDYES) { //更新FOUNCTION值 FOUNCTION = DEL; OnButtonOK(); } else { OnButtonCancel(); } } void CDialogTEA::OnButtonModify() { // TODO: ADD your control notification handler code here //更新FOUNCTION值 FOUNCTION = MODIFY; m_ctlTeaID.SetReadOnly(); //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(FALSE); m_btnAdd.EnableWindow(FALSE); m_btnDelete.EnableWindow(FALSE); m_btnModify.SetState(TRUE); m_btnFirst.EnableWindow(FALSE); m_btnPre.EnableWindow(FALSE); m_btnNext.EnableWindow(FALSE); m_btnLast.EnableWindow(FALSE); m_btnOK.SetFocus(); } void CDialogTEA::OnButtonFirst() { // TODO: ADD your control notification handler code here m_pRecordset->MoveFirst(); _variant_t var; CString str; try { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal ; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogTEA::OnButtonPre() { // TODO: ADD your control notification handler code here m_pRecordset->MovePrevious(); _variant_t var; CString str; if(m_pRecordset->BOF) { MessageBox("已经是首记录!"); m_pRecordset->MoveFirst(); } try { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogTEA::OnButtonNext() { // TODO: ADD your control notification handler code here m_pRecordset->MoveNext(); _variant_t var; CString str; if(m_pRecordset->adoEOF) { MessageBox("已经是末记录!"); m_pRecordset->MoveLast(); } try { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogTEA::OnButtonLast() { // TODO: ADD your control notification handler code here m_pRecordset->MoveLast(); _variant_t var; CString str; try { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } } void CDialogTEA::OnButtonCancel() { // TODO: ADD your control notification handler code here _variant_t var; CString str; FOUNCTION=INIT; //如果表为空,返回不做下面的操作 if(m_pRecordset->BOF) { m_btnAdd.SetState(false); return; } //修改各个矩形按钮的属性 m_btnQuery.EnableWindow(true); m_btnAdd.EnableWindow(true); m_btnDelete.EnableWindow(true); m_btnModify.EnableWindow(true); m_btnFirst.EnableWindow(true); m_btnPre.EnableWindow(true); m_btnNext.EnableWindow(true); m_btnLast.EnableWindow(true); m_btnQuery.SetState(false); m_btnAdd.SetState(false); m_btnDelete.SetState(false); m_btnModify.SetState(false); m_btnFirst.SetState(false); m_btnPre.SetState(false); m_btnNext.SetState(false); m_btnLast.SetState(false); m_ctlTeaID.SetReadOnly(FALSE); m_btnOK.SetFocus(); // //把m_pRecordset所指当前记录显示出来 // if(m_pRecordset->adoEOF) { m_pRecordset->MoveLast(); } try { var = m_pRecordset->GetCollect("TeaID"); if(var.vt != VT_NULL) m_TeaID = var.iVal; var = m_pRecordset->GetCollect("TeaName"); str = (LPCSTR)_bstr_t(var); m_TeaName = str; var = m_pRecordset->GetCollect("TeaSex"); str = (LPCSTR)_bstr_t(var); m_TeaSex = str; var = m_pRecordset->GetCollect("TeaStatus"); str = (LPCSTR)_bstr_t(var); m_TeaStatus = str; var = m_pRecordset->GetCollect("TeaWay"); str = (LPCSTR)_bstr_t(var); m_TeaWay = str; UpdateData(false); } catch(_com_error *e) { AfxMessageBox(e->ErrorMessage()); } }