-
问题内容:如何处理ODBC中EXCEL驱动读取EXCEL文件中字段长度大于255字符时出现的"数据截断"问题.
原问题:CRecordset::GetFieldValue()如何完成获得大于255字符串的数据字段?
- 原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=5194713
- 所属论坛:数据库
审核组:VC/MFC
- 提问者:chenhq
解决者:handsomerun
- 感谢:handsomerun
- 关键字:VC/MFC 数据库 EXCEL,ODBC,数据截断
- 答案:
CRecordset rs( &db );
rs.Open( CRecordset::forwardOnly,
_T( "SELECT * FROM SomeTable" ) );
// Create a CDBVariant object to
// store field data
CDBVariant varValue;
// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount( );
while( !rs.IsEOF( ) )
{
for( short index = 0; index < nFields; index++ )
{
rs.GetFieldValue( index, varValue ); //在这里如果某个字符串字段的长度大于255,就只能获得前255个字符??
// do something with varValue
}
rs.MoveNext( );
}
rs.Close( );
db.Close( );
如何解决问题?
如果用DoFieldExchange()
可以通过 RFX_Text(pFX, _T("[d7]"), m_d7,1024);来获得大于255的字段数据!
我现在的现象是:读取EXCEL文件时,如果字符串大于255的数据字段,如果数据记录号在25号以前,无论采用DoFieldExchange()方式读取还是GetFieldValue(column, m_stempSql)都是正确的,如果字段在25记录号以后,确都是错误的。
现在只能怀疑ODBC的EXCEL驱动有问题了?
大家同意吗?
---------------------------------------------------------------
http://search.support.microsoft.com/kb/189897/zh-cn
这个看过吗,不知道对你有没有帮助
谢谢handsomerun(毛毛)
果然是EXCEL驱动问题,在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel中TypeGuessRows的数据是25,所以我的程序在读取前25行数据不存在数据截断的问题.如果将他设置为0,所有问题都不存在了
- 评价:
给朵鲜花(14)
扔个鸡蛋(3)