关于TEXT类型的字段在VC6和mysql的访问问题 我在vc6里面通过odbc链接了mysql的一个表,这个表里面有个TEXT类型的字段。每次我在vc程序中得到长度<=255的字符串,一切正常。但当一个记录里,这个字段的字符串大于255,就在执行到crecordset::open 里面报错, 不知道是否可以设置写什么参数。或有什么特别要注意的,在程序里使用text类型数据。谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 255字符以上的文字应该是MEMO类型吧 mySQL是TEXT字段是允许大于255个字节的。可能是你程序问题吧,你是怎么处理的?我使用ODBC API来连接mySQL,没有碰到这样的问题。贴一下相关的代码吧。 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;} MEMO是什么类型,我的mysql数据库里好像没有也不能建立这个字段类型ps:我电脑里装得是mysql-4.1.8-win.zipodbc装得是MyODBC-3.51.11-1-win.msi 其它数据库的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 ); 那么如果要访问超过长度超过255,TEXT类型的数据库字段,有什么好的方法么 用ODBC API吧,比较直观,程序做什么,出了什么问题都知道。 这个...?主要当时偷懒,没有用odbc api。现在项目已经做了80%,再换,比较费时间,时间也不允许阿。stavck能提供一点现成的代码参考一下么?让我了解一下,所需工作量,谢谢。 http://blog.csdn.net/stavck/archive/2006/02/14/598888.aspx 前2天瞎琢磨,终于用RFX_Text_Bulk解决了这个问题。重载了几个函数。anyway,在此谢谢2位前辈(stavck(在河之洲) 和 jiangsheng(蒋晟.Net[MVP]) )指点。 获取了进程的Pid,如何知道这个进程是否还运行着 怎么才能把xls里面的表格内容变成bmp格式? 请教一个关于以位图为背景的问题。 ddraw新手问题`` 从MSDN Library中截下来的程序代码编译时出错,大家帮忙看看吧! 请大家看一段代码?指点一下!~! 怎么Hook不到send函数? 如何获得窗口句柄 请高手帮帮忙,解决VC与TC问题,非常感激! 如何在对话框中点击一个按钮串行化读取一个默认的文件? <求助>关于一本书 請問在VC++中如何實現類似OFFICE一樣的菜單
可能是你程序问题吧,你是怎么处理的?
我使用ODBC API来连接mySQL,没有碰到这样的问题。
贴一下相关的代码吧。
{
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;
}
odbc装得是MyODBC-3.51.11-1-win.msi
看看RFX_Text的声明void RFX_Text( CFieldExchange* pFX, const char* szName, CString& value,
int nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 );
主要当时偷懒,没有用odbc api。现在项目已经做了80%,再换,比较费时间,时间也不允许阿。stavck能提供一点现成的代码参考一下么?让我了解一下,所需工作量,谢谢。