MFC + ODBC数据库程序中,由于表中字段有点多,故使用:
for(int i=0; i<pSet->GetODBCFieldCount(); i++)
{
  pSet->GetFieldValue(i,variant);
  
  // 插入列表控件
}但才第一个字段也就是i==0时,GetFieldValue()就抛出错误来“无任何类型可匹配”,跟踪到GetDefaultFieldType(short nSqlType)中,居然没有任何类型可匹配导至ASSERT(FALSE),DBCORE.CPP Line 4290,我的字段类型为nvarchar(20),怎么会这样呢?在将字段类型改为char(20)后,GetFieldValue()居然还是抛出错误CDBException,“无效的描述符索引”。请各位帮帮忙,谢谢!

解决方案 »

  1.   

    首先确定pSet得到是否正确,还有就是游标的问题
      

  2.   

    pSet->Open()能正确返回,未移动过记录指针,因为只是做个测试,表中字段又多,所以只录入了一条记录,而且能正确得到第一个学段code的值。上边说错了,i从1开始的,因为用m_ctrList.InsertItem() // 插入第一列的值
    for(int i=1; i<pSet->GetODBCFieldCount(); i++)
    {
      pSet->GetFieldValue(i,variant);        // i从1开始,也就是表中第二个字段name char(20)
      
      // 插入列表控件
    }
      

  3.   

    i从1开始的
    ----------------------------------------------------------
    m_ctrList.InsertItem(i-1,_T(""));你单步到哪个语句有问题?
      

  4.   

    pSet->GetFields()->GetField()->GetValue();试试
      

  5.   

    GetFieldValue()前要确定游标是正确,还有行集要为snapshot
      

  6.   

    还有CRecordset类好像不支持Unicode字符,nchar,nvarchar,ntext等
      

  7.   

    追加40分,求求哪位高人现身指点一下啊!CRecordset类对SQL数据类型的匹配真的不支持unicode吗?什么是“无效的描述符索引”,为什么会产生这种错误呢??
      

  8.   

    我也遇到过这样的问题,被迫全部改ado了,sigh。希望有高手指点一下有没有不改的办法?