for(long i = 0; i < fieldcount ;i ++ )
{

CString s = (CString)(char*)m_pRecordset->Fields->Item[i]->Name; 
m_listctrl.InsertColumn(i,s,LVCFMT_LEFT,50,i);

};

//CString ttt = (CString)(char*)m_pRecordset->Fields->Item[0]->Name; 
//AfxMessageBox(ttt);同样的语句 CString s = (CString)(char*)m_pRecordset->Fields->Item[i]->Name; CString ttt = (CString)(char*)m_pRecordset->Fields->Item[0]->Name; 为什么上面能执行,下面不能执行?

解决方案 »

  1.   

    非常郁闷CString cs = _T("ID");
    _variant_t varValue = m_pRecordset->GetCollect((_variant_t)cs);这样能运行同样的CString cs2= (CString)(char*)m_pRecordset->Fields->Item[0]->Name; 
    _variant_t varValue2 = m_pRecordset->GetCollect((_variant_t)cs2);就不能运行了.
      

  2.   

    最后强转(const char*)或者(const wchar_t*)就好了,这个两个转换_bstr_t里有重装过
    没必要转这么多次
      

  3.   

    不是转不转的问题,转是没问题的     for(long i = 0; i < fieldcount ;i ++ )
        {
        
            CString s = (CString)(char*)m_pRecordset->Fields->Item[i]->Name; //这里运行没问题
            m_listctrl.InsertColumn(i,s,LVCFMT_LEFT,50,i);
            
        };
        
        //CString ttt = (CString)(char*)m_pRecordset->Fields->Item[0]->Name;  //这里运行有问题
        //AfxMessageBox(ttt);
      

  4.   

    什么问题啊,是不是下标越界了,Item是空的
      

  5.   

    这样写
    CString* pArray = new CString[fieldcount];for(long i = 0; i < fieldcount ;i ++ )
    {

    CString s = (CString)(char*)m_pRecordset->Fields->Item[i]->Name; 
    pArray[i] = s;
    m_listctrl.InsertColumn(i,s,LVCFMT_LEFT,50,i);

    };
    不使用 m_pRecordset->Fields->Item[i]->Name
    而直接使用
    pArray [i]
    就没有问题..
      

  6.   

    运行
    long filedcount = 13
    这个错误非常奇怪..我想死的心都有了
      

  7.   

    把一个char*字符串指针强制转换为CString类型是毫无意义而且是错误的。如果不是UNICODE编码,直接赋值即可;否则需要进行编码转换。
      

  8.   


     CString s=CString (m_pRecordset->Fields->Item[i]->Name);   你看如何?
      

  9.   

    小哥,行了,现在不讲这个char* 与cstring .
    我只知道,少写一个转换,我这就报错.现在谈的是 
    遍历一个 fileds
    这个fields居然只能遍历一次,下一次访问就出错