📄 dlgnewtable.cpp
字号:
//author : Jarry
//E-mail : lansingk@online.sh.cn
// DlgNewTable.cpp : implementation file
//
#include "stdafx.h"
#include "mysqlManager.h"
#include "DlgNewTable.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgNewTable dialog
CDlgNewTable::CDlgNewTable(CWnd* pParent /*=NULL*/)
: CDialog(CDlgNewTable::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgNewTable)
m_strTableName = _T("");
//}}AFX_DATA_INIT
}
void CDlgNewTable::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgNewTable)
DDX_Control(pDX, IDC_LST_NEW_TABLE, m_lstTable);
DDX_Text(pDX, IDC_EDT_TABLE_NAME, m_strTableName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgNewTable, CDialog)
//{{AFX_MSG_MAP(CDlgNewTable)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED(IDC_BTN_NEW_FIELD, OnBtnNewField)
ON_BN_CLICKED(IDC_BTN_DEL_FIELD, OnBtnDelField)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BTN_GENERATE_SQL, OnBtnGenerateSql)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgNewTable message handlers
void CDlgNewTable::OnShowWindow(BOOL bShow, UINT nStatus)
{
int nCol,nRow;
CDialog::OnShowWindow(bShow, nStatus);
m_lstTable.LoadImageList();
m_lstTable.DeleteAllItems();
for (nCol = 0 ; m_lstTable.DeleteColumn(0) ; nCol++);
m_lstTable.InsertColumn(0,"",LVCFMT_CENTER,30);
m_lstTable.InsertColumn(1,"Name",LVCFMT_LEFT,100);
m_lstTable.InsertColumn(2,"Type",LVCFMT_LEFT,80);
m_lstTable.InsertColumn(3,"Length",LVCFMT_LEFT,80);
m_lstTable.InsertColumn(4,"Precision",LVCFMT_LEFT,80);
m_lstTable.InsertColumn(COL_NULL,"NULL",LVCFMT_LEFT,60);
m_lstTable.InsertColumn(COL_KEY,"Key",LVCFMT_LEFT,60);
m_lstTable.InsertColumn(7,"Default",LVCFMT_LEFT,80);
for (nRow = 0 ; nRow < 50 ; nRow++)
m_lstTable.InsertItem(nRow,"",-1);
m_lstTable.SetItemText(0,0,">");
FieldInfo *pFieldInfo;
while (!m_lstFieldInfoNew.IsEmpty())
{
pFieldInfo = (FieldInfo *)m_lstFieldInfoNew.RemoveHead();
delete pFieldInfo;
}
m_lstFieldInfoNew.RemoveAll();
m_strTableName = "Table1";
UpdateData(false);
}
void CDlgNewTable::OnBtnNewField()
{
if (m_lstTable.nLastRow < 0)
m_lstTable.nLastRow = 0;
m_lstTable.SetItemText(m_lstTable.nLastRow,0,"");
m_lstTable.InsertItem(m_lstTable.nLastRow,"",-1);
m_lstTable.SetItemText(m_lstTable.nLastRow,0,">");
}
void CDlgNewTable::OnBtnDelField()
{
m_lstTable.DeleteItem(m_lstTable.nLastRow);
if (m_lstTable.nLastRow >= m_lstTable.GetItemCount())
m_lstTable.nLastRow = m_lstTable.GetItemCount() - 1;
m_lstTable.SetItemText(m_lstTable.nLastRow,0,">");
}
bool CDlgNewTable::CheckField(int nField,CPtrList& lstFieldInfo)
{
// LVITEM lvItem;
CString strTemp;
int nLength,nPrecision;
// lvItem.mask = LVIF_TEXT;
// lvItem.iItem = nField;
// lvItem.iSubItem = 1; //Get field name
// m_lstTable.GetItem(&lvItem);
// strTemp = lvItem.pszText;
//It seems that GetItem() doesn't work ,
//with mask LVIF_TEXT is always return NULL ,
//and same did LVIF_IMAGE ,
//I think it's the problem of derived class from CList
//So I use GetItemText() instead of GetItem()
strTemp = m_lstTable.GetItemText(nField,1);
strTemp.TrimLeft();
strTemp.TrimRight();
if (strTemp.GetLength() > 0)
{
FieldInfo *pFieldInfo = new FieldInfo;
pFieldInfo->strFieldName = strTemp;
// lvItem.iSubItem = 2; //Get field type
// m_lstTable.GetItem(&lvItem);
// strTemp = lvItem.pszText;
strTemp = m_lstTable.GetItemText(nField,2);
strTemp.TrimLeft();
strTemp.TrimRight();
if (strTemp.GetLength() > 0)
pFieldInfo->strFieldType = strTemp;
else
{
delete pFieldInfo;
return false;
}
if ( (pFieldInfo->strFieldType == "tinyint")
|| (pFieldInfo->strFieldType == "smallint")
|| (pFieldInfo->strFieldType == "integer")
|| (pFieldInfo->strFieldType == "mediumint")
|| (pFieldInfo->strFieldType == "bigint")
|| (pFieldInfo->strFieldType == "decimal")
|| (pFieldInfo->strFieldType == "numeric")
|| (pFieldInfo->strFieldType == "float")
|| (pFieldInfo->strFieldType == "double")
|| (pFieldInfo->strFieldType == "real")
)
pFieldInfo->bNum = true;
else
pFieldInfo->bNum = false;
// lvItem.iSubItem = 3; //Get field length
// m_lstTable.GetItem(&lvItem);
// nLength = atoi(lvItem.pszText);
strTemp = m_lstTable.GetItemText(nField,3);
nLength = atoi(strTemp);
if (nLength > 0)
{
strTemp.Format("%d",nLength);
pFieldInfo->strFieldLength = strTemp;
// lvItem.iSubItem = 4; //Get field precision
// m_lstTable.GetItem(&lvItem);
// nPrecision = atoi(lvItem.pszText);
strTemp = m_lstTable.GetItemText(nField,4);
nPrecision = atoi(strTemp);
if (nPrecision > 0)
if (nPrecision <= nLength)
{
strTemp.Format("%d",nPrecision);
pFieldInfo->strFieldPrecision = strTemp;
}
else
{
delete pFieldInfo;
return false;
}
else if (nPrecision == 0)
pFieldInfo->strFieldPrecision = "";
else
{
delete pFieldInfo;
return false;
}
}
else if (nLength == 0)
pFieldInfo->strFieldLength = "";
else
{
delete pFieldInfo;
return false;
}
// lvItem.iSubItem = 7; //Get default
// m_lstTable.GetItem(&lvItem);
// strTemp = lvItem.pszText;
strTemp = m_lstTable.GetItemText(nField,7);
strTemp.TrimLeft();
strTemp.TrimRight();
if (strTemp.GetLength() > 0)
pFieldInfo->strDefault = strTemp;
else
pFieldInfo->strDefault = "";
// lvItem.mask = LVIF_IMAGE;
// lvItem.iSubItem = COL_NULL; //Get NULL
// m_lstTable.GetItem(&lvItem);
strTemp = m_lstTable.GetItemText(nField,COL_NULL);
strTemp.TrimLeft();
strTemp.TrimRight();
// if (lvItem.iImage == 0) //permit null
if (strTemp == "NO")
pFieldInfo->bNull = false;
else
pFieldInfo->bNull = true; //Default is NULL
// lvItem.iSubItem = COL_KEY; //Get key
// m_lstTable.GetItem(&lvItem);
// if (lvItem.iImage == 0) //is key
strTemp = m_lstTable.GetItemText(nField,COL_KEY);
strTemp.TrimLeft();
strTemp.TrimRight();
if (strTemp == "YES")
pFieldInfo->bKey = true;
else
pFieldInfo->bKey = false;
lstFieldInfo.AddTail(pFieldInfo);
}
return true;
}
void CDlgNewTable::OnOK()
{
bool bRet = true;
UpdateData(true);
m_strTableName.TrimLeft();
m_strTableName.TrimRight();
if (m_strTableName.GetLength() <= 0)
{
bRet = false;
AfxMessageBox(IDS_ERR_NO_TABLE_NAME);
}
FieldInfo *pFieldInfo;
while (!m_lstFieldInfoNew.IsEmpty())
{
pFieldInfo = (FieldInfo *)m_lstFieldInfoNew.RemoveHead();
delete pFieldInfo;
}
m_lstFieldInfoNew.RemoveAll();
for (int i = 0; i < m_lstTable.GetItemCount(); i++)
{
if (!CheckField(i,m_lstFieldInfoNew))
{
char szBuf[1024];
bRet = false;
sprintf(szBuf,"Table definition error in line: %d .",i + 1);
AfxMessageBox(szBuf);
break;
}
}
strcpy(m_szSQL,""); //
if (bRet)
if (m_lstFieldInfoNew.GetCount() > 0)
{
CHAR szTableName[1024];
strcpy(szTableName,m_strTableName);
GenerateTableSQL(m_szSQL,szTableName,m_lstFieldInfoNew);
if (strlen(m_szSQL) <= 0)
{
bRet = false;
AfxMessageBox(IDS_ERR_SQL_CREATE_TABLE);
}
}
else
{
bRet = false;
}
if (bRet)
CDialog::OnOK();
}
void CDlgNewTable::OnDestroy()
{
CDialog::OnDestroy();
FieldInfo *pFieldInfo;
while (!m_lstFieldInfoNew.IsEmpty())
{
pFieldInfo = (FieldInfo *)m_lstFieldInfoNew.RemoveHead();
delete pFieldInfo;
}
m_lstFieldInfoNew.RemoveAll();
}
void CDlgNewTable::OnBtnGenerateSql()
{
bool bRet = true;
UpdateData(true);
m_strTableName.TrimLeft();
m_strTableName.TrimRight();
if (m_strTableName.GetLength() <= 0)
{
bRet = false;
AfxMessageBox(IDS_ERR_NO_TABLE_NAME);
}
FieldInfo *pFieldInfo;
while (!m_lstFieldInfoNew.IsEmpty())
{
pFieldInfo = (FieldInfo *)m_lstFieldInfoNew.RemoveHead();
delete pFieldInfo;
}
m_lstFieldInfoNew.RemoveAll();
for (int i = 0; i < m_lstTable.GetItemCount(); i++)
{
if (!CheckField(i,m_lstFieldInfoNew))
{
char szBuf[1024];
bRet = false;
sprintf(szBuf,"Table definition error in line: %d .",i + 1);
AfxMessageBox(szBuf);
break;
}
}
strcpy(m_szSQL,""); //
if (bRet)
if (m_lstFieldInfoNew.GetCount() > 0)
{
CHAR szTableName[1024];
strcpy(szTableName,m_strTableName);
GenerateTableSQL(m_szSQL,szTableName,m_lstFieldInfoNew);
if (strlen(m_szSQL) <= 0)
{
bRet = false;
AfxMessageBox(IDS_ERR_SQL_CREATE_TABLE);
}
}
else
{
bRet = false;
}
if (bRet)
{
HGLOBAL hData = ::GlobalAlloc(GMEM_DDESHARE, 64*1024);
LPTSTR lpOut = (LPTSTR)::GlobalLock(hData);
strcpy(lpOut,m_szSQL);
OpenClipboard();
EmptyClipboard();
SetClipboardData( CF_TEXT,hData );
CloseClipboard();
//the next two statements raise an error
//At now I don't know why
// ::GlobalUnlock(hData);
// ::GlobalFree(hData);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -