CSDN=>FAQ=>FAQ 展示
  • 问题内容:如何处理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)
相关FAQ
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo