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


// CreateTable.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include  
#include "Browser.h" 
#include "CreateTable.h" 
 
#include "AdTable.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CCreateTable dialog 
class Table 
{ 
public: 
	CString colname; 
	CString datatype; 
	int		num1; 
	int		num2; 
	CString	Null; 
	CString Prikey; 
}; 
std::vector tables; 
 
CCreateTable::CCreateTable(CWnd* pParent /*=NULL*/) 
	: CDialog(CCreateTable::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CCreateTable) 
	m_ColName = _T(""); 
	m_TbName = _T(""); 
	m_Null = FALSE; 
	m_Num1 = 1; 
	m_Num2 = 0; 
	m_PriKey = FALSE; 
	m_Style = _T("CHAR"); 
	m_Tablespace = _T(""); 
	//}}AFX_DATA_INIT 
} 
 
 
void CCreateTable::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CCreateTable) 
	DDX_Control(pDX, IDOK, m_Ok); 
	DDX_Control(pDX, IDCANCEL, m_Cancel); 
	DDX_Control(pDX, IDC_MOVEUP, m_MoveUp); 
	DDX_Control(pDX, IDC_MOVEDOWN, m_MoveDown); 
	DDX_Control(pDX, IDC_DELETE, m_Delete); 
	DDX_Control(pDX, IDC_ADTABLE, m_Adtable); 
	DDX_Control(pDX, IDC_ADDLIST, m_Add); 
	DDX_Control(pDX, ID_CANCEL, m_Close); 
	DDX_Control(pDX, IDC_CREATETABLELIST, m_List); 
	DDX_Text(pDX, IDC_COLUMENAME, m_ColName); 
	DDX_Text(pDX, IDC_CREATETABLENAME, m_TbName); 
	DDX_Check(pDX, IDC_NULL, m_Null); 
	DDX_Text(pDX, IDC_NUM1, m_Num1); 
	DDX_Text(pDX, IDC_NUM2, m_Num2); 
	DDX_Check(pDX, IDC_PRIMARYKEY, m_PriKey); 
	DDX_CBString(pDX, IDC_STYLE, m_Style); 
	DDX_CBString(pDX, IDC_CREATETABLECOM, m_Tablespace); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CCreateTable, CDialog) 
	//{{AFX_MSG_MAP(CCreateTable) 
	ON_BN_CLICKED(IDC_ADTABLE, OnAdtable) 
	ON_BN_CLICKED(IDC_MOVEUP, OnMoveup) 
	ON_BN_CLICKED(IDC_MOVEDOWN, OnMovedown) 
	ON_BN_CLICKED(IDC_DELETE, OnDelete) 
	ON_BN_CLICKED(IDC_ADDLIST, OnAddlist) 
	ON_WM_PAINT() 
	ON_BN_CLICKED(ID_CANCEL, OnCancel) 
	ON_WM_LBUTTONDOWN() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CCreateTable message handlers 
