MFC ODBC访问SQL Server2000表text类型中出现“数据被截断”错误?try{
literSet.m_pDatabase = &pApp->m_db ;

CString szSQL;
szSQL = _T("SELECT * FROM T_Liter

literSet.Open( AFX_DB_USE_DEFAULT_TYPE, szSQL ); //运行到此处出现“数据被截断”的异常。
literSet.Requery();  int j = 0;
while( !literSet.IsEOF() && j<pTerm->m_T_LiterNum )
{
CRSSItem* pItem = new CRSSItem;
pItem->SetTitle( literSet.m_F_Title );
//pItem->SetLink( _T("http://www.kantianxia.com/mime/100.pdf"));
//pItem->SetDescription( literSet.m_F_Text );
CStdDate* ppd = new CStdDate;
ppd->SetDateTime(literSet.m_F_inserttime);
pItem->SetPubDate( ppd );
pCH->AddItem( pItem ); literSet.MoveNext(); 
j++;
} literSet.Close();
}
catch( CDBException* e)
{
AfxMessageBox(  e->m_strError, MB_ICONEXCLAMATION);
e->Delete();
}

解决方案 »

  1.   

    szSQL = _T("SELECT * FROM T_Liter这句话是否写的不完整啊?
    另外的可能是你某个字段的问题啦: 
     你可以try一下, 找出到底是哪个字段导致的问题:szSQL = _T("SELECT field1, field2, field3.... FROM T_Liter");
    每次执行时多写上个字段, 以确定到底是哪个字段引起的上述错误.GetLastError看看错误原因啊?
      

  2.   

    主要是这个函数:
    void RFX_Text( CFieldExchange* pFX, const char* szName, CString& value, int nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 );注意int nMaxLength = 255如果你不指定长度的话就只有255所以超过255就会出错,使用这个函数时,指定长度,就不会出错了.你只要在你的RFX_Text语句的最后加上一个指定长度值就可以吧
      

  3.   


    隔几天就有人问这个问题。呵呵在你映射的CRecordset类中有一个DoFieldExchange函数,其中是字段和变量的对应关系,在相应的地方写明字段的最大长度就是了
    void CLiterSet::DoFieldExchange(CFieldExchange* pFX)
    {
    //{{AFX_FIELD_MAP(CPageNumSet)
    pFX->SetFieldType(CFieldExchange::outputColumn);
    RFX_Text(pFX, _T("[F_Text]"), m_F_Text, 1000); //写明该字段的可能最大长度,默认的是255。
    RFX_Int(pFX, _T("[PAGEMODE]"), m_PageMode);
    //}}AFX_FIELD_MAP
    }
      

  4.   

    没人再讨论了吗?RFX_Text可以带那个MaxLength,但如果是RFX_LongBinary呢?