www.pudn.com > 6433624505.rar > Alltable.cpp


// Alltable.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "Browser.h" 
#include "Alltable.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAlltable dialog 
 
 
CAlltable::CAlltable(CWnd* pParent /*=NULL*/) 
	: CDialog(CAlltable::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CAlltable) 
	m_AllEdit = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
CAlltable::~CAlltable() 
{ 
} 
 
void CAlltable::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAlltable) 
	DDX_Control(pDX, IDC_REFRESH, m_Refresh); 
	DDX_Control(pDX, IDC_LOOKIT, m_Lookit); 
	DDX_Control(pDX, IDC_DELETETABLE, m_Delete); 
	DDX_Control(pDX, IDCANCEL, m_Close); 
	DDX_Control(pDX, IDC_ALLLIST, m_List); 
	DDX_Text(pDX, IDC_ALLEDIT, m_AllEdit); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CAlltable, CDialog) 
	//{{AFX_MSG_MAP(CAlltable) 
	ON_NOTIFY(NM_DBLCLK, IDC_ALLLIST, OnDblclkAlllist) 
	ON_BN_CLICKED(IDC_LOOKIT, OnLookit) 
	ON_BN_CLICKED(IDC_DELETETABLE, OnDeletetable) 
	ON_BN_CLICKED(IDC_REFRESH, OnRefresh) 
	ON_NOTIFY(NM_CLICK, IDC_ALLLIST, OnClickAlllist) 
	ON_WM_PAINT() 
	ON_WM_LBUTTONDOWN() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CAlltable message handlers 
BOOL CAlltable::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	m_bitmapground.LoadBitmap(IDB_SONGROUND); 
	m_Close.LoadBitmaps(IDB_CLOSEONE,IDB_CLOSETWO); 
	m_Refresh.LoadBitmaps(IDB_REFRESHONE,IDB_REFRESHTWO); 
	m_Lookit.LoadBitmaps(IDB_LOOKONE,IDB_LOOKTWO); 
	m_Delete.LoadBitmaps(IDB_DELEONE,IDB_DELETWO); 
 
	infor.SubclassDlgItem(IDC_ALLEDIT,this); 
	infor.SetBackColor(RGB(222,223,223)); 
 
	m_AllEdit.Empty(); 
	m_List.SetTextColor(RGB (0, 0, 0)); 
	m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); 
 
	m_List.InsertColumn(0,_T("表名"),LVCFMT_CENTER,128,100); 
	m_List.InsertColumn(1,_T("表空间"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(2,_T("用户"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(3,_T("INITIAL_EXTENT"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(4,_T("NEXT_EXTENT"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(5,_T("MIN_EXTENTS"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(6,_T("MAX_EXTENTS"),LVCFMT_CENTER,100,100); 
 
	OnRefresh(); 
	return TRUE; 
} 
 
void CAlltable::OnRefresh() 
{ 
	m_List.DeleteAllItems(); 
	tablename.clear(); 
	CString _sql; 
	tbin tbinfor; 
	if(select == 0) 
	{ 
		SetWindowText("所有表"); 
		_sql = "select table_name,tablespace_name,user,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS from user_tables"; 
	} 
	if(select == 1) 
	{ 
		SetWindowText("表空间信息 ---- "+tablespace); 
		_sql.Format("select table_name,tablespace_name,owner,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS from dba_tables where tablespace_name = \'%s\'",tablespace); 
	} 
	_bstr_t sql = _sql; 
	try 
	{ 
		pRst = pConn->Execute(sql,NULL,adCmdText); 
		while(!pRst->End) 
		{ 
			_variant_t vTableName = pRst->Fields->GetItem(long(0))->Value; 
			_variant_t vTableSpace = pRst->Fields->GetItem(long(1))->Value; 
			_variant_t vTableUser = pRst->Fields->GetItem(long(2))->Value; 
			_variant_t vInitExtent = pRst->Fields->GetItem(long(3))->Value; 
			_variant_t vNextExtent = pRst->Fields->GetItem(long(4))->Value; 
			_variant_t vMinExtent = pRst->Fields->GetItem(long(5))->Value; 
			_variant_t vMaxExtent = pRst->Fields->GetItem(long(6))->Value; 
 
			tbinfor.tablename = (char *)_bstr_t(vTableName); 
 
			if(vTableSpace.vt == VT_NULL) 
				tbinfor.tablespacename = "NULL"; 
			else 
				tbinfor.tablespacename = (char *)_bstr_t(vTableSpace); 
 
			tbinfor.tableuser = (char *)_bstr_t(vTableUser); 
 
			if(vInitExtent.vt == VT_NULL) 
				tbinfor.initextent = "NULL"; 
			else 
				tbinfor.initextent = (char *)_bstr_t(vInitExtent); 
 
			if(vNextExtent.vt == VT_NULL) 
				tbinfor.nextextent = "NULL"; 
			else 
				tbinfor.nextextent = (char *)_bstr_t(vNextExtent); 
 
			if(vMinExtent.vt == VT_NULL) 
				tbinfor.minextent = "NULL"; 
			else 
				tbinfor.minextent = (char *)_bstr_t(vMinExtent); 
 
			if(vMaxExtent.vt == VT_NULL) 
				tbinfor.maxextent = "NULL"; 
			else 
				tbinfor.maxextent = (char *)_bstr_t(vMaxExtent); 
 
			tablename.push_back(tbinfor); 
 
			pRst->MoveNext(); 
		} 
		for(int i = 0;i < tablename.size();i ++) 
		{ 
			m_List.InsertItem(i,tablename[i].tablename); 
			m_List.SetItemText(i,1,tablename[i].tablespacename); 
			m_List.SetItemText(i,2,tablename[i].tableuser); 
			m_List.SetItemText(i,3,tablename[i].initextent); 
			m_List.SetItemText(i,4,tablename[i].nextextent); 
			m_List.SetItemText(i,5,tablename[i].minextent); 
			m_List.SetItemText(i,6,tablename[i].maxextent); 
		} 
 
		pRst->Close(); 
		pRst.Release(); 
	} 
	catch(_com_error &e) 
	{ 
		if(pConn == NULL) 
			AfxMessageBox("未连接数据库"); 
		else 
			AfxMessageBox(e.Description()); 
		CDialog::OnOK(); 
	} 
} 
 
void CAlltable::OnDblclkAlllist(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	cursel = m_List.GetSelectionMark(); 
 
	if(cursel >=0) 
	{ 
		if(select == 0) 
		{ 
			tableinfor.pConn = pConn; 
			tableinfor.select = 0; 
			tableinfor.tablename = tablename[cursel].tablename; 
			tableinfor.DoModal(); 
		} 
		if(select ==1) 
		{ 
			User.MakeUpper(); 
			tablename[cursel].tableuser.MakeUpper(); 
			if(User == tablename[cursel].tableuser) 
			{ 
				tableinfor.pConn = pConn; 
				tableinfor.select = 0; 
				tableinfor.tablename = tablename[cursel].tablename; 
				tableinfor.DoModal(); 
			} 
			else 
				AfxMessageBox(_T("您没有权限查看此表,请连接到: ")+tablename[cursel].tableuser);	 
		} 
	} 
	else  
		AfxMessageBox(_T("未选定表")); 
 
	*pResult = 0; 
} 
 
void CAlltable::OnLookit()  
{ 
	cursel = m_List.GetSelectionMark(); 
	if(cursel >= 0) 
	{ 
		tableinfor.pConn = pConn; 
		tableinfor.select = 0; 
		tableinfor.tablename = tablename[cursel].tablename; 
		tableinfor.DoModal(); 
	} 
	else  
		AfxMessageBox(_T("未选定表")); 
} 
 
 
void CAlltable::OnDeletetable()  
{ 
	cursel = m_List.GetSelectionMark(); 
	if(AfxMessageBox("确定删除表 "+tablename[cursel].tablename+" 吗?",1) == IDOK) 
	{ 
		if(cursel >= 0) 
		{ 
			CString _sql; 
			_sql.Format("drop table %s",tablename[cursel].tablename); 
			_bstr_t sql = _sql; 
			try 
			{ 
				pConn->Execute(sql,NULL,adCmdText); 
				m_List.DeleteItem(cursel); 
				tablename.erase(tablename.begin()+cursel); 
				OnRefresh(); 
			} 
			catch(_com_error &e) 
			{ 
				AfxMessageBox(e.Description()); 
			} 
		} 
	} 
} 
 
void CAlltable::OnClickAlllist(NMHDR* pNMHDR, LRESULT* pResult)  
{ 
	cursel = m_List.GetSelectionMark(); 
	if(cursel >= 0) 
	{ 
		m_AllEdit = "表名: " + 	tablename[cursel].tablename + "      "; 
		m_AllEdit += "表空间: " + tablename[cursel].tablespacename + "      "; 
		m_AllEdit += "用户: " + tablename[cursel].tableuser + "      "; 
		this->UpdateData(false); 
	} 
	*pResult = 0; 
} 
 
void CAlltable::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	CRect rect; 
	GetClientRect(&rect); 
	CDC dcMem;  
	dcMem.CreateCompatibleDC(&dc);  
	BITMAP bitMap; 
	m_bitmapground.GetBitmap(&bitMap); 
	CBitmap *pbmpOld=dcMem.SelectObject(&m_bitmapground); 
	dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY); 
	CDialog::OnPaint(); 
} 
 
void CAlltable::OnLButtonDown(UINT nFlags, CPoint point)  
{ 
	if(point.x >=5 && point.x <= 65 && point.y >= 2 && point.y <=30) 
		PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y));		 
	CDialog::OnLButtonDown(nFlags, point); 
}