BOOL CCreateTable::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	m_bitmapground.LoadBitmap(IDB_SONGROUND); 
	m_Ok.LoadBitmaps(IDB_OKONE,IDB_OKTWO); 
	m_Close.LoadBitmaps(IDB_CLOSEONE,IDB_CLOSETWO); 
	m_Adtable.LoadBitmaps(IDB_ADTABLEONE,IDB_ADTABLETWO); 
	m_MoveUp.LoadBitmaps(IDB_UPONE,IDB_UPTWO); 
	m_MoveDown.LoadBitmaps(IDB_DOWNONE,IDB_DWONTWO); 
	m_Delete.LoadBitmaps(IDB_DELETEONE,IDB_DELETETWO); 
	m_Add.LoadBitmaps(IDB_ADDONE,IDB_ADDTWO); 
	m_Cancel.LoadBitmaps(IDB_CANONE,IDB_CANTWO); 
	 
	count = 0; 
	tables.clear(); 
	initial =-1; 
	next =-1; 
	pit =-1; 
	min =-1; 
	 
	extend = ""; 
	m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); 
	m_List.InsertColumn(0,_T("列名"),LVCFMT_CENTER,100,100); 
	m_List.InsertColumn(1,_T("类型"),LVCFMT_CENTER,80,80); 
	m_List.InsertColumn(2,_T("大小"),LVCFMT_CENTER,60,60); 
	m_List.InsertColumn(3,_T("小数"),LVCFMT_CENTER,60,60); 
	m_List.InsertColumn(4,_T("为空"),LVCFMT_CENTER,70,780); 
	m_List.InsertColumn(5,_T("主键"),LVCFMT_CENTER,70,70); 
 
	m_ColorBtn1.SubclassDlgItem(IDC_PRIMARYKEY,this); 
	m_ColorBtn1.SetBackColor(RGB(99,103,105)); 
	m_ColorBtn2.SubclassDlgItem(IDC_NULL,this); 
	m_ColorBtn2.SetBackColor(RGB(99,103,105)); 
 
	return TRUE; 
} 
 
void CCreateTable::OnAdtable()  
{ 
	CAdTable adtable; 
	if(adtable.DoModal() == IDOK) 
	{ 
		initial = adtable.m_Initial; 
		next = adtable.m_Next; 
		pit = adtable.m_Pctincrease; 
		min = adtable.m_Minextents; 
	} 
} 
 
void CCreateTable::OnAddlist()  
{ 
	this->UpdateData(true); 
	CString num1,num2,null,key; 
 
	num1.Format("%d",m_Num1); 
	num2.Format("%d",m_Num2); 
 
	if(m_Null == TRUE) 
		null = "可为空"; 
	else 
		null = "NOT NULL"; 
 
	if(m_PriKey == TRUE) 
		key = "PRIMARY KEY"; 
	else 
		key = " "; 
	if(m_ColName != "") 
	{ 
		m_List.InsertItem(count,m_ColName); 
		m_List.SetItemText(count,1,m_Style); 
		m_List.SetItemText(count,2,num1); 
		m_List.SetItemText(count,3,num2); 
		m_List.SetItemText(count,4,null); 
		m_List.SetItemText(count,5,key); 
		count ++; 
		 
		Table table; 
		table.colname = m_ColName; 
		table.datatype = m_Style; 
		table.num1 = m_Num1; 
		table.num2 = m_Num2; 
		table.Null = null; 
		table.Prikey = key; 
		 
		tables.push_back(table); 
		 
		m_ColName = ""; 
		m_Null = FALSE; 
		m_PriKey = FALSE; 
		this->UpdateData(false); 
	} 
	else 
		AfxMessageBox(_T("列名不能为空!")); 
} 
 
void CCreateTable::OnMoveup()  
{ 
	cursel = m_List.GetSelectionMark(); 
	if(cursel >0) 
	{ 
		Table temporary; 
		temporary = tables[cursel - 1]; 
		tables[cursel-1] =tables[cursel]; 
		tables[cursel] = temporary; 
 
		m_List.DeleteAllItems(); 
		for(int i = 0;i <= tables.size(); i ++) 
		{ 
			CString str1,str2; 
			str1.Format("%d",tables[i].num1); 
			str2.Format("%d",tables[i].num2); 
 
			m_List.InsertItem(i,tables[i].colname); 
			m_List.SetItemText(i,1,tables[i].datatype); 
			m_List.SetItemText(i,2,str1); 
			m_List.SetItemText(i,3,str2); 
			m_List.SetItemText(i,4,tables[i].Null); 
			m_List.SetItemText(i,5,tables[i].Prikey); 
		} 
	} 
} 
 
void CCreateTable::OnMovedown()  
{ 
	cursel = m_List.GetSelectionMark(); 
	if((cursel < tables.size() - 1)&&(cursel >= 0)) 
	{ 
		Table temporary; 
		temporary = tables[cursel + 1]; 
		tables[cursel + 1] = tables[cursel]; 
		tables[cursel] = temporary; 
 
		m_List.DeleteAllItems(); 
		for(int i = 0;i <= tables.size(); i ++) 
		{ 
			CString str1,str2; 
			str1.Format("%d",tables[i].num1); 
			str2.Format("%d",tables[i].num2); 
 
			m_List.InsertItem(i,tables[i].colname); 
			m_List.SetItemText(i,1,tables[i].datatype); 
			m_List.SetItemText(i,2,str1); 
			m_List.SetItemText(i,3,str2); 
			m_List.SetItemText(i,4,tables[i].Null); 
			m_List.SetItemText(i,5,tables[i].Prikey); 
		} 
	} 
} 
 
void CCreateTable::OnDelete()  
{ 
	cursel = m_List.GetSelectionMark(); 
	if(cursel >= 0) 
	{ 
		tables.erase(tables.begin()+cursel); 
		m_List.DeleteItem(cursel); 
	} 
	OnPaint(); 
} 
 
void CCreateTable::OnOK()  
{ 
	this->UpdateData(true); 
	CString str,_sql; 
	if(m_TbName != "") 
	{ 
		_sql.Format("Create table %s (",m_TbName); 
		for(int i = 0; i < tables.size();i ++) 
		{ 
			if(tables.size() > 1) 
			{ 
				if(i == tables.size() - 1) 
					if(tables[i].datatype == "NUMBER") 
						str.Format("%s %s(%d,%d) %s %s",tables[i].colname,tables[i].datatype,tables[i].num1,tables[i].num2, 
						tables[i].Null,tables[i].Prikey); 
					else 
						str.Format("%s %s(%d) %s %s",tables[i].colname,tables[i].datatype,tables[i].num1, 
						tables[i].Null,tables[i].Prikey); 
					else 
						if(tables[i].datatype == "NUMBER") 
							str.Format("%s %s(%d,%d) %s %s,",tables[i].colname,tables[i].datatype,tables[i].num1,tables[i].num2, 
							tables[i].Null,tables[i].Prikey); 
						else 
							str.Format("%s %s(%d) %s %s,",tables[i].colname,tables[i].datatype,tables[i].num1, 
							tables[i].Null,tables[i].Prikey); 
			} 
			else 
				str.Format("%s %s(%d) %s %s",tables[i].colname,tables[i].datatype,tables[i].num1, 
				tables[i].Null,tables[i].Prikey); 
			_sql += str; 
		} 
		str.Format("tablespace %s",m_Tablespace); 
		_sql = _sql + ")" + str; 
		 
		_bstr_t sql = _sql; 
		try 
		{ 
			pConn->Execute(sql,NULL,adCmdText); 
		} 
		catch(_com_error &e) 
		{ 
			if(pConn == NULL) 
				AfxMessageBox("未连接数据库"); 
			else 
				AfxMessageBox(e.Description()); 
			return; 
		} 
		CDialog::OnOK(); 
	} 
	else 
		AfxMessageBox(_T("表名不能为空")); 
} 
 
void CCreateTable::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); 
	 
	dc.SetBkColor(RGB(99,103,105)); 
	dc.SetTextColor(RGB(200,200,200)); 
	dc.TextOut(28,385,_T("表信息")); 
	dc.TextOut(65,410,_T("表    名")); 
	dc.TextOut(240,410,_T("表 空 间")); 
	dc.TextOut(24,445,_T("字 段 信 息")); 
	dc.TextOut(65,475,_T("列    名")); 
	dc.TextOut(236,475,_T("数据类型")); 
	dc.TextOut(65,508,_T("大    小")); 
	dc.TextOut(160,508,_T("小 数")); 
	 
	CDialog::OnPaint(); 
} 
 
void CCreateTable::OnCancel()  
{ 
	CDialog::OnCancel();	 
} 
 
void CCreateTable::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); 
}