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

📄 daolistview.cpp

📁 Visual C++ 实践与提高--数据库篇的源代码。很好的东西。欢迎下载。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	for (int j=0; j < nQueryDefCount; j++)
	{
		try
		{
			//得到指定查询定义的信息
			m_pDB->GetQueryDefInfo(j,qdInfo,AFX_DAO_ALL_INFO);
			if (!bShowSystemObjects)
				if (qdInfo.m_nType == 5)
					continue;
			if (strQueryDefName == NULL || qdInfo.m_strName == strQueryDefName)
				ShowQueryDefInfo(nItem++,qdInfo);
		}
		catch (CDaoException* e)
		{
			e->Delete();
		}
	}
	//调整列宽
	AdjustColumnWidths();
}

void CDaoListView::RunQueryDef(LPCTSTR strQueryDefName)
{
	ASSERT(m_pDB);
	ASSERT(m_pDB->IsOpen());

	CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();

	//声明属性列对象
	CDaoFieldInfo fieldInfo;
	int nFields;

	//构造查询定义对象
	CDaoQueryDef qd(m_pDB);

	EraseList();

	try
	{
		//初始化查询定义对象
		qd.Open(strQueryDefName);
		//得到查询中定义的参数数目
		if (qd.GetParameterCount() > 0)
		{
			CDlgParams dlgParams;
			dlgParams.SetInfo(m_pDB,strQueryDefName);
			dlgParams.DoModal();
		}
		//获得属性字段数目
		nFields = qd.GetFieldCount();
		for (int j=0; j < nFields; j++)
		{
			//获得指定字段的信息
			qd.GetFieldInfo(j,fieldInfo);
			ctlList.AddColumn(fieldInfo.m_strName,j);
		}
	}
	catch(CDaoException* e)
	{
		e->Delete();
	}
	
	//得到记录行信息并插入列表
	CDaoRecordset rs(m_pDB);
	int nItem = 0;
	int nLoaded = 0;
	BOOL MAXRECORDS = ((CDAOQryApp *)AfxGetApp())->m_nMaxRecords;
	try
	{
		//以只读方式打开记录集
		rs.Open(&qd,dbOpenSnapshot,dbReadOnly);
		while (!rs.IsEOF()) {
			//每次插入列表ctlList的纪录不超过MAXRECORDS条 
			if (nItem<MAXRECORDS)
			{
				nLoaded++;
				COleVariant var;
				for (int i=0; i < nFields; i++)
				{
					var = rs.GetFieldValue(i);
					ctlList.AddItem(nItem,i,CCrack::strVARIANT(var));
				}
			}
			nItem++;
			rs.MoveNext();
		}
	}
	catch(CDaoException* e)
	{
		DisplayDaoException(e);
		e->Delete();
	}
	CString strRecCount;
	strRecCount.Format(_T("Loaded %d of %d total records"),nLoaded,nItem);
	UpdateWindow();
	if (nItem>=MAXRECORDS)
		MessageBox(strRecCount);
	((CFrameWnd *) AfxGetMainWnd())->SetMessageText(strRecCount);
	if (rs.IsOpen())
		rs.Close();
}

void CDaoListView::ShowFields(LPCTSTR strTableName,LPCTSTR strFieldName)
{
	ASSERT(m_pDB);
	ASSERT(m_pDB->IsOpen());

	CDaoFieldInfo fieldInfo;

	m_bVertical = strFieldName != NULL;
	DisplayColumnHeadings(IDS_COL_FIELD);

	// Attempt to open the table (which may fail with a security violation)
	CDaoTableDef td(m_pDB);
	try
	{
		td.Open(strTableName);
		int nItem = 0;
		int nFieldCount = td.GetFieldCount();
		for (int j=0; j < nFieldCount; j++)
		{
			td.GetFieldInfo(j,fieldInfo,AFX_DAO_ALL_INFO);
			if (strFieldName == NULL || fieldInfo.m_strName == strFieldName)
			{
				ShowFieldInfo(nItem++,fieldInfo);
			}
		}
		AdjustColumnWidths();
	}
	catch(CDaoException* e)
	{
		e->Delete();
	}
	td.Close();
}

void CDaoListView::ShowFieldInfo(int nItem,CDaoFieldInfo& Info)
{
	CString strSize;
	CString strCollatingOrder;
	strSize.Format(_T("%ld"),Info.m_lSize);
	strCollatingOrder.Format(_T("%ld"),Info.m_lCollatingOrder);

	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,CCrack::strFieldType(Info.m_nType));
	AddItem(nItem,2,strSize);
	AddItem(nItem,3,CCrack::strBOOL(Info.m_bRequired));
	AddItem(nItem,4,CCrack::strBOOL(Info.m_bAllowZeroLength));
	AddItem(nItem,5,strCollatingOrder);
	AddItem(nItem,6,Info.m_strForeignName);
	AddItem(nItem,7,Info.m_strValidationRule);
	AddItem(nItem,8,Info.m_strValidationText);
	AddItem(nItem,9,Info.m_strDefaultValue);
}

void CDaoListView::ShowDatabaseInfo(int nItem,CDaoDatabaseInfo& Info)
{
	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,CCrack::strBOOL(Info.m_bUpdatable));
	AddItem(nItem,2,CCrack::strBOOL(Info.m_bTransactions));
	AddItem(nItem,3,Info.m_strVersion);
	AddItem(nItem,4,CCrack::strVARIANT(COleVariant(Info.m_lCollatingOrder)));
	AddItem(nItem,5,CCrack::strVARIANT(COleVariant(Info.m_nQueryTimeout)));
	AddItem(nItem,6,Info.m_strConnect);
}

