关于VC6.0通过ODBC访问数据库超长字段的BUG,及解决方法

ckp 2003-12-12 12:27:58
这个BUG是我前几天编写一个对Access数据库进行简单修改时发现的。
前天,我因为要对一个excel文档进行处理,但VC6.0不能通过ODBC对excel 2000(可能是我对VC还不是很了解,也许能对excel 2000能进行处理也说不定)数据源进行处理,我就用Access将excel数据导入,由于这个文档是有关OLAP的元数据处理的,其中有数据描述的字段,其内容很长,我在用VC的ODBC接口函数读取时,发生了数据被截断的错误信息。起先,我以为是缓冲区溢出(我也会犯低级错误^_^),可是,后来在读afxdb.h后,才发现Microsoft在写afxdb.h的时候,主观的认为数据库中的char和varchar字段的默认最大长度为255,其源代码如下:
void AFXAPI RFX_Text(CFieldExchange* pFX, LPCTSTR szName, CString& value,
// Default max length for char and varchar, default datasource type
int nMaxLength = 255(这里), int nColumnType = SQL_VARCHAR, short nScale = 0);
但他们在MSDN中又没有提到这个问题,所以,我认为这是一个软件开发上的BUG。而且,这个BUG会给许多初学VC的开发人员造成错觉,以为是ODBC的问题,或者是
自己的程序写法上问题,其解决办法如下:
在你的数据库类中(如我的数据库类是SheetSet.h)
在数据库类的定义部分,将超长的字段从
RFX_Text(pFX, _T("[Your Table Column Name]"), m_your_Table_Column_Name);
//}}AFX_FIELD_MAP
改为
RFX_Text(pFX, _T("[Your Table Column Name]"), m_your_Table_Column_Name, 1024/*(你的这个超长字段的最大长度)*/);
//}}AFX_FIELD_MAP
也就是说,修改字段的最大长度。
希望以上的一点小经验能对你有所帮助。
...全文
66 4 打赏 收藏 举报
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BoweirrKing 2003-12-17
你上面所说的方法是基于什么原理的?
  • 打赏
  • 举报
回复
dreamfly8848 2003-12-12
学习。
  • 打赏
  • 举报
回复
yifengling0 2003-12-12
学习:)
  • 打赏
  • 举报
回复
ckp 2003-12-12
VC怎样通过ODBC读取Excel 2000文档(和这个帖子有关):
我刚刚才想到,VC怎样读取excel文档,其方法如下:
某个电子表格的部分内容:
A B C
1 Stage DirCode CubeName
2 1 00001 XX总量分析
3 1 00002 XXXX客户分析
4 1 00003 YY客户分析
5 1 00004 ZZ客户分析
6 1 00005 AAAAA分析
7 2 00006 BBBBB分析
8 2 00007 CCCCC分析
9 1 00008 DDDDD分析
10 1 10001 EEEEE分析
你要在excel的“插入”菜单项下选择“名称”,增加你想读入的数据:
名称(Name) 单元格(Range)
-----------------------------------
Stage sheet1!A2:a10
DirCode sheet1!B2:B10
CubeName sheet1!C2:C10
这样一来,VC就可以读到Excel文档了。
顺便说一句,这个问题在MSDN中也没有提到,我感
觉到MSDN写得很粗,大概是赶工期的缘故,我也是
干工程的,不过,我干的是小工程拉,很小很小的。^__^
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库
加入

3968

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2003-12-12 12:27
社区公告
暂无公告