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();
}