void CDaoListView::ShowQueryDefInfo(int nItem,CDaoQueryDefInfo& Info)
{
	CString strODBCTimeout;
	strODBCTimeout.Format(_T("%hd"),Info.m_nODBCTimeout);

	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,CCrack::strQueryDefType(Info.m_nType));
	AddItem(nItem,2,Info.m_dateCreated.Format());
	AddItem(nItem,3,Info.m_dateLastUpdated.Format());
	AddItem(nItem,4,CCrack::strBOOL(Info.m_bUpdatable));
	AddItem(nItem,5,CCrack::strBOOL(Info.m_bReturnsRecords));
	AddItem(nItem,6,Info.m_strSQL);
	AddItem(nItem,7,Info.m_strConnect);
	AddItem(nItem,8,strODBCTimeout);
}

void CDaoListView::ShowTableDefInfo(int nItem,CDaoTableDefInfo& Info)
{
	CString strRecordCount;
	strRecordCount.Format(_T("%ld"),Info.m_lRecordCount);

	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,CCrack::strBOOL(Info.m_bUpdatable));
	AddItem(nItem,2,Info.m_dateCreated.Format());
	AddItem(nItem,3,Info.m_dateLastUpdated.Format());
	AddItem(nItem,4,Info.m_strSrcTableName);
	AddItem(nItem,5,Info.m_strConnect);
	AddItem(nItem,6,Info.m_strValidationRule);
	AddItem(nItem,7,Info.m_strValidationText);
	AddItem(nItem,8,strRecordCount);
}

void CDaoListView::ShowRelationInfo(int nItem,CDaoRelationInfo& Info)
{
	CString strAttributes;
	strAttributes.Format(_T("%ld"),Info.m_lAttributes);

	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,Info.m_strTable);
	AddItem(nItem,2,Info.m_strForeignTable);
	AddItem(nItem,3,strAttributes);
}

void CDaoListView::ShowIndexInfo(int nItem,CDaoIndexInfo& Info)
{
	CString strFieldInfo;
	for (int nIndex = 0; nIndex < Info.m_nFields; nIndex++)
	{
		strFieldInfo += Info.m_pFieldInfos[nIndex].m_bDescending ? _T("-") : _T("+");
		strFieldInfo += Info.m_pFieldInfos[nIndex].m_strName;
		if (nIndex < Info.m_nFields - 1)
			strFieldInfo += _T("; ");
	}
	CString strDistinctCount;
	strDistinctCount.Format(_T("%ld"),Info.m_lDistinctCount);

	AddItem(nItem,0,Info.m_strName);
	AddItem(nItem,1,strFieldInfo);
	AddItem(nItem,2,CCrack::strBOOL(Info.m_bPrimary));
	AddItem(nItem,3,CCrack::strBOOL(Info.m_bUnique));
	AddItem(nItem,4,CCrack::strBOOL(Info.m_bClustered));
	AddItem(nItem,5,CCrack::strBOOL(Info.m_bIgnoreNulls));
	AddItem(nItem,6,CCrack::strBOOL(Info.m_bRequired));
	AddItem(nItem,7,CCrack::strBOOL(Info.m_bForeign));
	AddItem(nItem,8,strDistinctCount);
}

void CDaoListView::DisplayColumnHeadings(UINT nStringID)
{
	CString strHeadings;
	strHeadings.LoadString(nStringID);

	CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();

	int nPos;
	int nCount = 0;

	EraseList();

	if (m_bVertical)
	{
		ctlList.AddColumn(_T("Property     "),0);
		ctlList.AddColumn(_T("Value     "),1);
		m_nColumns = 2;
	}
	while ((nPos = strHeadings.Find(_T(","))) != -1){
		CString strItem;
		strItem = strHeadings.Left(nPos);
		if (m_bVertical)
			ctlList.AddItem(nCount++,0,strItem);
		else
			ctlList.AddColumn(strItem,nCount++);
		strItem = strHeadings.Mid(nPos + 1);
		strHeadings = strItem;
	}
	if (m_bVertical)
		ctlList.AddItem(nCount,0,strHeadings);
	else
		ctlList.AddColumn(strHeadings,nCount);
	m_nColumns = nCount;
}

void CDaoListView::AdjustColumnWidths()
{
	CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();

	ctlList.SetColumnWidth(-1,-3);
}

void CDaoListView::AddItem(int nItem,int nSubItem,LPCTSTR strItem)
{
	CListCtrlEx& ctlList = (CListCtrlEx&) GetListCtrl();

	if (m_bVertical)
		ctlList.AddItem(nSubItem,1,strItem);
	else
		ctlList.AddItem(nItem,nSubItem,strItem);
}

//--------------------------------
CDaoRecordset rs(m_pDB);
int nItem = 0;

try
{
	//以只读方式打开记录集,qd为查询定义
	rs.Open(&qd,dbOpenSnapshot,dbReadOnly);
	while (!rs.IsEOF()) 
	{		
		//每次插入列表ctlList的纪录不超过MAXRECORDS条 
		if(if (nItem<MAXRECORDS))
		{		
			COleVariant var;
			for (int i=0; i < nFields; i++)
			{
				var = rs.GetFieldValue(i);
				ctlList.AddItem(nItem,i,CCrack::strVARIANT(var));
			}
		}
	
		nItem++;
		rs.MoveNext();
	}
}
catch(CDaoException* e)
{
	//捕捉错误并显示
	DisplayDaoException(e);
	e->Delete();
}





⌨️ 快捷键说明

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