📄 leftview.cpp
字号:
sprintf(szSQL,"DROP TABLE %s",szTable);
if (mysql_query(pMysql,szSQL) == 0) //Success
{
tvCtrl.DeleteItem(m_tviCurSel);
m_tviCurSel = NULL;
#ifdef INFO_SUCCESS
AfxMessageBox(IDS_MSG_SUCCESS_DELETE_TABLE,MB_ICONINFORMATION);
#endif //INFO_SUCCESS
}
else
{
AfxMessageBox(mysql_error(pMysql));
//AfxMessageBox(IDS_ERR_DELETE_TABLE);
}
if (m_pCurMysql != NULL)
mysql_select_db(m_pCurMysql,m_strCurDb); //back to original database
}
else
AfxMessageBox(mysql_error(pMysql));
//AfxMessageBox(IDS_MSG_DB_NOT_SELECT);
}
break;
default :
;
}
}
void CLeftView::OnMenuitem32771()
{
//New
CTreeCtrl& tvCtrl = GetTreeCtrl();
MYSQL *pMysql;
CString strInfo;
// HTREEITEM tviDb;
CHAR szDb[512];
switch (ItemStyle(m_tviCurSel,&pMysql))
{
case 0 : //Server group
while (dlgRegister.DoModal() == IDOK &&
!RegisterServer(dlgRegister.m_strServer,
dlgRegister.m_strHost,
dlgRegister.m_nPort,
dlgRegister.m_bTrust,
dlgRegister.m_strUser,
dlgRegister.m_strPasswd));
break;
case 1 : //Server
if (dlgNewDb.DoModal() == IDOK)
{
// if (mysql_create_db(pMysql,dlgNewDb.m_strDatabase) == 0)
if (1)
{
tvCtrl.InsertItem(dlgNewDb.m_strDatabase,1,1,m_tviCurSel);
#ifdef INFO_SUCCESS
AfxMessageBox(IDS_MSG_SUCCESS_CREATE_DATABASE);
#endif //INFO_SUCCESS
}
else
AfxMessageBox(mysql_error(pMysql));
}
break;
case 2 : //Database
strcpy(szDb,tvCtrl.GetItemText(m_tviCurSel)); //Get the database name
if (mysql_select_db(pMysql,szDb) != 0) //Error
{
AfxMessageBox(mysql_error(pMysql));
break;
}
if (dlgNewTable.DoModal() == IDOK)
{
if (mysql_query(pMysql,dlgNewTable.m_szSQL) == 0)
{
tvCtrl.InsertItem(dlgNewTable.m_strTableName,2,2,m_tviCurSel);
#ifdef INFO_SUCCESS
AfxMessageBox(IDS_MSG_SUCCESS_CREATE_TABLE);
#endif //INFO_SUCCESS
}
else
AfxMessageBox(mysql_error(pMysql));
}
if (m_pCurMysql != NULL)
mysql_select_db(m_pCurMysql,m_strCurDb); //back to original database
break;
case 3 : //Table
default :
;
}
}
void CLeftView::OnMenuitem32774()
{
//Refresh
CTreeCtrl& tvCtrl = GetTreeCtrl();
HTREEITEM tviServer,tviDelete;
CString strServer;
bool bFound;
POSITION pos;
ServerInfo *pCheckServer;
//First delete all invalid servers in the tree
tviServer = tvCtrl.GetChildItem(m_tviServerGrp);
while (tviServer != NULL)
{
strServer = tvCtrl.GetItemText(tviServer);
bFound = false;
pos = m_lstConnect.GetHeadPosition();
while (pos != NULL)
{
pCheckServer = (ServerInfo*)m_lstConnect.GetNext(pos);
if ((pCheckServer != NULL) && (stricmp(strServer,pCheckServer->strServer) == 0))
{
bFound = true;
break;
}
}
tviDelete = tviServer;
tviServer = tvCtrl.GetNextSiblingItem(tviServer);
if (!bFound)
tvCtrl.DeleteItem(tviDelete);
}
//Second add all servers that in the connection list to tree
pos = m_lstConnect.GetHeadPosition();
while (pos != NULL)
{
pCheckServer = (ServerInfo*)m_lstConnect.GetNext(pos);
bFound = false;
tviServer = tvCtrl.GetChildItem(m_tviServerGrp);
while (tviServer != NULL)
{
strServer = tvCtrl.GetItemText(tviServer);
if ((pCheckServer != NULL) && (stricmp(strServer,pCheckServer->strServer) == 0))
{
bFound = true;
break;
}
tviServer = tvCtrl.GetNextSiblingItem(tviServer);
}
if (!bFound)
RegisterServer(pCheckServer->strServer,pCheckServer->strHost,pCheckServer->nPort,
pCheckServer->bTrusted,pCheckServer->strUser,pCheckServer->strPasswd);
}
//Now check the database
tviServer = tvCtrl.GetChildItem(m_tviServerGrp);
while (tviServer != NULL)
{
strServer = tvCtrl.GetItemText(tviServer);
bFound = false;
pos = m_lstConnect.GetHeadPosition();
while (pos != NULL)
{
pCheckServer = (ServerInfo*)m_lstConnect.GetNext(pos);
if ((pCheckServer != NULL) && (stricmp(strServer,pCheckServer->strServer) == 0))
{
bFound = true;
break;
}
}
if (bFound)
CheckDatabase(pCheckServer,tviServer);
tviServer = tvCtrl.GetNextSiblingItem(tviServer);
}
}
void CLeftView::CheckDatabase(ServerInfo *pServerInfo, HTREEITEM tviServer)
{
CTreeCtrl& tvCtrl = GetTreeCtrl();
CStringList lstDatabase;
CString strDatabase;
HTREEITEM tviDatabase,tviDelete;
MYSQL_RES *pResDbs;
pResDbs = mysql_list_dbs(pServerInfo->pMysql,"%"); //Get all databases
if (pResDbs != NULL)
{
MYSQL_ROW rowDbs;
while (rowDbs = mysql_fetch_row(pResDbs))
{
if ((rowDbs[0] != NULL) || (strlen(rowDbs[0]) > 0))
lstDatabase.AddHead(rowDbs[0]); //Get all databases
}
mysql_free_result(pResDbs);
}
//Delete all non-exist database
tviDatabase = tvCtrl.GetChildItem(tviServer);
while (tviDatabase != NULL)
{
strDatabase = tvCtrl.GetItemText(tviDatabase);
tviDelete = tviDatabase;
tviDatabase = tvCtrl.GetNextSiblingItem(tviDatabase);
if (!ExistString(lstDatabase,strDatabase))
tvCtrl.DeleteItem(tviDelete);
}
//Add all new database
POSITION pos;
pos = lstDatabase.GetHeadPosition();
while (pos != NULL)
{
strDatabase = lstDatabase.GetAt(pos);
if (!ExistItem(tvCtrl,tviServer,strDatabase))
tvCtrl.InsertItem(strDatabase,1,1,tviServer);
lstDatabase.GetNext(pos);
}
//Now check the tables
tviDatabase = tvCtrl.GetChildItem(tviServer);
while (tviDatabase != NULL)
{
strDatabase = tvCtrl.GetItemText(tviDatabase);
CheckTable(pServerInfo,tviDatabase);
tviDatabase = tvCtrl.GetNextSiblingItem(tviDatabase);
}
}
void CLeftView::CheckTable(ServerInfo *pServerInfo, HTREEITEM tviDatabase)
{
CTreeCtrl& tvCtrl = GetTreeCtrl();
CStringList lstTable;
CString strTable;
HTREEITEM tviTable,tviDelete;
MYSQL_RES *pResTabs;
if (mysql_select_db(pServerInfo->pMysql,tvCtrl.GetItemText(tviDatabase)) != 0)
return;
pResTabs = mysql_list_tables(pServerInfo->pMysql,"%"); //Get all tables
if (pResTabs != NULL)
{
MYSQL_ROW rowTabs;
while (rowTabs = mysql_fetch_row(pResTabs))
{
if ((rowTabs[0] != NULL) || (strlen(rowTabs[0]) > 0))
lstTable.AddHead(rowTabs[0]); //Get all tables
}
mysql_free_result(pResTabs);
}
//Delete all non-exist tables
tviTable = tvCtrl.GetChildItem(tviDatabase);
while (tviTable != NULL)
{
strTable = tvCtrl.GetItemText(tviTable);
tviDelete = tviTable;
tviTable = tvCtrl.GetNextSiblingItem(tviTable);
if (!ExistString(lstTable,strTable))
tvCtrl.DeleteItem(tviDelete);
}
//Add all new tables
POSITION pos;
pos = lstTable.GetHeadPosition();
while (pos != NULL)
{
strTable = lstTable.GetAt(pos);
if (!ExistItem(tvCtrl,tviDatabase,strTable))
tvCtrl.InsertItem(strTable,2,2,tviDatabase);
lstTable.GetNext(pos);
}
if (m_pCurMysql != NULL)
mysql_select_db(m_pCurMysql,m_strCurDb);
}
int CLeftView::ExistString(CStringList& lstString, CString& strString)
{
POSITION pos;
CString strThis;
pos = lstString.GetHeadPosition();
while (pos != NULL)
{
strThis = lstString.GetAt(pos);
if (strThis == strString)
return 1;
lstString.GetNext(pos);
}
return 0;
}
int CLeftView::ExistItem(CTreeCtrl& tvCtrl, HTREEITEM tviParent, CString& strString)
{
HTREEITEM tviThis;
CString strThis;
tviThis = tvCtrl.GetChildItem(tviParent);
while (tviThis != NULL)
{
strThis = tvCtrl.GetItemText(tviThis);
if (strThis == strString)
return 1;
tviThis = tvCtrl.GetNextSiblingItem(tviThis);
}
return 0;
}
void CLeftView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
CTreeCtrl& tvCtrl = GetTreeCtrl();
MYSQL *pMysql;
UINT uFlags;
HTREEITEM tviDb;
CHAR szDb[512];
HTREEITEM tviItem = tvCtrl.HitTest(point,&uFlags);
if ((tviItem != NULL) && (uFlags & TVHT_ONITEM))
{
tviDb = tviItem;
switch (ItemStyle(tviItem,&pMysql))
{
case 3 : //Table
tviDb = tvCtrl.GetParentItem(tviDb); //Get the database that contains this table
case 2 : //Database
strcpy(szDb,tvCtrl.GetItemText(tviDb)); //Get the database name
if (mysql_select_db(pMysql,szDb) == 0) //success
{
m_pCurMysql = pMysql;
m_strCurDb = szDb;
}
else
AfxMessageBox(mysql_error(pMysql));
break;
default :
;
}
}
CTreeView::OnLButtonDblClk(nFlags, point);
}
void CLeftView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
CTreeCtrl& tvCtrl = GetTreeCtrl();
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
tvCtrl.Select(tvCtrl.GetSelectedItem(),TVGN_DROPHILITE);
*pResult = 0;
}
void CLeftView::Serialize(CArchive& ar)
{
POSITION pos;
ServerInfo *pCheckServer,TempServer;
if (ar.IsStoring())
{
pos = m_lstConnect.GetHeadPosition();
ar << m_lstConnect.GetCount();
while (pos != NULL)
{
pCheckServer = (ServerInfo*)m_lstConnect.GetNext(pos);
if (pCheckServer != NULL)
{
ar << pCheckServer->strServer;
ar << (long)pCheckServer->pMysql;
ar << pCheckServer->strHost;
ar << pCheckServer->nPort;
ar << (long)pCheckServer->bTrusted;
ar << pCheckServer->strUser;
ar << pCheckServer->strPasswd;
}
}
}
else
{
try
{
int nCount;
ar >> nCount;
while (nCount > 0)
{
long lTemp;
ar >> TempServer.strServer;
ar >> lTemp;
TempServer.pMysql =(MYSQL*)lTemp;
ar >> TempServer.strHost;
ar >> TempServer.nPort;
ar >> lTemp;
TempServer.bTrusted = lTemp ? true:false;
ar >> TempServer.strUser;
ar >> TempServer.strPasswd;
RegisterServer(TempServer.strServer,TempServer.strHost,TempServer.nPort,
TempServer.bTrusted,TempServer.strUser,TempServer.strPasswd);
nCount--;
}
}
catch (CException *e)
{
e->Delete();
AfxMessageBox(IDS_ERR_REGFILE_ERROR);
}
}
}
void CLeftView::InitServerGrp()
{
GetTreeCtrl().DeleteAllItems();
m_tviServerGrp = GetTreeCtrl().InsertItem("Server Group",3,3);
ASSERT(m_tviServerGrp != NULL);
m_pCurMysql = NULL;
m_strCurDb = ""; //default database
m_tviOldSel = NULL;
m_tviCurSel = NULL;
}
void CLeftView::OnMenuitem32786()
{
//Generate SQL
CPtrList lstFieldInfo;
CTreeCtrl& tvCtrl = GetTreeCtrl();
MYSQL *pMysql;
CHAR szDb[512],szTable[512];
HTREEITEM tviDb;
switch (ItemStyle(m_tviCurSel,&pMysql))
{
case 0 :
case 1 :
break;
case 2 : //Database
strcpy(szDb,tvCtrl.GetItemText(m_tviCurSel));
dlgScript.m_strSQL = "CREATE DATABASE ";
dlgScript.m_strSQL += szDb;
dlgScript.m_strSQL += "\r\n";
dlgScript.DoModal();
break;
case 3 : //Table
strcpy(szTable,tvCtrl.GetItemText(m_tviCurSel));
tviDb = tvCtrl.GetParentItem(m_tviCurSel);
strcpy(szDb,tvCtrl.GetItemText(tviDb)); //Get the database name
if (mysql_select_db(pMysql,szDb) != 0) //Error
{
AfxMessageBox(mysql_error(pMysql));
break;
}
MYSQL_RES *res;
CHAR szSQL[1024];
FieldInfo *pFieldInfo;
lstFieldInfo.RemoveAll();
sprintf(szSQL,"SHOW COLUMNS FROM %s",szTable);
if (mysql_query(pMysql,szSQL) == 0)
{
res = mysql_store_result(pMysql);
MYSQL_ROW row;
while (row = mysql_fetch_row(res))
{
pFieldInfo = new FieldInfo;
pFieldInfo->strFieldName = row[0];
pFieldInfo->strFieldType = row[1];
pFieldInfo->strFieldLength = "";
pFieldInfo->strFieldPrecision = "";
pFieldInfo->bNum = false;
if (stricmp(row[2],"YES") == 0)
pFieldInfo->bNull = true;
else
pFieldInfo->bNull = false;
if (stricmp(row[3],"PRI") == 0)
pFieldInfo->bKey = true;
else
pFieldInfo->bKey = false;
pFieldInfo->strDefault = row[4];
lstFieldInfo.AddTail(pFieldInfo);
}
if (res != NULL)
mysql_free_result(res);
CHAR szSQLBuf[64*1024];
GenerateTableSQL(szSQLBuf,szTable,lstFieldInfo);
dlgScript.m_strSQL = szSQLBuf;
while (!lstFieldInfo.IsEmpty())
{
pFieldInfo = (FieldInfo*)lstFieldInfo.RemoveHead();
delete pFieldInfo;
}
}
dlgScript.DoModal();
if (m_pCurMysql != NULL)
mysql_select_db(m_pCurMysql,m_strCurDb); //back to original database
break;
default :
;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -