sqlite3_prepare_v2返回26错误码的解决

前端之家收集整理的这篇文章主要介绍了sqlite3_prepare_v2返回26错误码的解决前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_0@问题描述:

@H_403_0@C++写了一个sqlite小工具32位的,在64位win7下执行出错

@H_403_0@

@H_403_0@处理过程:

@H_403_0@

@H_403_0@1 来Debug,我有源码我怕谁

@H_403_0@

@H_403_0@经过跟踪定位到sqlite3_prepare_v2()函数,返回错误码为26.

@H_403_0@通过查找26的定义为:#define sqlITE_NOTADB 26/* File opened that is not a database file */

@H_403_0@就是说没有识别db文件


@H_403_0@2 检查db文件

@H_403_0@通过常用的sqlite工具测试,该db文件是完好的,能打开查数据。

@H_403_0@

@H_403_0@3 这时,想到了可能是程序使用的sqlite3.dll库版本不对,

@H_403_0@这种情况在使用一些第三方库时经常出现,如用c++写MysqL应用程序用到了 cppconn,需要区分32位64位,还要区分debug,release,还要区分vs版本

@H_403_0@所以发布程序稍有不慎就踩坑。

@H_403_0@经检查发现程序目录中根本就没有sqlite3.dll,所以程序肯定是加载了系统目录下的dll,

@H_403_0@通过进程查看工具发现加载了win7系统目录下的库:windows\syswow64\sqlite3.dll

@H_403_0@于是找了一份32位的库文件sqlite3.dll放到程序目录,再执行OK了。

@H_403_0@

@H_403_0@问题解决了,但还有个问题搞不懂,我的32位程序怎么能够加载64位sqlite3.dll并且不会在启动时报错!?

原文链接:https://www.f2er.com/sqlite/198216.html

猜你在找的Sqlite相关文章