本帖最后由 landyxin 于 2011-11-14 20:50:14 编辑

解决方案 »

  1.   

    自己先顶一个,百度知道里有一个提问的也遇到过类似问题
    CString str;
    _variant_t var;
    以下代码:

    var=m_pRecordset->GetCollect ("ClientName");
    if(var.vt !=NULL)
      str=(LPCTSTR)var;
    else
      str.Empty ();


    str=(LPCTSTR)m_pRecordset->GetCollect ("ClientName");
    有什么区别
    //////////回答如下////////////////////////////////////////
    1)var.vt != NULL???
    好像应该是var.vt != VT_NULL吧!
    NULL是0,VT_NULL是12)str=(LPCTSTR)m_pRecordset->GetCollect ("ClientName");
    这个编译器能通过吗?楼主是6.0的?能通过?我的是2005的,通不过,反正我从来没用过楼主这样的代码,不管能否通过,正规的代码都是这样的:
    str = (LPCTSTR)(_bstr_t)m_pRecordset->GetCollect(_T("ClientName")); 3)GetCollect可能会从数据库中取到NULL,如果数据库定义是NOT NULL,可以直接使用楼主说的第二种。否则,必须使用第一种,先判断var.vt是否为VT_NULL,如果是的话,就不能再使用第二种方法了,否则会报错。 ---------------------------------------------------
    贴的图不就说明了,如果是VT_NULL, BSTR是无效的,当然也就不能使用了。所以str应该等于EMPTY,并且不能使用第二种方法中的代码,否则会产生运行时错误。2种方法
    并不是没有区别的,而是区别很明显的!!!
    网址:http://zhidao.baidu.com/question/123022941.html
      

  2.   

     v_strTemp=pRst->GetCollect((long)j);//获取第j列内容
    问题出在这里。GetCollect的参数是_bstr_r类型。