当读取的m_recordset.GetFieldValue(1,varValue);为空时
使用varValue.m_pstring->GetBuffer(1));就出错
而通过我程序中的对话框,插入空值后,可以读出
急等解决,请高手指教

解决方案 »

  1.   

    判断是否空再处理呀,或者用TRY包起来。
      

  2.   

    先判断GetFieldValue的返回值varValue是不是空
      

  3.   

    m_recordset.GetFieldValue(1,varValue);
    if(!varValue.m_pstring.IsEmpty())
    {
       使用varValue.m_pstring->GetBuffer(1));
    }
      

  4.   

    出错在于你对空值的处理
    应该加上异常处理
    try
    {
      m_recordset.GetFieldValue(1, varValue);
      str = varValue.m_pstring->GetBuffer(1);
    }
    catch (_com_error)
    {
      str = _T("");
    }
      

  5.   

    哎,依然不行.各位有没有做成数据库.在access表中,将一个值置空,看能不能用
    m_recordset.GetFieldValue(1,varValue);
    varValue.m_pstring->GetBuffer(1));
    读出.
    解决不了,很郁闷,请各位多多帮忙.
      

  6.   

    应该是可行的,下面的代码是我在一个应用中测试通过的
    CString CsRecordSet::GetString(LPCTSTR strField)
    {
    CString strValue(_T(""));
    _variant_t varFieldValue;

    if (m_bValid)
    {
    try
    {
    varFieldValue = m_pRecordset->GetCollect(strField);
    switch(varFieldValue.vt) 
    {
    case VT_NULL:
    break;
    case VT_BSTR:
    strValue = varFieldValue.bstrVal;
    break;
    case VT_I2:
    case VT_I4:
    case VT_INT:
    strValue.Format(_T("%d"), varFieldValue.intVal);
    break;
    case VT_UI2:
    case VT_UI4:
    case VT_UINT:
    strValue.Format(_T("%u"), varFieldValue.uintVal);
    break;
    default:
    break;
    }
    }
    catch (_com_error)
    {
    }
    } return strValue;
    }