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

📄 demo_outputbar.cpp

📁 使用yacc的一个例子
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	else if	(pDB == NULL)	//系统预定义角色
	{
		str = "角色名:" + pRole->m_strRoleName + "\r\n";
		strTemp.Format("角色ID:%d\r\n", pRole->m_nRoleID);
		str += strTemp;
		str += "角色说明:";
		if	(pRole == g_sdbms.GetDbaRole())	//DBA角色
		{
			str += "DBA角色,拥有除DBSA所拥有权限之外的所有权限。\r\n";
		}
		else if	(pRole == g_sdbms.GetDbsaRole())	//DBSA角色
		{
			str += "DBSA角色,拥有与安全相关的所有命令的权限,包括改变角色拥有的权限、\r\n";
			str += "          改变用户拥有的角色、改变用户安全级、改变数据安全级、审计等权限。\r\n";
			str += "          但不能查询和操纵任何数据库对象。\r\n";
		}
		else if	(pRole == g_sdbms.GetSystemRole())	//SYSTEM角色
		{
			str += "SYSTEM角色,拥有一些系统权限,如Create Table,Create View,Create Index等。\r\n";
		}
		else
		{
			ASSERT(FALSE);
		}

		str += "对象权限被授予给了====> ";
		CSdbms_RoleObjectRight *pRight = pRole->m_ORList.GetHead();
		if	(pRight->m_ToRoleArray.GetSize() > 0)
			str += pRight->m_ToRoleArray[0]->m_strRoleName;
		for	(int i=1; i<pRight->m_ToRoleArray.GetSize(); i++)
		{
			str += ",  ";
			str += pRight->m_ToRoleArray[i]->m_strRoleName;
		}
		str += "\r\n";
	}
	else	//数据库内的自定义角色
	{
		ASSERT(pRole && pDB);

		str = "角色名:" + pDB->m_strDBName + "." + pRole->m_strRoleName + "\r\n";
		strTemp.Format("角色ID:%d\r\n", pRole->m_nRoleID);
		str += strTemp;
		strTemp.Format("父角色:%s\r\n", pRole->m_pParentRole ? pRole->m_pParentRole->m_strRoleName : "NULL");
		str += strTemp;
		strTemp.Format("第一个子角色:%s\r\n", pRole->m_pFirstChildRole ? pRole->m_pFirstChildRole->m_strRoleName : "NULL");
		str += strTemp;
		strTemp.Format("下一个兄弟角色:%s\r\n\r\n", pRole->m_pNextBrotherRole ? pRole->m_pNextBrotherRole->m_strRoleName : "NULL");
		str += strTemp;

		str += "角色拥有的系统权限-----------:\r\n";
		int n=0;
		POSITION pos = pRole->m_SRList.GetHeadPosition();
		while (pos)
		{
			CSdbms_RoleSystemRight *pRight = pRole->m_SRList.GetNext(pos);
			strTemp.Format("(%d) ", ++n);
			str += strTemp;
			strTemp.Format("系统权限:%s\r\n", g_strSystemRight[pRight->m_nSqlID]);
			str += strTemp;
			str += "    权限授权人:";
			if	(pRight->m_FromUserArray.GetSize() > 0)
			{
				CSdbms_User *pUser;
				VERIFY(g_sdbms.GetUser(pRight->m_FromUserArray[0], &pUser));
				str += pUser->m_strUserName;
			}
			for (int i=1; i<pRight->m_FromUserArray.GetSize(); i++)
			{
				CSdbms_User *pUser;
				VERIFY(g_sdbms.GetUser(pRight->m_FromUserArray[0], &pUser));
				str += ", ";
				str += pUser->m_strUserName;
			}
			str += "\r\n\r\n";
		}

		str += "角色拥有的对象权限-----------:\r\n";
		n = 0;
		pos = pRole->m_ORList.GetHeadPosition();
		while (pos)
		{
			CSdbms_RoleObjectRight *pRight = pRole->m_ORList.GetNext(pos);
			strTemp.Format("(%d) ", ++n);
			str += strTemp;
			strTemp.Format("对象权限:%s, 数据库ID:%d, 表ID:%d, 列ID:%d, 谓词条件:%s\r\n",
				g_strObjectRight[pRight->m_nSqlID], pDB->m_nDBID, 
				pRight->m_nTableID, pRight->m_nFieldID,
				pRight->m_pCondition ? pRight->m_pCondition->GetFormatString() : "NULL");
			str += strTemp;

			str += "    权限授权人:";
			if	(pRight->m_FromUserRoleArray.GetSize() > 0)
			{
				strTemp.Format("<%s, %s, %s>",
					pRight->m_FromUserRoleArray[0]->m_pUser->m_strUserName,
					pRight->m_FromUserRoleArray[0]->m_pRole->m_strRoleName,
					pRight->m_CanGrantArray[0]==1 ? "可授权" : "不可授权");
				str += strTemp;
			}
			for (int i=1; i<pRight->m_FromUserRoleArray.GetSize(); i++)
			{
				strTemp.Format(",<%s, %s, %s>", 
					pRight->m_FromUserRoleArray[i]->m_pUser->m_strUserName,
					pRight->m_FromUserRoleArray[i]->m_pRole->m_strRoleName,
					pRight->m_CanGrantArray[i]==1 ? "可授权" : "不可授权");
				str += strTemp;
			}
			str += "\r\n";

			str += "    权限授予给了:";
			if	(pRight->m_ToRoleArray.GetSize() > 0)
				str += pRight->m_ToRoleArray[0]->m_strRoleName;
			for (i=1; i<pRight->m_ToRoleArray.GetSize(); i++)
			{
				str += ", ";
				str += pRight->m_ToRoleArray[i]->m_strRoleName;
			}
			str += "\r\n";
		}
	}

	int nLength = m_InfoEdit.GetWindowTextLength();
	m_InfoEdit.SetSel(0, nLength);
	m_InfoEdit.ReplaceSel(str);
	SetActiveTabView(1);
	m_FlatTabCtrl.SetCurSel(1);
}

