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

📄 leftview.cpp

📁 连接MYSQL数据库
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				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 + -