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