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

📄 pcdmaccessdb.cpp

📁 是一本关于
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// PCDMAccessDB.cpp : Implementation of CPCDMAccessDB
#include "stdafx.h"
#include "PCDMDLL.h"
#include "PCDMAccessDB.h"

/////////////////////////////////////////////////////////////////////////////
// CPCDMAccessDB
// <BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************
void __stdcall _com_issue_error(HRESULT hr)
{
	// Error handling goes here!
}
// </BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************

// <BOOK_ADDON STEP4 Chapter 8.3.3> ******************************************
#define	PCDM_DB	833

STDMETHODIMP CPCDMAccessDB::AddProperty(VARIANT PID, long Sorted)
{
//#ifdef UNDER_CE  // <BOOK_DELETED STEP6 Chapter 9.2.3> *****
VARIANT tvPID;

//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		if (m_SortCnt<10)
		{
			VariantInit(&tvPID);
			VariantChangeType(&tvPID,&PID,0,VT_I4);
			m_DBSortOrder[m_SortCnt].propid=MAKELONG(CEVT_LPWSTR,tvPID.lVal);
			if (Sorted)
				m_DBSortOrder[m_SortCnt].dwFlags=CEDB_SORT_GENERICORDER;
			else
				m_DBSortOrder[m_SortCnt].dwFlags=0;
			m_SortCnt++;
		}
		return S_OK;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (Sorted==TRUE)
	{
		VariantInit(&tvPID);
		VariantChangeType(&tvPID,&PID,0,VT_I4);
		m_DBSortOrder[m_SortCnt].propid=MAKELONG(CEVT_LPWSTR,tvPID.lVal);
		m_DBSortOrder[m_SortCnt].dwFlags=CEDB_SORT_GENERICORDER;
		m_SortCnt++;
	}
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::CreateTable(BSTR FileLocation, BSTR Name)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
CEOID	CeOid=0;
HANDLE	tHandle;

//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		TCHAR strSQL[1024],tStr[200];

		wsprintf(strSQL,TEXT("CREATE DATABASE '%s'"),FileLocation);
		HRESULT hr=m_RS->Open(_variant_t(strSQL),_variant_t(TEXT("")),adOpenForwardOnly , adLockReadOnly , 1);
		wsprintf(strSQL,TEXT("DROP TABLE %s"),Name);
		hr=m_RS->Open(_variant_t(strSQL),_variant_t(FileLocation),adOpenForwardOnly , adLockReadOnly , 1);
		wsprintf(strSQL,TEXT("CREATE TABLE %s ("),Name);
		for (int i=0; i<m_SortCnt; i++)
		{
			wsprintf(tStr,TEXT("Fld%d varchar(200)"),HIWORD(m_DBSortOrder[i].propid));
			wcscat(strSQL,tStr);
			if (i<m_SortCnt-1)
				wcscat(strSQL,TEXT(","));
			else
				wcscat(strSQL,TEXT(")"));
		}
		hr=m_RS->Open(_variant_t(strSQL),_variant_t(FileLocation),adOpenForwardOnly , adLockReadOnly , 1);
		m_SortCnt=0;
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	tHandle = CeOpenDatabase(&CeOid,Name,0,0,NULL);          	
	if (tHandle!= INVALID_HANDLE_VALUE)
	{
#ifdef UNDER_CE
		CloseHandle(tHandle);
#else
		CeCloseHandle((HANDLE)tHandle);
#endif
		CeDeleteDatabase(CeOid);
	}
	if ((CeOid = CeCreateDatabase(Name,PCDM_DB,
      m_SortCnt,m_DBSortOrder))==NULL)
		return S_FALSE;
//#endif // <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::OpenTable(BSTR FileLocation, BSTR Name, VARIANT PID, long *Handle)
{
//#ifdef UNDER_CE		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
CEOID	CeOid=0;
HANDLE	hDataBase; 
CEPROPID	tPID=0;
VARIANT tvPID;

	VariantInit(&tvPID);
	VariantChangeType(&tvPID,&PID,0,VT_I4);
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
TCHAR strSQL[1024],tStr[200];
HRESULT hr;
		wsprintf(strSQL,TEXT("SELECT * FROM %s "),Name);
		wsprintf(tStr,TEXT("Order By Fld%d "),tvPID.lVal);
		wcscat(strSQL,tStr);
		hr=m_RS->Open(_variant_t(strSQL),_variant_t(FileLocation),adOpenKeyset , adLockOptimistic , 1);
		*Handle=(long)m_RS;
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************

	for (int i=0;i<m_SortCnt;i++)
	{
		if (HIWORD(m_DBSortOrder[i].propid)==tvPID.lVal)
		{
			tPID=MAKELONG(LOWORD(m_DBSortOrder[i].propid),tvPID.lVal);
			break;
		}
	}
	hDataBase = CeOpenDatabase(&CeOid,Name,tPID,0,NULL);          	
	if (hDataBase == INVALID_HANDLE_VALUE)
	{
		*Handle=0;
		return S_FALSE;	
	}
	*Handle=(long)hDataBase;
	VariantCopy(&m_ActPID,&PID);

//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::CloseTable(long Handle)
{
	m_SortCnt=0;
	m_rfldCnt=0;
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->Close();
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
#ifdef UNDER_CE	// <BOOK_MOVEDHERE STEP6 Chapter 9.2.3> *****
	CloseHandle((HANDLE)Handle);
//<BOOK_ADDON STEP6 Chapter 9.2.3> *********************************
#else
	CeCloseHandle((HANDLE)Handle);
//</BOOK_ADDON STEP6 Chapter 9.2.3> *********************************
#endif

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::MoveFirst(long Handle)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->MoveFirst();
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (!(m_curRec=CeSeekDatabase((HANDLE)Handle,CEDB_SEEK_BEGINNING, 0, &m_dwIndex)))
		return S_FALSE;
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::MoveLast(long Handle)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->MoveLast();
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (!(m_curRec=CeSeekDatabase((HANDLE)Handle, CEDB_SEEK_END,0, &m_dwIndex)))
		return S_FALSE;
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::MoveNext(long Handle)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->MoveNext();
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (!(m_curRec=CeSeekDatabase((HANDLE)Handle, CEDB_SEEK_CURRENT, 1, &m_dwIndex)))
		return S_FALSE;
//#endif		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::MovePrevious(long Handle)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->MovePrevious();
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (!(m_curRec=CeSeekDatabase((HANDLE)Handle, CEDB_SEEK_CURRENT, -1, &m_dwIndex)))
		return S_FALSE;
//#endif			// <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::FindRecord(long Handle, VARIANT PID, VARIANT Value)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
VARIANT tvPID,tvValue;
		
VariantInit(&tvPID);
VariantInit(&tvValue);
VariantChangeType(&tvPID,&PID,0,VT_I4);
VariantChangeType(&tvValue,&Value,0,VT_BSTR);
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	switch (m_useADO)
	{
		case PCDMADO_V2:
		case PCDMADO_V3:
			{
				Fields		*pFields;
				Field20		*pField20;
Field	*pField;
				HRESULT hr;
				TCHAR tFldName[10];
				VARIANT_BOOL	tBOF,tEOF;
				VARIANT value,tBookMark;

				VariantInit(&tBookMark);
				m_RS->get_Bookmark(&tBookMark);
				m_RS->get_BOF(&tBOF);
				m_RS->get_EOF(&tEOF);
				if(!(tBOF==VARIANT_TRUE && tEOF==VARIANT_TRUE))
				{
					while (tEOF!=VARIANT_TRUE)
					{
						m_RS->get_Fields(&pFields);
						wsprintf(tFldName,TEXT("Fld%d"),tvPID.lVal);
	if (m_useADO==PCDMADO_V3)
	{

⌨️ 快捷键说明

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