CRecordSet怎么获取一行数据 
   获取正行数据,转换为数组。对数组进行操作

解决方案 »

  1.   

    CRecordset::MoveFirst在记录集中的第一条记录确定当前记录。 首先测试 IsBOF。
      

  2.   

    参考下这个函数吧!!
    GetData(char *strSql,vector<string> &value)
    {
    if (NULL == m_pConnection)//判断数据库连接
    if (!OpenDBLink())
    return false;
    char szBuf[KB];
    _variant_t iIndex;
    _variant_t strValue;
    DataTypeEnum dte;
    long iCount;
    int i;
    try{
    m_pRDSet->Open(_variant_t(strSql), 
    _variant_t(m_pConnection, true), 
    adOpenKeyset, 
    adLockOptimistic, 
    adCmdText);//打开记录集
    }
    catch(_com_error &err){
    m_sErrDesc = err.ErrorMessage();
    CloseDBLink();
    return false;
    }
    if (m_pRDSet->EndOfFile){
    m_pRDSet->Close();
    return false;
    }
    iCount = m_pRDSet->Fields->Count;
    for( i = 0; i < iCount; i++ ){
    iIndex = ( short )i;
    strValue = m_pRDSet->GetFields( )->GetItem( iIndex )->GetValue( );
    dte = m_pRDSet->GetFields( )->GetItem( &iIndex )->GetType( );
    if( adDouble == dte ){
    if (VT_NULL == strValue.vt)
    sprintf( szBuf, "%.2f", 0);
    else
    sprintf(szBuf, "%.2f", strValue.dblVal);
    value.push_back( szBuf );
    }
    else if ( adSingle == dte ){
    if (VT_NULL == strValue.vt)
    sprintf(szBuf, "%.2f", 0);
    else
    sprintf(szBuf, "%.2f", strValue.fltVal);
    value.push_back( szBuf );
    }
    else if ( adChar == dte || adVarWChar == dte || adVarChar == dte ){
    if (VT_NULL == strValue.vt)
    value.push_back("");
    else
    value.push_back((LPCSTR)(_bstr_t)strValue);
    }
    else if (adInteger == dte){
    if (VT_NULL == strValue.vt)
    sprintf(szBuf, "%d", 0);
    else
    sprintf(szBuf, "%d", strValue.iVal);
    value.push_back(szBuf);
    }
    else if (adNumeric == dte || adVarNumeric){
    if (VT_NULL == strValue.vt)
    value.push_back("");
    else
    sprintf( szBuf, "%s", (LPCSTR)(_bstr_t)strValue);
    value.push_back( szBuf );
    }
    else if (adEmpty == dte)
    value.push_back("");
    }
    m_pRDSet->Close( );
    return true;
    }bool MyDb::WriteData(char *strSql){
    if (NULL == m_pConnection)
    if (!OpenDBLink())
    return false;
    try{
    m_pConnection->Execute(_bstr_t(strSql), NULL, adExecuteNoRecords);
    }
    catch(_com_error &err){
    m_sErrDesc = err.ErrorMessage();
    CloseDBLink();
    return false;
    }
    return true;
    }