我在vc6里面通过odbc链接了mysql的一个表,这个表里面有个TEXT类型的字段。每次我在vc程序中得到长度<=255的字符串,一切正常。但当一个记录里,这个字段的字符串大于255,就在执行到crecordset::open 里面报错, 不知道是否可以设置写什么参数。或有什么特别要注意的,在程序里使用text类型数据。谢谢

解决方案 »

  1.   

    255字符以上的文字应该是MEMO类型吧
      

  2.   

    mySQL是TEXT字段是允许大于255个字节的。
    可能是你程序问题吧,你是怎么处理的?
    我使用ODBC API来连接mySQL,没有碰到这样的问题。
    贴一下相关的代码吧。
      

  3.   

    class CXXXRecSet : public CRecordset
    {
    public:
    // Field/Param Data
      //{{AFX_FIELD(CWikiInfoRecSet, CRecordset)
      CString m_out_words;
      ...
      //}}AFX_FIELDpublic:
      bool GetOutStr(CString &sOutWords, CString sSqlStr);
    }//表里out_words是TEXT类型的字段
    void CXXXRecSet::DoFieldExchange(CFieldExchange* pFX)
    {
    //{{AFX_FIELD_MAP(CXXXRecSet)
    pFX->SetFieldType(CFieldExchange::outputColumn);
    RFX_Text(pFX, _T("[out_words]"), m_out_words);
    ...
             //}}AFX_FIELD_MAP
    }/***每次执行到open这句话,如果database表里的字段长度<=255,一切正常。但如果字段长度>255,就在执行到crecordset::open 里面报错(错误对话框描述--unhandled exception in mysvr.exe(kernel32.dll): oxe06d7363:microsoft c++ exception)
    ***/
    bool CXXXRecSet::GetOutWords(CString &sOutWords, CString sSqlStr)
    {
    sSqlStr.Format("select * from wiki_info where word='den';");
    if (!Open(CRecordset::snapshot, sSqlStr))//
    {
    AfxMessageBox("Can't open XXX table");
    return false;
    }

    if(IsEOF())
    {
    Close();
    return false;
    } try
    {
    sOutWords = m_out_words;
    }
    catch(CDBException *e)
    {
    ...
    } Close();

    return true;
    }
      

  4.   

    MEMO是什么类型,我的mysql数据库里好像没有也不能建立这个字段类型ps:我电脑里装得是mysql-4.1.8-win.zip
    odbc装得是MyODBC-3.51.11-1-win.msi
      

  5.   

    其它数据库的Memo类型在mysql里面好像对应的是TEXT……
    看看RFX_Text的声明void RFX_Text( CFieldExchange* pFX, const char* szName, CString& value,
    int nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 ); 
      

  6.   

    那么如果要访问超过长度超过255,TEXT类型的数据库字段,有什么好的方法么
      

  7.   

    用ODBC API吧,比较直观,程序做什么,出了什么问题都知道。
      

  8.   

    这个...?
    主要当时偷懒,没有用odbc api。现在项目已经做了80%,再换,比较费时间,时间也不允许阿。stavck能提供一点现成的代码参考一下么?让我了解一下,所需工作量,谢谢。
      

  9.   

    http://blog.csdn.net/stavck/archive/2006/02/14/598888.aspx
      

  10.   

    前2天瞎琢磨,终于用RFX_Text_Bulk解决了这个问题。重载了几个函数。anyway,在此谢谢2位前辈(stavck(在河之洲) 和 jiangsheng(蒋晟.Net[MVP]) )指点。