void CDemo_OutputBar::OutputRoleInformation(CSdbms_Table *pTable, CSdbms_Database *pDB)
{
	ASSERT(pTable && pDB);

	CSdbms_Role *pRole = pTable->m_pCreatorRole;
	CString str, strTemp;

	str = "角色名:" + pDB->m_strDBName + "." + pTable->m_strTableName + ".OWNER\r\n";
	strTemp.Format("角色ID:%d\r\n", pRole->m_nRoleID);
	str += strTemp;
	strTemp.Format("角色说明:表%s的创建者角色,拥有表上的所有权限!\r\n", pTable->m_strTableName);
	str += strTemp;

	str += "对象权限被授予给了====> ";
	CSdbms_RoleObjectRight *pRight = pRole->m_ORList.GetHead();
	if	(pRight->m_ToRoleArray.GetSize() > 0)
		str += pRight->m_ToRoleArray[0]->m_strRoleName;
	for	(int i=1; i<pRight->m_ToRoleArray.GetSize(); i++)
	{
		str += ",  ";
		str += pRight->m_ToRoleArray[i]->m_strRoleName;
	}
	str += "\r\n";

	int nLength = m_InfoEdit.GetWindowTextLength();
	m_InfoEdit.SetSel(0, nLength);
	m_InfoEdit.ReplaceSel(str);
	SetActiveTabView(1);
	m_FlatTabCtrl.SetCurSel(1);
}


void CDemo_OutputBar::OutputFieldInformation(CSdbms_Field *pField)
{
	ASSERT(pField);

	CString str, strTemp;

	strTemp.Format("属性名:\t%s\r\n", pField->m_strFieldName);
	str += strTemp;
	strTemp.Format("属性ID:\t%d\r\n", pField->m_nFieldID);
	str += strTemp;
	str += "数据类型:\t";
	switch(pField->m_nDataType)
	{
	case	DATATYPE_INT:
		str += "INT\r\n";	break; 
	case	DATATYPE_UINT:
		str += "UINT\r\n";	break;
	case	DATATYPE_BOOL:
		str += "BOOL\r\n";	break;
	case	DATATYPE_STRING:
		str += "CHAR\r\n";	break;
	default:
		ASSERT(FALSE);
	}
	strTemp.Format("长度:\t\t%d\r\n", pField->m_nLength);
	str += strTemp;
	strTemp.Format("主关键字:\t%s\r\n", pField->m_bKey ? "TRUE" : "FALSE");
	str += strTemp;
	strTemp.Format("外关键字:\t%s\r\n", pField->m_bForeignKey ? "TRUE" : "FALSE");
	str += strTemp;
	strTemp.Format("索引:\t\t%s\r\n", pField->m_bIndex ? "TRUE" : "FALSE");
	str += strTemp;
	strTemp.Format("可为空:\t%s\r\n", pField->m_bCanNULL ? "TRUE" : "FALSE");
	str += strTemp;

	int nLength = m_InfoEdit.GetWindowTextLength();
	m_InfoEdit.SetSel(0, nLength);
	m_InfoEdit.ReplaceSel(str);
	SetActiveTabView(1);
	m_FlatTabCtrl.SetCurSel(1);
}

void CDemo_OutputBar::AddTableList(CSdbms_Database *pDB, CSdbms_Table *pTable)
{
	CRect rc;
	GetChildRect(rc);
	rc.DeflateRect(1,1);

	int nBottom = rc.bottom;
	if(IsHorzDocked()) {
		nBottom -= 21;
	} else if(IsVertDocked()) {
		nBottom -= 34;
	} else {
		nBottom -= 19;
	}
	
	CDemo_TableList *pTableList = new CDemo_TableList(pDB, pTable);
	if	(!pTableList->Create(WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP | LVS_REPORT, 
			CRect(0,0,0,0), this, m_nMaxCtrlID++))
	{
		TRACE("Failed to create table window.\n");
		return;
	}
	pTableList->MoveWindow(rc.left,rc.top,rc.Width(),nBottom);

	int nLength = m_TableArray.GetSize();
	m_TableArray.InsertAt(nLength-2, pTableList);
	m_FlatTabCtrl.InsertItem(nLength, pDB->m_strDBName+"."+pTable->m_strTableName);
	SetActiveTabView(0);
}

void CDemo_OutputBar::RemoveTableList(CSdbms_Database *pDB, CSdbms_Table *pTable)
{
	for	(int i=0; i<m_TableArray.GetSize(); i++)
	{
		if	((m_TableArray[i]->m_pDatabase == pDB) && (m_TableArray[i]->m_pTable == pTable))
		{
			delete m_TableArray[i];
			m_TableArray.RemoveAt(i);
			m_FlatTabCtrl.DeleteItem(2+i);
			return;
		}
	}

	ASSERT(FALSE);//一定要找到
}

void CDemo_OutputBar::UpdateTempTable(CSdbms_Table *pTable)
{
	ASSERT(pTable);

	CDemo_TableList *pTableList = m_TableArray[m_TableArray.GetSize()-1];//得到临时表窗口
	pTableList->m_pTable = pTable;
	pTableList->Update();
	SetActiveTabView(m_TableArray.GetSize()+1);
	m_FlatTabCtrl.SetCurSel(m_TableArray.GetSize()+1);
}

void CDemo_OutputBar::InsertRecord(CSdbms_Database *pDB, CSdbms_Table *pTable, BYTE *pRecord)
{
	for	(int i=0; i<m_TableArray.GetSize(); i++)
		if	((m_TableArray[i]->m_pDatabase == pDB) && (m_TableArray[i]->m_pTable == pTable))
		{
			m_TableArray[i]->InsertRecord(pRecord);
			return;
		}

	ASSERT(FALSE);	//一定要找到
}

void CDemo_OutputBar::ModifyRecord(CSdbms_Database *pDB, CSdbms_Table *pTable, BYTE *pRecord)
{
	for	(int i=0; i<m_TableArray.GetSize(); i++)
		if	((m_TableArray[i]->m_pDatabase == pDB) && (m_TableArray[i]->m_pTable == pTable))
		{
			m_TableArray[i]->ModifyRecord(pRecord);
			return;
		}

	ASSERT(FALSE);	//一定要找到
}

void CDemo_OutputBar::UpdateRecord(CSdbms_Database *pDB, CSdbms_Table *pTable)
{
	for	(int i=0; i<m_TableArray.GetSize(); i++)
		if	((m_TableArray[i]->m_pDatabase == pDB) && (m_TableArray[i]->m_pTable == pTable))
		{
			m_TableArray[i]->Update();
			return;
		}

	ASSERT(FALSE);	//一定要找到
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -