我在VC中要调用CRecordset这个类,设一对象 m_set,可m_set->后出现的成员变量中并没有m_nfields,这个变量出现,原语句如下:
for(i=0; i < m_set->m_nFields;i++)运行时总是出现如下warning:E:\VCIDS\DM_IDS\DM_IDSView.cpp(91) : warning C4018: '<' : signed/unsigned mismatch希望大家给予指导!!!不胜感激!

解决方案 »

  1.   

    for(int i=0; i < m_set->m_nFields;i++)
      

  2.   

    是不是编译器在编译的时候i<m_set->m_nFields这个语句出问题了。
    改成i<(m_set->m_nFields)试一试,
    你把整个函数贴上来看看
      

  3.   

    可以试一试
    foe(int i=0;i<(m_set->GetFieldCount());i++)
      

  4.   

    关键是就没有m_nFields这个成员变量
      

  5.   

    因为就没有m_nFields这个成员变量
    所以我给你使用GetFieldCount()函数,它返回当前记录集的字段个数,注意m_set是指向CDaoRecordset的指针.
      

  6.   

    也没有GETFieldCount()这个成员涵数呀
      

  7.   

    你能不能给出完整的程序段,你的m_set是不是自定义的类从CDaoRecordset派生的,刚才的方法不行是编译不通过还是逻辑错误?????
      

  8.   

    void CDM_IDSView::OnInitialUpdate()
    {
    CListView::OnInitialUpdate();
    // TODO: You may populate your ListView with items by directly accessing
    //  its list control through a call to GetListCtrl().
    if(m_set==NULL)
    {
    AfxMessageBox("尚未初始化记录集!");
    return;
    }
    //如果记录集尚未被打开,则打开数据库:
        if(!m_set->IsOpen())
    {
    m_set->Open();
    }
    //1.添加列:
    short i,j;
    CODBCFieldInfo Fi;
    CString tmp;
    LV_COLUMN lc;
    lc.mask=LVCF_FMT|LVCF_WIDTH|LVCF_TEXT|LVCF_SUBITEM;
    for(i=0; i < (m_set->m_nFields);i++)
    {
    //读取记录集的字段信息:
    m_set->GetODBCFieldInfo(i,Fi);
    lc.iSubItem=i;
    lc.fmt=LVCFMT_CENTER;
    lc.cx=Fi.m_strName.GetLength()*10 +16;
    lc.pszText=Fi.m_strName .GetBuffer(Fi.m_strName.GetLength());
    GetListCtrl().InsertColumn (i,&lc);
    }
    //2.添加行:
    LV_ITEM Item;
    CString str;
    CDBVariant var;
    i=0;
    if(m_set->IsBOF())
    {
    AfxMessageBox("当前记录集没有记录!");
    return;
    }
    //将指针移向第一个记录,开始读取数据:
    m_set->MoveFirst();
    //在指针移向最后一个记录之前,不停地读取数据:
    while(m_set->IsBOF ()==0)
    {
    Item.mask=LVIF_TEXT;
    //第i行:
    Item.iItem=i;
    //第I列:
    Item.iSubItem=0;
    //读取记录的第一个字段:
    m_set->GetFieldValue((short)0,str);
    Item.pszText=str.GetBuffer (str.GetLength ());
    m_List->InsertItem(&Item);
    //其它各列:
    for(j=1;j < (m_set->GetF
    m_nFields);j++)
    {
    //读取记录的其它字段:
    m_set->GetFieldValue ((short)j,str);
    m_List->SetItemText(i,j,str.GetBuffer (str.GetLength ()));
    }
    m_set->MoveNext();
    i++;//计数器;
    }
    }
      

  9.   

    不好意思,我刚才是按CDaoRecordset给你解答的,而你的用的是CRecordset,我是在网吧上网的,明天我在给你答复吧,不过你可以试试用Dao数据库.
      

  10.   

    m_set有没有GetFieldsCount()函数,或相似的函数????
      

  11.   

    木木你好:)没关系,我用的是ODBC:)明天看你的回复
      

  12.   

    注意:rs为CRecordSet 的对象,而不是指针。
    下面的程序来自MFC类库手册,应该没问题
    short nFields = rs.GetODBCFieldCount( );
    while( !rs.IsEOF( ) )
    {
      for( short index = 0; index < nFields; index++ ) 
       { 
          rs.GetFieldValue( index, varValue );    // 对varValue作某些操作。  
        }
      rs.MoveNext( );
     }
    rs.Close( );
    db.Close( );
      

  13.   

    在本程序中,m_set为指向记录集对象的指针,