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