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

📄 index.cpp

📁 一个作的很好的dao数据库开发
💻 CPP
字号:
// index.cpp : MFC DAO Index specific functions
//
// This is a part of the Microsoft Foundation Classes C++ library.
// Copyright (C) 1992-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Microsoft Foundation Classes Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Microsoft Foundation Classes product.

//
// contains index specific functions:
//BOOL IsExistentIndex(CDaoTableDef *pTableDef, CString strIndexName);
//BOOL createNewIndex(CDaoTableDef *pTableDef, CDaoIndexInfo *pIndexInfo);
//BOOL getIndexInfo(CDaoTableDef *pTableDef, CDaoIndexInfo *pIndexInfo,
//                int IndexIndex, BOOL bReportErrors = TRUE);
//BOOL deleteIndex(CDaoTableDef *pTableDef, CString strIndexName);

#include "stdafx.h"
#include "index.h"

// check for duplicate name in collection
// of tabledef object
// IN: pTableDef--pointer to tabledef object whose index collection we access
// IN: strIndexName--name of index to check for existence
// RETURN: TRUE if the index exists in the collection, FALSE otherwise
BOOL IsExistentIndex(CDaoTableDef *pTableDef, CString strIndexName)
{
	// if the tabledef is non-existent, then the answer is obvious
	if (pTableDef == NULL)
		return FALSE;

	// initialize status indicator
	BOOL bDuplicateIndexName = TRUE;

	// see if there is a Index by this name already--duplicate
	// named Indexs are not accepted
	CDaoIndexInfo IndexInfo;    // only needed for the call

	// MFC exception handler macros used
	TRY
	{
		// this call will throw an exception if there is no
		// Index by the specified name--test for duplication
		pTableDef->GetIndexInfo(strIndexName, IndexInfo);
	}
	CATCH (CDaoException, e)
	{
		// if this is an 'Item not found' exception, we are
		// cleared to create the Index -- else this is
		// a duplicate Index name and we got another exception
		// which is irrelevant for our purposes
		if (e->m_pErrorInfo->m_lErrorCode == 3265)
			bDuplicateIndexName = FALSE;
	}
	AND_CATCH (CMemoryException, e)
	{
		// do nothing
		;
	}
	END_CATCH

	return bDuplicateIndexName;
}

// wraps the CreateIndex DAO call in an exception handler
// IN: pTableDef--pointer to tabledef object whose index collection we access
// IN: pIndexInfo--information on index to be created
// RETURN: TRUE if new index created, FALSE otherwise
BOOL createNewIndex(CDaoTableDef *pTableDef, CDaoIndexInfo *pIndexInfo)
{
	// if the tabledef is non-existent, then the answer is obvious
	if (pTableDef == NULL)
		return FALSE;

	// check for existing Index with this name just to be safe
	if (IsExistentIndex(pTableDef, pIndexInfo->m_strName))
	{
		AfxMessageBox(_T("A Index by that name already exists."));

		// return FALSE since can't create duplicate Index
		return FALSE;
	}

	// initialize failure indicators
	BOOL bCreateFailed = FALSE;

	// create a Index with the specified properties
	// it is automatically appended to Index collection
	// of the tabledef
	TRY
	{
		pTableDef->CreateIndex(*pIndexInfo);
	}
	CATCH (CDaoException, e)
	{
		// construct a meaningful message
		CString message = _T("Couldn't create Index--Exception: ");
		message += e->m_pErrorInfo->m_strDescription;

		AfxMessageBox(message);

		// indicate failure
		bCreateFailed = TRUE;
	}
	AND_CATCH (CMemoryException, e)
	{
		AfxMessageBox(_T("Failed to create Index--Memory exception thrown."));

		// indicate failure
		bCreateFailed = TRUE;
	}
	END_CATCH

	// return TRUE if creation succeeds
	return (!bCreateFailed);
}

// fill a Indexinfo struct--handle exceptions
// IN: pTableDef--pointer to tabledef object whose index collection we access
// OUT: pIndexInfo--information on index that is specifieed
// IN: IndexIndex--the index into the index collection for the item we want
// IN: bReportErrors--if TRUE, report any errors that occur, else silent
//     TRUE by default
// RETURN: TRUE if information obtained, FALSE otherwise
BOOL getIndexInfo(CDaoTableDef *pTableDef, CDaoIndexInfo *pIndexInfo,
				  int IndexIndex, BOOL bReportErrors /*= TRUE*/)
{
	// if the tabledef is non-existent, then the answer is obvious
	if (pTableDef == NULL)
		return FALSE;

	// initialize success indicator
	BOOL bSuccess = TRUE;

	TRY
	{
		// try to get info on the Index
		pTableDef->GetIndexInfo(IndexIndex, *pIndexInfo, AFX_DAO_ALL_INFO );
	}
	CATCH (CDaoException, e)
	{
		// construct a meaningful message if requested
		if (bReportErrors)
		{
			CString strMessage = _T("Couldn't get information on Index--Exception: ");
			strMessage += e->m_pErrorInfo->m_strDescription;

			AfxMessageBox(strMessage);
		}

		// indicate failure
		bSuccess = FALSE;
	}
	AND_CATCH (CMemoryException, e)
	{
		// output status if requested
		if (bReportErrors)
			AfxMessageBox(_T("Failed to get info on Index--Memory exception thrown."));

		// indicate failure
		bSuccess = FALSE;
	}
	END_CATCH

	// return status
	return bSuccess;
}

// wrap Index deletion with exception handlers
// IN: pTableDef--pointer to tabledef object whose index collection we access
// IN: strIndexName--name of index to delete
// RETURN: TRUE if deletion suceeded, FALSE otherwise
BOOL deleteIndex(CDaoTableDef *pTableDef, CString strIndexName)
{
	// if the tabledef is non-existent, then the answer is obvious
	if (pTableDef == NULL)
		return FALSE;

	// initialize success indicator
	BOOL bSuccess = TRUE;

	// MFC exception handler macros used
	TRY
	{
		// this call will throw an exception if there is no
		// Index by the specified name--test for duplication
		pTableDef->DeleteIndex(strIndexName);
	}
	CATCH (CDaoException, e)
	{
		CString strMessage = _T("Couldn't delete the Index--Exception: ");
		strMessage += e->m_pErrorInfo->m_strDescription;

		AfxMessageBox(strMessage);

		// indicate failure
		bSuccess = FALSE;
	}
	AND_CATCH (CMemoryException, e)
	{
		AfxMessageBox(_T("Failed to delete the Index--Memory exception thrown."));

		// indicate failure
		bSuccess = FALSE;
	}
	END_CATCH

	return bSuccess;
}

⌨️ 快捷键说明

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