我的程序如下所示:
CString str; CRecordset rs(&db);
str.Format("select * from TEACH_PLAN where EMP_NO=%d",key1);
rs.Open(CRecordset::forwardOnly,str);
if(!rs.IsEOF())
{
  rs.GetFieldValue("EMP_NO",m_personid);//int类型
  rs.GetFieldValue("COURSE_ID",m_courseid);//int类型
  rs.GetFieldValue("TEACH_BEGIN",m_teachbegin);//时间类型CTime
  rs.GetFieldValue("TEACH_OVER",m_teachover);//时间类型CTime
  rs.GetFieldValue("TEACH_DIDIAN",m_didian);//CString类型
  rs.GetFieldValue("TEACH_BANJI",m_banji);//CString类型
  rs.Close();
  UpdateData(FALSE);
}
产生了以下错误:
:\wang\TplanDlg.cpp(426) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 2 from 'int' to 'class CDBVariant &'A reference that is not to 'const' cannot be bound to a non-lvalue
E:\wang\TplanDlg.cpp(427) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 2 from 'int' to 'class CDBVariant &'A reference that is not to 'const' cannot be bound to a non-lvalue
E:\wang\TplanDlg.cpp(428) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 2 from 'class CTime' to 'class CDBVariant &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
E:\wang\TplanDlg.cpp(429) : error C2664: 'void __thiscall CRecordset::GetFieldValue(const char *,class CDBVariant &,short)' : cannot convert parameter 2 from 'class CTime' to 'class CDBVariant &'
        A reference that is not to 'const' cannot be bound to a non-lvalue
Error executing cl.exe.
Creating browse info file...
wang.exe - 4 error(s), 0 warning(s)
我知道GetFieldValue()不能将int和CTime取出赋给相应的控件,那应该怎么取值和赋值呢?我用的是ODBC连接数据库,数据库为Access,请高手指教,谢谢帮助哦!

解决方案 »

  1.   

    你先使用CDBVariant类型的变量把值接出来之后,再赋值给int和COleDateTime类型变量
      

  2.   

    用CDBVariant把数据读出来先。。
    再转换
      

  3.   

    请问一下怎么通过VARIANT将CTime类型转换为CString 类型呢?是CDBVariant的哪个成员变量?
      

  4.   

    用CDBVariant类型接出来之后,再赋值给int和COleDateTime类型变量
    将CTime类型转换为CString 类型可以用format
    CString str.Format("%d-%d-%d",CTime.GetYear(),CTime.GetMonty(),CTime.GetDay());
    应该能转换为CString型
      

  5.   

    to  : laiyiling(爱祖国&爱人民&爱程序&爱CSDN) 
    用CDBVariant类型接出来之后,再赋值给int和COleDateTime类型变量,应该怎么赋值呢?
    CDBVariant var1;
    rs.GetFieldValue("EMP_BIRTHDAY",var1);
    怎么将var1赋值给CTime类型的dlgper.m_birth呢?
      

  6.   

    var1.m_pdate->year
    var1.m_pdate->month
    var1.m_pdate->day取出年,月,日的值分别给dlgper.m_birth里的相应量
      

  7.   

    dlgper.m_birth也是CTime类型,应该怎么年,月,日的值分别给dlgper.m_birth里的相应量呢?能不能把赋值语句给我写出来一下,我不会,马上给分哦
      

  8.   

    如果dlgper.m_birth是CTime型的,直接用dlgper.m_birth=dlgper.m_pdate;
      

  9.   

    上面的赋值语句不行
    CTime temptime(var1.m_pdate->year,var1.m_pdate->month,var1.m_pdate->day,var1.m_pdate->hour,var1.m_pdate->minute,var1.m_pdate->second);
    先构造一个CTime类的临时量再给dlgper.m_birth
    dlgper.m_birth=temptime;
      

  10.   

    谢谢大家的帮助,特别感谢: laiyiling(爱祖国&爱人民&爱程序&爱CSDN) 
    用你上面的方法我的问题解决了,谢谢了!!