⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 proceduresdlg.cpp

📁 快速SQL交互工具
💻 CPP
字号:
// ProceduresDlg.cpp : implementation file
//

#include "stdafx.h"
#include "QryTool.h"
#include "ProceduresDlg.h"
#include "MainFrm.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CProceduresDlg dialog

CProceduresDlg::CProceduresDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CProceduresDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CProceduresDlg)
	m_strSearch = _T("");
	//}}AFX_DATA_INIT

	m_nSelectedItem = 0;
	m_bSort = true;
}

void CProceduresDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CProceduresDlg)
	DDX_Control(pDX, IDC_LIST1, m_ctrlList);
	DDX_Text(pDX, IDC_SEARCH, m_strSearch);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CProceduresDlg, CDialog)
	//{{AFX_MSG_MAP(CProceduresDlg)
	ON_NOTIFY(NM_DBLCLK, IDC_LIST1, OnDblclkList1)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST1, OnItemchangedList1)
	ON_NOTIFY(LVN_COLUMNCLICK, IDC_LIST1, OnColumnclickList1)
	ON_EN_CHANGE(IDC_SEARCH, OnChangeSearch)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CProceduresDlg message handlers

BOOL CProceduresDlg::OnInitDialog() 
{
	CWaitCursor wait;

	CMainFrame* pFrame = (CMainFrame*)AfxGetMainWnd();
	ASSERT(pFrame);
	m_pChildFrame = (CChildFrame*)pFrame->MDIGetActive();
	m_pChildFrame->m_wndStatusBar.SetPaneText(0, _T("Please wait..."));

	CDialog::OnInitDialog();

	LV_COLUMN lvcColumn;
	lvcColumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
	lvcColumn.fmt = LVCFMT_LEFT;
	
	CRect rect;
	m_ctrlList.GetClientRect(&rect);
	CSize size = rect.Size();
	int nWidth = size.cx/2;
	lvcColumn.cx = nWidth;
	lvcColumn.pszText = _T("Name");
	lvcColumn.iSubItem = 0;
	m_ctrlList.InsertColumn(0, &lvcColumn);

	lvcColumn.cx = nWidth;
	lvcColumn.pszText = _T("Owner");
	lvcColumn.iSubItem = 1;
	m_ctrlList.InsertColumn(1, &lvcColumn);

	if(!PopulateList())
		SendMessage(WM_CLOSE);
	else
	{
		m_ctrlList.SetFullRowSel(TRUE);
		UpdateData(FALSE);
	}

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

BOOL CProceduresDlg::PopulateList()
{
	BOOL bRet = FALSE;

	try
	{
		CStoredProcedures set(&m_pChildFrame->m_database);
		bRet = set.Open();
		if(bRet)
		{
			CString sBuff;
			int nPos = -1;
			int nIndex = 0;
			while(!set.IsEOF())
			{
				nPos = set.m_strProcedureName.Find(';');
				if(nPos != -1)
					set.m_strProcedureName = set.m_strProcedureName.Left(nPos);

				sBuff = set.m_strProcedureName;

				if(!m_pChildFrame->m_bIsJetDriver &&
					set.m_strProcedureName.Find(' ') != -1) // MS SQL Server scenario
					sBuff = "[" + set.m_strProcedureName + "]";

				CHelpers::Insert(&m_ctrlList, sBuff + "|" +
					set.m_strProcedureOwner + "|", -1, nIndex++);

				set.MoveNext();			
			}

			m_ctrlList.SetItemState(0, LVIS_SELECTED | LVIS_FOCUSED,
						LVIS_SELECTED | LVIS_FOCUSED);
		}
	}
	catch(CDBException* e)
	{
	   if(e)
	   {
			CString sMsg;
			if(!e->m_strError.IsEmpty())
				sMsg.Format(_T("%s%s"), (LPCTSTR)e->m_strError, (LPCTSTR)e->m_strStateNativeOrigin);
			else
				sMsg = e->m_strStateNativeOrigin;

			e->Delete();

			AfxMessageBox(sMsg);
	   }
	}
	catch(CMemoryException* e)
	{
		AfxMessageBox(_T("Out-of-memory."));

		if(e)
			e->Delete();
	}
	catch(LPCTSTR e)
	{
		AfxMessageBox(e);
	}
	catch(...)
	{
		AfxMessageBox(_T("Errors occurred."));
	}

	if(!m_ctrlList.GetItemCount())
	{
		GetDlgItem(IDOK)->EnableWindow(FALSE);
		GetDlgItem(IDCANCEL)->SetWindowText(_T("&Close"));
	}

	return bRet;
}

void CProceduresDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CWaitCursor wait;

	if(GetDlgItem(IDOK)->IsWindowEnabled())
		OnOK();

	*pResult = 0;
}

void CProceduresDlg::OnOK() 
{
	CWaitCursor wait;

	m_strProcedureName = m_ctrlList.GetItemText(m_nSelectedItem, 0);

	CDialog::OnOK();
}

void CProceduresDlg::OnItemchangedList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	if(pNMListView->uNewState)
		m_nSelectedItem = pNMListView->iItem;
	
	*pResult = 0;
}

void CProceduresDlg::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	CWaitCursor wait;

	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	CSortColumn sort(&m_ctrlList, pNMListView->iSubItem, false);
	sort.Sort(m_bSort = !m_bSort);
	m_nSelectedItem = m_ctrlList.GetNextItem(-1, LVNI_SELECTED);

	*pResult = 0;
}

void CProceduresDlg::OnChangeSearch() 
{
	UpdateData(TRUE);

	LVFINDINFO findInfo;
	findInfo.flags = LVFI_PARTIAL | LVFI_STRING;
	findInfo.psz = (LPCTSTR)m_strSearch;
	int nItem = m_ctrlList.FindItem(&findInfo);
	m_ctrlList.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);
	m_ctrlList.EnsureVisible(nItem, TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -