📄 subject_29918.htm
字号:
<p>
序号:29918 发表者:金枪鱼 发表日期:2003-02-18 18:52:42
<br>主题:ACCESS数据库中长文本数据字段的问题
<br>内容:Access中“文本”最多接受255个字符。<BR>说明中说使用“备注”类型可以接受较长的字符,但我使用的是ODBC。测试表名字符串长度超过250个即出错!!!<BR><BR>请高手指点这怎么处理?<BR>是否需要设置为OLE对象字段,按照大型二进制数据进行处理。<BR>但问题:如果使用CLongBinary作数据交换,怎样将CString变量拷贝到HGLOBAL全局内存中。如果使用CByteArray作数据交换,又增养实现CString变量和CByteArray变量之间的内容交换。<BR><BR>我用pRs->m_Other_Memo.RemoveAll();<BR>pRs->m_Other_Memo.SetSize(m_strComment.GetLength());<BR>int l=0;<BR>for(l=0;l<m_strComment.GetLength();l++)<BR>{<BR>pRs->m_Other_Memo.SetAt(l,m_strComment.GetAt(l));<BR>}<BR>pRs->SetFieldDirty(&pRs->m_Other_Memo);<BR>pRs->SetFieldNull(&pRs->m_Other_Memo,FALSE);<BR>其中:pRs->m_Other_Memo是CByteArray类型,m_strComment是CString变量。<BR>我的目的是将CStrng变量m_strComment记录的长文本记录到数据的Other_memo字段(记录集)。<BR>但测试表名也只能处理不超过250个字符的文本。<BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:tjhe 回复日期:2003-02-18 19:55:16
<br>内容:这个问题可采用"备注"类型,不过对生成的CRecordSet派生类要进行修改,问题在于:<BR>void RFX_Text( CFieldExchange* pFX, const char* szName, CString& value, int nMaxLength = 255, int nColumnType = SQL_VARCHAR, short nScale = 0 );<BR><BR><BR>解决办法:<BR>假设表TabABC中有一"备注"类型字段名为comment,在VC中采用ODBC方式生成对应的CRecordSet派生类:CTabABCSet:<BR>1.头文件中大致如:<BR>class CTabABCSet : public CRecordSet<BR>{<BR>....<BR>// Field/Param Data<BR> //{{AFX_FIELD(CQuestionSet, CRecordset)<BR> ......<BR> CString m_comment;<BR> ......<BR> //}}AFX_FIELD<BR>.....<BR><BR>头文件不用修改。<BR><BR>2.实现文件cpp中要修改如下部分:<BR>void CTabABCSet::DoFieldExchange(CFieldExchange* pFX)<BR>{<BR> //{{AFX_FIELD_MAP(CQuestionSet)<BR> pFX->SetFieldType(CFieldExchange::outputColumn);<BR> .........<BR> RFX_Text(pFX, _T("[comment]"), m_comment,20000); //注意此句后的20000表明该字段可以达到20000个字符(可根据需要自定义,不超过65536)<BR> .......<BR> //}}AFX_FIELD_MAP<BR>}<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:金枪鱼 回复日期:2003-02-18 20:09:47
<br>内容:原来是缺省的DoFieldExchange函数使用了RFX_Text()函数的缺省参数导致的问题,我原想这些自动生产的代码不用管的,没有仔细研究,菜!<BR><BR>万分感谢tjhe的指点。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:tjhe 回复日期:2003-02-18 20:36:19
<br>内容:这个问题也曾困扰过我,花了很多时间才找到原因,最初我的想法同你一样,以为自动生成的代码不用管,经常忽略。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -