CDatabase*  m_database;
CXXXRecordSet* m_pSet; m_pSet=new CXXXRecordSet(m_database);
CString str ="select sum(MONEY) as vsum from XXX";
m_database->ExecuteSQL(str);这样能否获取 MONEY列的和?如果可以又该如何把 vsum里的值取出来?谢谢大家!

解决方案 »

  1.   

    CRecordset::GetFieldValueSee Also
    CRecordset Overview | Class Members | Hierarchy Chart | CRecordset::DoFieldExchange | CRecordset::DoBulkFieldExchange | CRecordset::GetODBCFieldCount | CRecordset::GetODBCFieldInfo | CRecordset::SetRowsetCursorPosition
    Retrieves field data in the current record.void GetFieldValue(
       LPCTSTR lpszName,
       CDBVariant& varValue,
       short nFieldType = DEFAULT_FIELD_TYPE 
    );
    void GetFieldValue(
       short nIndex,
       CDBVariant& varValue,
       short nFieldType = DEFAULT_FIELD_TYPE 
    );
    void GetFieldValue(
       short nIndex,
       CStringA& strValue 
    );
    void GetFieldValue(
       short nIndex,
       CStringW& strValue 
    );
      

  2.   

    The following sample code illustrates calls to GetFieldValue for a recordset object declared directly from CRecordset.// Create and open a database object;
    // do not load the cursor library
    CDatabase db;
    db.OpenEx( NULL, CDatabase::forceOdbcDialog );// Create and open a recordset object
    // directly from CRecordset. Note that a
    // table must exist in a connected database.
    // Use forwardOnly type recordset for best
    // performance, since only MoveNext is required
    CRecordset rs( &db );
    rs.Open( CRecordset::forwardOnly,
             _T( "SELECT * FROM SomeTable" ) );// Create a CDBVariant object to
    // store field data
    CDBVariant varValue;// Loop through the recordset,
    // using GetFieldValue and
    // GetODBCFieldCount to retrieve
    // data in all columns
    short nFields = rs.GetODBCFieldCount( );
    while( !rs.IsEOF( ) )
    {
       for( short index = 0; index < nFields; index++ )
       {
          rs.GetFieldValue( index, varValue );
          // do something with varValue
       }
       rs.MoveNext( );
    }rs.Close( );
    db.Close( );
      

  3.   

    列 MONEY 是货币类型
    CDatabase*  m_database;
    CXXXRecordSet* m_pSet; m_pSet=new CXXXRecordSet(m_database);
    CString str ="select sum(MONEY) as vsum from XXX";
    m_pSet->Open(CRecordset::dynaset,str); // 这里出来了数据被截断的错误!!怎么回事呢
      

  4.   

    字段名是Money?
    CString str ="select sum([MONEY]) as vsum from XXX";
    取Vsum就是了
      

  5.   

    货币不行呀,改成数字类型的就可以,货币的不行
    货币类型的映射过来的时候是CString类型,怎么解决呢?
      

  6.   

    货币类型可以sum啊。。你把字段名改一下试试看,不用money,改成moneys。。
      

  7.   

    带小数的都不行,这是怎么回事呀?有小数的sum的时候会出现数据截断,这是怎么回事呀?如何解决呢?
      

  8.   

    不会吧。。 我这里也有小数可是确工作得很好啊。。你把那条SQL语句直接放在access里面执行,可以得到正确结果吗??
      

  9.   

    在ACCESS里可以直接得到正确的结果,可是在VC里就出现了数据被截断,不知道是怎么回事呀!
      

  10.   

    在VC中查询access的‘查询’可以吗?
    比如:select * from [查询1]
    试试
      

  11.   

    查询也不行,现在什么都可以,就是带小数的不能相加求和,这个很郁闷。select sum(MONEY) 整数就可以,但是带小数的就出现数据被截断!MONEY 是双精度数字!