www.gusucode.com > VC++操作SqlServer数据库的参考源程序源码程序 > VC++操作SqlServer数据库的参考源程序源码程序/code/Query.cpp
// Query.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "Student.h" #include "Query.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CStudentApp theApp; ///////////////////////////////////////////////////////////////////////////// // CQuery dialog CQuery::CQuery(CWnd* pParent /*=NULL*/) : CDialog(CQuery::IDD, pParent) { //{{AFX_DATA_INIT(CQuery) m_sSql = _T(""); //}}AFX_DATA_INIT } void CQuery::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CQuery) DDX_Control(pDX, IDC_BTNRUN, m_btnRun); DDX_Control(pDX, IDC_BTNOR, m_btnOr); DDX_Control(pDX, IDC_BTNNO, m_btnNo); DDX_Control(pDX, IDC_BTNEXIT, m_btnExit); DDX_Control(pDX, IDC_BTNCLEAR, m_btnClear); DDX_Control(pDX, IDC_BTNALL, m_btnAll); DDX_Control(pDX, IDC_BTNADD, m_btnAdd); DDX_Control(pDX, IDC_LIST_RESULT, m_ctlResult); DDX_Control(pDX, IDC_LIST_FIELD, m_ctlField); DDX_Control(pDX, IDC_COMBO_SORT, m_ctlSort); DDX_Control(pDX, IDC_COMBO_OPT, m_ctlOpt); DDX_Control(pDX, IDC_COMBO_FIELDVALUE, m_ctlFValue); DDX_Control(pDX, IDC_COMBO_FIELDNAME, m_ctlFName); DDX_Text(pDX, IDC_EDIT_SQL, m_sSql); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CQuery, CDialog) //{{AFX_MSG_MAP(CQuery) ON_BN_CLICKED(IDC_BTNRUN, OnBtnrun) ON_BN_CLICKED(IDC_BTNCLEAR, OnBtnclear) ON_BN_CLICKED(IDC_BTNEXIT, OnBtnexit) ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_RESULT, OnItemchangedListResult) ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CQuery message handlers BOOL CQuery::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here ///// m_pRsc.CreateInstance("ADODB.Recordset"); LoadData("student"); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CQuery::LoadData(CString sTName) { char buf[100]; sprintf(buf,"select * from %s",sTName); m_pRsc->Open(buf,theApp.m_pConnect.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText); for(int i=0;i<m_pRsc->Fields->Count;i++) { m_ctlFName.AddString(m_pRsc->Fields->GetItem(_variant_t((long)i))->Name); m_ctlSort.AddString(m_pRsc->Fields->GetItem(_variant_t((long)i))->Name); m_ctlField.AddString(m_pRsc->Fields->GetItem(_variant_t((long)i))->Name); } m_pRsc->Close(); m_ctlOpt.AddString("="); m_ctlOpt.AddString("<>"); m_ctlOpt.AddString(">"); m_ctlOpt.AddString(">="); m_ctlOpt.AddString("<"); m_ctlOpt.AddString("<="); m_ctlOpt.AddString("Like"); for (i=0;i<m_ctlField.GetCount();i++) { m_ctlField.SetCurSel(i); } sprintf(buf,"select * from %s",sTName); m_sSql=buf; UpdateData(FALSE); } void CQuery::OnBtnrun() { UpdateData(TRUE); if(m_pRsc->State) m_pRsc->Close(); //m_pRsc->Open(_bstr_t(m_sSql),theApp.m_pConnect.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText); m_pRsc->Open(_bstr_t(m_sSql),theApp.m_pConnect.GetInterfacePtr(),adOpenDynamic ,adLockOptimistic,adCmdText); LoadRecordToListView(m_pRsc); m_pRsc->Close(); } void CQuery::LoadRecordToListView(_RecordsetPtr Rsc) { ::SendMessage(m_ctlResult.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT); //////////为列表控件添加列////////// for(int i=0;i<Rsc->Fields->Count;i++) { m_ctlResult.InsertColumn(i,Rsc->Fields->GetItem(_variant_t((long)i))->Name,LVCFMT_LEFT,100); } //////////读取数据库中的信息添加到列表控件/////////// int nItem; try { while(!Rsc->adoEOF) { nItem=m_ctlResult.InsertItem(0xffff,_bstr_t(Rsc->GetCollect("_id"))); for(i=1;i<Rsc->Fields->Count;i++) m_ctlResult.SetItem(nItem,i,1,_bstr_t(Rsc->Fields->GetItem(_variant_t((long)i))->Value),NULL,0,0,0 ); Rsc->MoveNext(); } } catch(_com_error e)///捕捉异常 { AfxMessageBox("读取数据库失败!");///显示错误信息 } } void CQuery::OnBtnclear() { m_sSql=""; UpdateData(FALSE); } void CQuery::OnBtnexit() { CQuery::OnCancel(); } ///加载列表内容到对话框控件 void CQuery::OnItemchangedListResult(NMHDR* pNMHDR, LRESULT* pResult) { NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR; if(pNMListView->uNewState&LVIS_SELECTED) { m_iCurrentSel=m_ctlResult.GetNextItem(-1, LVNI_ALL | LVNI_SELECTED); //m_pRsc->Move(m_iCurrentSel,_variant_t((long)adBookmarkFirst)); switch(theApp.m_opt.m_iTableFlag) { case 1: /* theApp.m_opt.m_iRecID=(long)(_variant_t)m_pRsc->GetCollect("_id"); theApp.m_input.m_sNumber=(LPCTSTR)(_bstr_t)m_pRsc->GetCollect("s_no"); theApp.m_input.m_sName=(LPCTSTR)(_bstr_t)m_pRsc->GetCollect("s_name"); theApp.m_input.m_sClassnum =(LPCTSTR)(_bstr_t)m_pRsc->GetCollect("class_no"); theApp.m_input.m_sSex =(LPCTSTR)(_bstr_t)m_pRsc->GetCollect("s_sex"); theApp.m_input.m_dBrithday =m_pRsc->GetCollect("s_birthday"); theApp.m_input.DoModal(); UpdateData(FALSE); //m_pRsc->Close(); */ theApp.m_opt.m_iRecID=(long)(_variant_t)m_ctlResult.GetItemText(m_iCurrentSel,0); theApp.m_input.m_sNumber=m_ctlResult.GetItemText(m_iCurrentSel,1); theApp.m_input.m_sName=m_ctlResult.GetItemText(m_iCurrentSel,3); theApp.m_input.m_sClassnum =m_ctlResult.GetItemText(m_iCurrentSel,2); theApp.m_input.m_sSex =m_ctlResult.GetItemText(m_iCurrentSel,4); theApp.m_input.m_dBrithday =(_variant_t)m_ctlResult.GetItemText(m_iCurrentSel,5); theApp.m_input.DoModal(); break; case 2: break; case 3: break; case 4: break; case 5: break; case 6: break; } } *pResult = 0; } BOOL CQuery::DestroyWindow() { if(m_pRsc->State) m_pRsc->Close(); m_pRsc=NULL; return CDialog::DestroyWindow(); } void CQuery::OnClose() { m_pRsc=NULL; CDialog::OnClose(); }