热情软件屋

 

如何将COleVariant型转换为CString或其他数据类型


编号:QA002411
建立日期: 2000年1月9日 最后修改日期:2001年10月9日
所属类别:

刘海河:
    编程工具: VC++6.0
    操作系统: Win9X/NT
    本人是一个新手,想提一个幼稚的问题:在利用MFC的CRecordSet类进行数据库编程时,取得字段内容后(COleVariant型),如何将之转换为CString或其他数据类型?

回答:

    COleVariant 类通逢装了 VARIANT 结构。实际的数据就在 VARIANT 结构中。
    使用 COleVariant 的两个操作
    operator LPCVARIANT
     Converts a COleVariant value into an LPCVARIANT.
    operator LPVARIANT
     Converts a COleVariant object into an LPVARIANT.
    可以得到 VARIANT 结构。其区别是,前者是个拷贝操作,将 VARIANT 结构的内容拷贝到目标中去,后者仅仅返回
    VARIANT 结构的指针。不管那种情况,现在我们都能访问到 VARIANT 所包含的数据了。余下的问题是如何解释数
    据内容。
    VARIANT 结构包含两部分。其一是 VARTYPE 型的成员变量vt;其二是个联合类型,这个联合包含了VC常用的几乎所有类型。因为联合用的是相同的存储空间,因此对联合的内容的解释依赖于 vt。
    例如,
    若 vt 的值是 VT_UI2, 说明该联合被解释为short int. 并使用成员变量名 iVal。
    若 vt 的的值是 VT_BSTR,说明该联合被解释为 BSTR 类型。并使用成员变量名 bstrVal。
    若 vt 的的值是 VT_BSTR|VT_BYREF,说明该联合被解释为BSTR 型指针。并使用成员变量名 pbstrVal。
    (其他详见 VARIANT 的联机帮助)
    *********************************
    若从数据库返回的是简单类型,如 short, long, 等,则直接引用既可。(主持人注:COleVariant类重载了“=”操作符,所以常用类型可以直接转换)若返回的是字符串类型,则有可能是 bstrVal 或pbstrVal。依赖于数据库服务程序。 BSTR 实际上就是个unicode 字符串,CString 的构造函数和赋值操作都能直接识别这一类型。
    
    AndySun问:
    VARIANT结构的vt成员可以为值VT_DECIMAL,当然,这个值在MSDN的帮助中似乎没有,但在VARIANT定义的源文件中确实有它的定义,它是在wtypes.h文件中定义的。但我不明白怎样将VT_DECIMAL的数据转换成常用的C数据类型,更想知道VT_DECIMAL中究竟存放的是一个怎样的数据,应怎样将这个数据显示出来。谢谢!
    李海答:你可以使用COleVariant的ChangeType函数(相当于API函数VariantChangeType)将VT_DECIMAL转换为其他常用类型。

此问题由曾侃回答。

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

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