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

📄 pcdmaccessdb.cpp

📁 是一本关于
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#ifdef UNDER_CE
		hr=pFields->get_Item(_variant_t(tFldName),(struct Field **)&pField);
#else
		hr=pFields->get_Item(_variant_t(tFldName),(struct ADOField **)&pField);
#endif
		pField->get_Value(&value);
	}
	else
	{
#ifdef UNDER_CE
		hr=pFields->get_Item(_variant_t(tFldName),(struct Field **)&pField20);
#else
		hr=pFields->get_Item(_variant_t(tFldName),(struct ADOField **)&pField20);
#endif
		pField20->get_Value(&value);
	}
						VariantChangeType(&value,&value,0,VT_BSTR);	// just to be sure...
						if (value.vt==VT_BSTR && tvValue.vt==VT_BSTR)
						{
							if (!(CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,value.bstrVal,-1,tvValue.bstrVal, -1)-2))
							{
								hr=S_OK;
								break;
							}
						}
						hr=m_RS->MoveNext(); 
						hr=m_RS->get_EOF(&tEOF);
					}
				}
				if (FAILED(hr) || tEOF==VARIANT_TRUE)
				{
					m_RS->put_Bookmark(tBookMark);
					if (tEOF==VARIANT_TRUE)
						hr=ERROR_NO_MORE_FILES;
				}
				return hr;
			}
			break;
		case PCDMADO_OLEDB:
			{
				VARIANT tBookMark;
				TCHAR tFldName[10];
				VariantInit(&tBookMark);

				HRESULT hr=m_RS->get_Bookmark(&tBookMark);
				wsprintf(tFldName,TEXT("Fld%d='%s'"),tvPID.lVal,tvValue.bstrVal);
				hr=m_RS->Find(tFldName,0,adSearchForward,tBookMark);
				if (FAILED(hr))
					m_RS->put_Bookmark(tBookMark);
				return hr;
			}
			break;
		default:
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
			CEPROPVAL tPropVal;
			DWORD	tdwIndex;
		
			if (tvPID.lVal!=m_ActPID.lVal) return S_FALSE;
			tPropVal.wLenData = 0;
			tPropVal.wFlags = 0;
			tPropVal.propid=MAKELONG(CEVT_LPWSTR,m_ActPID.lVal);
			tPropVal.val.lpwstr=tvValue.bstrVal;
		
			tdwIndex=m_dwIndex;
			if (!(m_curRec=CeSeekDatabase((HANDLE)Handle,CEDB_SEEK_VALUEFIRSTEQUAL,(DWORD)&tPropVal, &tdwIndex)))
			{
				m_curRec=CeSeekDatabase((HANDLE)Handle, CEDB_SEEK_BEGINNING, m_dwIndex, &m_dwIndex);
				return S_FALSE;
			}
			m_dwIndex=tdwIndex;
			break;
	}
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::AddNewRecord(long Handle)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		_variant_t	vaEmpty;
		HRESULT hr=m_RS->AddNew(vaEmpty,vaEmpty); 
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	m_curRec=0;
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	m_wfldCnt=0;

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::SetValue(VARIANT PID, VARIANT Value)
{
//#ifdef UNDER_CE		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
VARIANT tValue,tvPID;

	if (m_wfldCnt>9) return S_FALSE; 
	VariantInit(&tValue);
	VariantChangeType(&tValue,&Value,0,VT_BSTR);
	VariantInit(&tvPID);
	VariantChangeType(&tvPID,&PID,0,VT_I4);
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		Fields	*pFields;
		Field	*pField;
		Field20	*pField20;
		TCHAR tFldName[10];

		HRESULT hr=m_RS->get_Fields(&pFields);
		wsprintf(tFldName,TEXT("Fld%d"),tvPID.lVal);
	
		if (m_useADO==PCDMADO_V3)
		{
			hr=pFields->get_Item(_variant_t(tFldName),&pField);
			hr=pField->put_Value(tValue);
		}
		else
		{
#ifdef UNDER_CE
			hr=pFields->get_Item(_variant_t(tFldName),(struct Field **)&pField20);
#else
			hr=pFields->get_Item(_variant_t(tFldName),(struct ADOField **)&pField20);
#endif
			hr=pField20->put_Value(tValue);
		}
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	m_wFields[m_wfldCnt].propid=MAKELONG(CEVT_LPWSTR,tvPID.lVal);
	m_BStr[m_wfldCnt]=SysAllocString(tValue.bstrVal);
	m_wFields[m_wfldCnt].val.lpwstr=m_BStr[m_wfldCnt];
	m_wFields[m_wfldCnt].wLenData = 0;
	m_wFields[m_wfldCnt].wFlags = 0;
	m_wfldCnt++;
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}


