上一篇http://blog.csdn.net/liminlu0314/article/details/53433014博文中说到,可以通过配置项来解决mdb文件打开失败的问题。该问题主要是在64位的程序中会出现。仔细查看gdal的代码,发现在源码中已经针对这个问题进行了修改,但是测试发现修改的不彻底。

具体的bug信息参考http://trac.osgeo.org/gdal/ticket/5594。GDAL库中源码片段如下,详见文件ogrodbcdatasource.cpp中的132行左右,位于函数OGRODBCDataSource::OpenMDB中。

/* -------------------------------------------------------------------- */
/*      Initialize based on the DSN.                                    */
/* -------------------------------------------------------------------- */CPLDebug( "ODBC", "EstablishSession(%s)", pszDSN );if( !oSession.EstablishSession( pszDSN, NULL, NULL ) ){int bError = TRUE;if( EQUAL(pszDSN, "") )//注释掉这句话即可{// Trying with another template (#5594)pszDSNStringTemplate = "DRIVER=Microsoft Access Driver (*.mdb, *.accdb);DBQ=%s";CPLFree( pszDSN );pszDSN = (char *) CPLMalloc(strlen(pszNewName)+strlen(pszDSNStringTemplate)+100);snprintf( pszDSN,strlen(pszNewName)+strlen(pszDSNStringTemplate)+100,pszDSNStringTemplate,  pszNewName );CPLDebug( "ODBC", "EstablishSession(%s)", pszDSN );if( oSession.EstablishSession( pszDSN, NULL, NULL ) ){bError = FALSE;}}if( bError ){CPLError( CE_Failure, CPLE_AppDefined,"Unable to initialize ODBC connection to DSN for %s,\n""%s", pszDSN, oSession.GetLastError() );CPLFree( pszDSN );return FALSE;}}

上述代码虽然加了匹配另一个模板,但是有个判断if( EQUAL(pszDSN, "") ),这个判断由于pszDSN通过上面的赋值,肯定是有值的,所以这个判断永远为FALSE,也就是if内的代码不会执行,这样就导致修改了其实和没有修改是一样的。所以为了能够在使用第一个模板失败时,使用第二个模板,需要将if这句话注释掉即可。

修改完重新编译即可。

PS:最后又发现了一个问题,在打开调试开关之后,执行会崩溃,通过调试发现位于该文件的218行的 if( oTableList.GetTables() )中执行失败,函数GetTables的源码如下:

int CPLODBCStatement::GetTables( const char *pszCatalog,const char *pszSchema ){CPLDebug( "ODBC", "CatalogNameL: %s\nSchema name: %s",pszCatalog , pszSchema); //这句出问题了#if (ODBCVER >= 0x0300)if( !m_poSession->IsInTransaction() ){// Commit pending transactions and set to autocommit mode.m_poSession->ClearTransaction();}#endif
......

调试发现在调用CPLDebug函数时,传入的两个参数均为NULL导致CPLDebug函数崩溃,此处加一个判断就可以了。如果不启用调试应该也不会出问题。

GDAL打开mdb文件失败解决方法(二)相关推荐

  1. GDAL打开mdb文件失败解决方法

    使用GDAL打开mdb文件时提示下面错误信息: ERROR 1: Unable to initialize ODBC connection to DSN for DRIVER=Microsoft Ac ...

  2. 计算机无法打开cad文件,无法打开cad文件的解决方法

    从一台电脑做好cad图,拷贝到另一台电脑进行操作,但是却打开不了?原因是两台电脑的cad版本不一样,而你保存的cad文件版本是高版本的,低版本的cad软件自然就打不开高版本的cad文件了.无法打开ca ...

  3. Keil5 生成bin文件失败解决方法

    Keil5 生成bin文件失败解决方法 如何生成.bin文件 打开工程Options for Target -> User 勾选Run #1,并添加如上图代码 "$KARM\ARMCC ...

  4. too many open files(打开的文件过多)解决方法

    too many open files(打开的文件过多)解决方法 参考文章: (1)too many open files(打开的文件过多)解决方法 (2)https://www.cnblogs.co ...

  5. VMware报错“锁定文件失败“解决方法

    VMware报错"锁定文件失败"解决方法 参考文章: (1)VMware报错"锁定文件失败"解决方法 (2)https://www.cnblogs.com/cb ...

  6. Excel 打开 CSV 文件乱码解决方法

    Excel 打开 CSV 文件乱码解决方法 - 膨胀的面包 https://blog.wangtwothree.com/code/157.html 经常接触数据的朋友,可能时不时会遇到这种情况,一份 ...

  7. 【wps】删除文件失败-解决方法

    在wps中想要删除一个pdf文件,一直显示删除文件失败 解决:跳转到wps网盘,也就是电脑中的位置,在这里删除就可以了

  8. linux向iphone传视频文件失败,导入视频文件失败解决方法

    导入视频失败怎么办? 首先,您需要确认一下您导入的视频是不是我们的软件支持的导入格式,您可以在这里 https://miao.wondershare.cn/guide/import-file.html ...

  9. 在STM32CubeMX生成的MDK5工程上添加RT-Thread Nano后双击工程名无法打开.map文件的解决方法

    当我们基于STM32CubeMx完成芯片的基础配置,再将RT-Thread Nano添加到工程编译完成之后.双击工程名称发现无法打开工程的.map文件,.map文件是STM32开发中非常重要的一个文件 ...

最新文章

  1. ORA-03001,GATHER_TABLE_STATS数据库自动收集统计信息报错
  2. [php]数据结构算法(PHP描述) 半折插入排序 straight binary sort
  3. 计算机英语一级考试试题,全国计算机一级考试试题及答案
  4. Yii 2 修改 URL 模式为 PATH 模式,并隐藏index.php
  5. java的编程规范_JAVA编程规范-OOP规范
  6. CentOS环境下jdk的安装与配置
  7. 计算机c盘要满了电脑会卡吗,C盘满了 电脑卡顿了,怎么清理空间
  8. 量子计算机慕课,计算机组成原理-中国大学mooc-题库零氪
  9. gis怎么通过水库划分子流域_分布式水文模型子流域划分方法
  10. BibTex中参考文献种类
  11. 005--Keil使用--出现integer conversion resulted in truncation
  12. 哈工大(HIT)计算机网络 翻转课堂 实验 mooc答案 总结
  13. 欢迎来到大数据时代-----赶快来了解一些大数据的基础知识
  14. oracle中md5算法,oracle数据库中存储过程使用MD5算法加密
  15. 字节跳动大数据岗笔试经验分享
  16. poi导出excel包含图片,弹出页面下载框
  17. python里面print是什么函数_python print()内置函数
  18. WEB攻防-通用漏洞文件包含LFIRFI伪协议编码算法代码审计
  19. 【UE4】刷草后构建光照巨慢,还提示光照贴图分辨率过大的解决办法
  20. 【WinRAR】WinRAR 6.02 官方最新简体中文版

热门文章

  1. Nature:药物研发里程碑技术
  2. 怎样编写html购物车结算页面,原生JS实现购物车结算功能
  3. POWER+模块化UPS与传统UPS的比较
  4. Google Map heatmap
  5. 光纤布线对企业基础设施网络的五大影响
  6. 广东计算机一级ps操作题,2017年计算机一级PS练习题及答案
  7. Microsoft Graph Toolkit Teams 相关
  8. 图像处理与识别学习小结
  9. IBM DS3000存储DS3400数据恢复成功案例记录
  10. Android 风向玫瑰图绘制