Recordset对象接口Open()的语法
编号:QA003862
建立日期: 2001年2月11日 最后修改日期:2001年2月11日
所属类别:
yun:
操作系统:WIN98
编程工具:VC++6
问题:我在开发ADO数据库,当用到Recordset对象接口Open()时,碰到有个例程,其写法是:
m_pUserSet->Open("select * from Data", m_pConnection.GetInterfacePtr(),
adOpenDynamic, adLockOptimistic, adCmdText); (能正确运行)
我觉得与Open()语法有些不符
HRESULT Open( const _variant_t & Source, const _variant_t &
ActiveConnection, enum CursorTypeEnum CursorType, enum LockTypeEnum
LockType, long Options );
Source要求参数是const _variant_t & ,而例程是字符串 "select * from Data"?
ActiveConnection要求参数是const _variant_t & ,而例程是指针型返回值m_pConnection.GetInterfacePtr(),
为什么不直接是m_pConnection?
GetInterfacePtr()函数返回接口的指针,但它的具体使用原理我不懂,请教先生?
回答:
ADO是具有Automation接口的COM. Automation接口参数的数据类型是一个VARIANT structure:
typedef struct tagVARIANT {
VARTYPE vt;
unsigned short wReserved1;
unsigned short wReserved2;
unsigned short wReserved3;
union {
unsigned char bVal; // VT_UI1.
short iVal; // VT_I2 .
long lVal; // VT_I4 .
float fltVal; // VT_R4 .
double dblVal; // VT_R8 .
VARIANT_BOOL boolVal; // VT_BOOL.
SCODE scode; // VT_ERROR.
CY cyVal; // VT_CY .
DATE date; // VT_DATE.
BSTR bstrVal; // VT_BSTR.
IUnknown FAR* punkVal; // VT_UNKNOWN.
IDispatch FAR* pdispVal; // VT_DISPATCH.
SAFEARRAY FAR* parray; // VT_ARRAY|*.
unsigned char FAR* pbVal; // VT_BYREF|VT_UI1.
short FAR* piVal; // VT_BYREF|VT_I2.
long FAR* plVal; // VT_BYREF|VT_I4.
float FAR* pfltVal; // VT_BYREF|VT_R4.
double FAR* pdblVal; // VT_BYREF|VT_R8.
VARIANT_BOOL FAR* pboolVal; // VT_BYREF|VT_BOOL.
SCODE FAR* pscode; // VT_BYREF|VT_ERROR.
CY FAR* pcyVal; // VT_BYREF|VT_CY.
DATE FAR* pdate; // VT_BYREF|VT_DATE.
BSTR FAR* pbstrVal; // VT_BYREF|VT_BSTR.
IUnknown FAR* FAR* ppunkVal; // VT_BYREF|VT_UNKNOWN.
IDispatch FAR* FAR* ppdispVal; // VT_BYREF|VT_DISPATCH.
SAFEARRAY FAR* FAR* pparray; // VT_ARRAY|*.
VARIANT FAR* pvarVal; // VT_BYREF|VT_VARIANT.
void FAR* byref; // Generic ByRef.
};
};
_variant_t 是一个封装了VARIANT的类。通过成员函数处理VARIANT数据。
关于其他问题找本COM或ActiveX的书看看。
相关问题:
QA002234 "在VC中如何使用VARIANT型变量"
此问题由Adam回答。
| |
|
|
| |
|
|