STDMETHODIMP CPCDMAccessDB::WriteRecord(long DBHandle)
{
//#ifdef UNDER_CE		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		_variant_t	vaEmpty;
		HRESULT hr=m_RS->Update(vaEmpty,vaEmpty);
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if(!CeWriteRecordProps((HANDLE)DBHandle, m_curRec, m_wfldCnt, m_wFields) )
		return S_FALSE; 
	for (int i=0;i<m_wfldCnt;i++)
		SysFreeString(m_BStr[i]);	
	m_wfldCnt=0;
//#endif			// <BOOK_DELETED STEP6 Chapter 9.2.3> *****

	return S_OK;
}

STDMETHODIMP CPCDMAccessDB::ReadRecord(long DBHandle, long *Count)
{
//#ifdef UNDER_CE		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		Fields			*pFields;
		long tCnt;

		HRESULT hr=m_RS->get_Fields(&pFields);
		hr=pFields->get_Count(&tCnt);
		*Count=tCnt;
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
LPBYTE	pData=NULL;
DWORD	cbData=0;

	m_rfldCnt=0;
	if(!CeReadRecordProps((HANDLE)DBHandle, CEDB_ALLOWREALLOC, &m_rfldCnt,NULL,&pData,&cbData))
	{
		DWORD err=GetLastError();
		m_rFields=NULL;
		return S_FALSE; 
	}
	m_rFields=(CEPROPVAL*)pData;
	*Count=m_rfldCnt;
//#endif		// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}


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

	VariantInit(Value);
	VariantInit(&tvPID);
	VariantChangeType(&tvPID,&PID,0,VT_I4);
//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
	if (m_useADO!=PCDMADO_NONE)
	{
		Fields			*pFields;
		Field			*pField;
		Field20			*pField20;
		long tCnt;
		HRESULT hr;
		TCHAR tFldName[10];

		VariantInit(Value);
		m_RS->get_Fields(&pFields);
		hr=pFields->get_Count(&tCnt);
		wsprintf(tFldName,TEXT("Fld%d"),tvPID.lVal);
		if (m_useADO==PCDMADO_V3)
		{
			hr=pFields->get_Item(_variant_t(tFldName),&pField);
			hr=pField->get_Value(Value);
		}
		else
		{
#ifdef UNDER_CE
			hr=pFields->get_Item(_variant_t(tFldName),(struct Field **)&pField20);
#else
			hr=pFields->get_Item(_variant_t(tFldName),(struct ADOField **)&pField20);
#endif			
			hr=pField20->get_Value(Value);
		}
		return hr;
	}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
CEPROPVAL	*Flds=NULL;

	if (m_rFields==NULL || m_rfldCnt==0) return S_FALSE; 
	for (int i=0;i<m_rfldCnt;i++)
	{
		if (HIWORD(m_rFields[i].propid)==tvPID.lVal)
		{
			Flds=&m_rFields[i];
			break;
		}
	}
	if (Flds==NULL) return S_FALSE;

	Value->vt=VT_BSTR;
	Value->bstrVal=SysAllocString((TCHAR*)Flds->val.lpwstr);
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}

//<BOOK_ADDON STEP5 Chapter 8.4.2> *********************************
STDMETHODIMP CPCDMAccessDB::Execute(BSTR FileLocation, BSTR Command)
{
//#ifdef UNDER_CE	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	if (m_useADO!=PCDMADO_NONE)
	{
		HRESULT hr=m_RS->Open(_variant_t(Command),_variant_t(FileLocation),adOpenForwardOnly , adLockReadOnly , 1);
		return hr;
	}
//#endif	// <BOOK_DELETED STEP6 Chapter 9.2.3> *****
	return S_OK;
}
//</BOOK_ADDON STEP5 Chapter 8.4.2> *********************************

⌨️ 快捷键说明

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