📄 demo_outputbar.cpp
字号:
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 + -