热情软件屋

 

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回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio