INDEX.CPP
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:6k
源码类别:
Windows编程
开发平台:
Visual C++
- // 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;
- }