📄 pcdmaccessdb.h
字号:
// PCDMAccessDB.h : Declaration of the CPCDMAccessDB
#ifndef __PCDMACCESSDB_H_
#define __PCDMACCESSDB_H_
#include "resource.h" // main symbols
// <BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************
#include <comdef.h>
// <BOOK_ADDON_STEP6 Chapter 9.2.3> **************************************************
#ifndef UNDER_CE
#include <rapi.h>
#include <adoint.h>
typedef Field Field20;
#else
// </BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
#include <adoce30.h>
#ifndef __IADOCEField_INTERFACE_DEFINED__
#define __IADOCEField_INTERFACE_DEFINED__
/****************************************
* Generated header for interface: IADOCEField
* at Fri Feb 27 14:49:21 1998
* using MIDL 3.01.75
****************************************/
/* [unique][dual][uuid][object] */
EXTERN_C const IID IID_IADOCEField;
#if defined(__cplusplus) && !defined(CINTERFACE)
interface DECLSPEC_UUID("4BEB93D7-28D8-11D1-8321-00A024A88110")
Field20 : public IDispatch
{
public:
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_ActualSize(
/* [retval][out] */ long __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Attributes(
/* [retval][out] */ long __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_DefinedSize(
/* [retval][out] */ long __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
/* [retval][out] */ BSTR __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Type(
/* [retval][out] */ DataTypeEnum __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_UnderlyingValue(
/* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0;
virtual /* [id][propget] */ HRESULT STDMETHODCALLTYPE get_Value(
/* [retval][out] */ VARIANT __RPC_FAR *pVal) = 0;
virtual /* [id][propput] */ HRESULT STDMETHODCALLTYPE put_Value(
/* [in] */ VARIANT newVal) = 0;
};
#else /* C style interface */
typedef struct IADOCEFieldVtbl
{
BEGIN_INTERFACE
HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
IADOCEField __RPC_FAR * This,
/* [in] */ REFIID riid,
/* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
IADOCEField __RPC_FAR * This);
ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
IADOCEField __RPC_FAR * This);
HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
IADOCEField __RPC_FAR * This,
/* [out] */ UINT __RPC_FAR *pctinfo);
HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
IADOCEField __RPC_FAR * This,
/* [in] */ UINT iTInfo,
/* [in] */ LCID lcid,
/* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
IADOCEField __RPC_FAR * This,
/* [in] */ REFIID riid,
/* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
/* [in] */ UINT cNames,
/* [in] */ LCID lcid,
/* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
/* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
IADOCEField __RPC_FAR * This,
/* [in] */ DISPID dispIdMember,
/* [in] */ REFIID riid,
/* [in] */ LCID lcid,
/* [in] */ WORD wFlags,
/* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
/* [out] */ VARIANT __RPC_FAR *pVarResult,
/* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
/* [out] */ UINT __RPC_FAR *puArgErr);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ActualSize )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Attributes )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DefinedSize )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ BSTR __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Type )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ DataTypeEnum __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_UnderlyingValue )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ VARIANT __RPC_FAR *pVal);
/* [id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Value )(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ VARIANT __RPC_FAR *pVal);
/* [id][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Value )(
IADOCEField __RPC_FAR * This,
/* [in] */ VARIANT newVal);
END_INTERFACE
} IADOCEFieldVtbl;
interface IADOCEField
{
CONST_VTBL struct IADOCEFieldVtbl __RPC_FAR *lpVtbl;
};
#ifdef COBJMACROS
#define IADOCEField_QueryInterface(This,riid,ppvObject) \
(This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
#define IADOCEField_AddRef(This) \
(This)->lpVtbl -> AddRef(This)
#define IADOCEField_Release(This) \
(This)->lpVtbl -> Release(This)
#define IADOCEField_GetTypeInfoCount(This,pctinfo) \
(This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
#define IADOCEField_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
(This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
#define IADOCEField_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
(This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#define IADOCEField_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
(This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#define IADOCEField_get_ActualSize(This,pVal) \
(This)->lpVtbl -> get_ActualSize(This,pVal)
#define IADOCEField_get_Attributes(This,pVal) \
(This)->lpVtbl -> get_Attributes(This,pVal)
#define IADOCEField_get_DefinedSize(This,pVal) \
(This)->lpVtbl -> get_DefinedSize(This,pVal)
#define IADOCEField_get_Name(This,pVal) \
(This)->lpVtbl -> get_Name(This,pVal)
#define IADOCEField_get_Type(This,pVal) \
(This)->lpVtbl -> get_Type(This,pVal)
#define IADOCEField_get_UnderlyingValue(This,pVal) \
(This)->lpVtbl -> get_UnderlyingValue(This,pVal)
#define IADOCEField_get_Value(This,pVal) \
(This)->lpVtbl -> get_Value(This,pVal)
#define IADOCEField_put_Value(This,newVal) \
(This)->lpVtbl -> put_Value(This,newVal)
#endif /* COBJMACROS */
#endif /* C style interface */
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_ActualSize_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_ActualSize_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Attributes_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_Attributes_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_DefinedSize_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ long __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_DefinedSize_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Name_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ BSTR __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_Name_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Type_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ DataTypeEnum __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_Type_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_UnderlyingValue_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ VARIANT __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_UnderlyingValue_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propget] */ HRESULT STDMETHODCALLTYPE IADOCEField_get_Value_Proxy(
IADOCEField __RPC_FAR * This,
/* [retval][out] */ VARIANT __RPC_FAR *pVal);
void __RPC_STUB IADOCEField_get_Value_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
/* [id][propput] */ HRESULT STDMETHODCALLTYPE IADOCEField_put_Value_Proxy(
IADOCEField __RPC_FAR * This,
/* [in] */ VARIANT newVal);
void __RPC_STUB IADOCEField_put_Value_Stub(
IRpcStubBuffer *This,
IRpcChannelBuffer *_pRpcChannelBuffer,
PRPC_MESSAGE _pRpcMessage,
DWORD *_pdwStubPhase);
#endif /* __IADOCEField_INTERFACE_DEFINED__ */
#endif // UNDERCE
#define PCDMADO_NONE 0
#define PCDMADO_OLEDB 1
#define PCDMADO_V2 2
#define PCDMADO_V3 3
// </BOOK_ADDON STEP5 Chapter 8.4.2> **************************************************
/////////////////////////////////////////////////////////////////////////////
// CPCDMAccessDB
class ATL_NO_VTABLE CPCDMAccessDB :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CPCDMAccessDB, &CLSID_PCDMAccessDB>,
public IDispatchImpl<IPCDMAccessDB, &IID_IPCDMAccessDB, &LIBID_PCDMDLLLib>
{
public:
CPCDMAccessDB()
{
// <BOOK ADDON STEP4 Chapter 8.3.3> **************************************************
//#ifdef UNDER_CE // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
m_curRec=0;
m_rFields=NULL;
//#endif // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
m_wfldCnt=0;
m_rfldCnt=0;
m_SortCnt=0;
m_dwIndex=0;
VariantInit(&m_ActPID);
// <BOOK ADDON STEP4 Chapter 8.3.3> **************************************************
// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
//#ifdef UNDER_CE // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
CLSID tClsid;
HRESULT hr;
m_RS=NULL;
const IID IID__Recordset = {0x113033F6,0xF682,0x11D2,{0xBB,0x62,0x00,0xC0,0x4F,0x68,0x0A,0xCC}};
// <BOOK Necessary due to Compatibility Wrapper in ADOCE30.h>
const IID IID__Recordset20 = {0x4BEB93D5,0x28D8,0x11D1,{0x83,0x21,0x00,0xA0,0x24,0xA8,0x81,0x10}};
// </BOOK Necessary due to Compatibility Wrapper in ADOCE30.h>
TCHAR tsADOCE30RSProgID[]= TEXT("ADOCE.Recordset.3.0");
TCHAR tsADOCE20RSProgID[]= TEXT("ADOCE.Recordset.1");
hr = CLSIDFromProgID( tsADOCE30RSProgID, &tClsid );
if (!FAILED(hr))
{ // ADOCE3.0 found !!
hr=CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER,
IID__Recordset,(LPVOID *)&m_RS);
m_useADO=PCDMADO_V3;
}
else
{ // Is at ADOCE2.0 there ?
hr=CLSIDFromProgID( tsADOCE20RSProgID, &tClsid );
if (!FAILED(hr))
{
hr=CoCreateInstance(tClsid,NULL,CLSCTX_INPROC_SERVER,
IID__Recordset20 ,(LPVOID *)&m_RS);
m_useADO=PCDMADO_V2;
}
}
if (FAILED(hr)) m_useADO=PCDMADO_NONE;
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
// <BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
#ifndef UNDER_CE
CeRapiInit ();
#endif
// </BOOK_ADDON STEP6 Chapter 9.2.3> **************************************************
}
// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
~CPCDMAccessDB()
{
CloseTable(0L);
//#ifdef UNDER_CE
if (m_RS!=NULL)
m_RS->Release();
//#endif
}
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
DECLARE_REGISTRY_RESOURCEID(IDR_PCDMACCESSDB)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CPCDMAccessDB)
COM_INTERFACE_ENTRY(IPCDMAccessDB)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()
// IPCDMAccessDB
public:
STDMETHOD(Execute)(BSTR FileLocation, BSTR Command);
STDMETHOD(GetValue)(VARIANT PID, /*[out, retval]*/ VARIANT *Value);
STDMETHOD(ReadRecord)(long DBHandle, /*[out,retval]*/ long * Count);
STDMETHOD(WriteRecord)(long DBHandle);
STDMETHOD(SetValue)(VARIANT PID, VARIANT Value);
STDMETHOD(AddNewRecord)(long Handle);
STDMETHOD(FindRecord)(long Handle,VARIANT PID, VARIANT Value);
STDMETHOD(MovePrevious)(long Handle);
STDMETHOD(MoveNext)(long Handle);
STDMETHOD(MoveLast)(long Handle);
STDMETHOD(MoveFirst)(long Handle);
STDMETHOD(CloseTable)(long Handle);
STDMETHOD(OpenTable)(BSTR FileLocation, BSTR Name, VARIANT PID, /*[out,retval]*/ long * Handle);
STDMETHOD(CreateTable)(BSTR FileLocation, BSTR Name);
STDMETHOD(AddProperty)(VARIANT PID, long Sorted);
// <BOOK_ADDON STEP4 Chapter 8.3.3> ******************************************
private:
//#ifdef UNDER_CE // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
SORTORDERSPEC m_DBSortOrder[10];
CEOID m_curRec;
CEPROPVAL m_wFields[10];
CEPROPVAL *m_rFields;
//#endif // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
BSTR m_BStr[10];
VARIANT m_ActPID;
WORD m_SortCnt;
DWORD m_dwIndex;
WORD m_rfldCnt,m_wfldCnt;
// <BOOK_ADDON STEP4 Chapter 8.3.3> ******************************************
// <BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
WORD m_useADO;
//#ifdef UNDER_CE // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
_Recordset *m_RS;
//#endif // <BOOK_DELETE STEP6 Chapter 9.2.3> ***************************
// </BOOK ADDON STEP5 Chapter 8.4.2> **************************************************
};
#endif //__PCDMACCESSDB_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -