加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

sqlite3_prepare_v2返回26错误码的解决

发布时间:2020-12-12 19:18:24 所属栏目:百科 来源:网络整理
导读:问题描述: C++写了一个SQLite小工具32位的,在64位win7下执行出错 处理过程: 1 来Debug,我有源码我怕谁 经过跟踪定位到sqlite3_prepare_v2()函数,返回错误码为26. 通过查找26的定义为: #define SQLITE_NOTADB 26 /* File opened that is not a database

问题描述:

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


处理过程:


1 来Debug,我有源码我怕谁

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

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

就是说没有识别db文件。


2 检查db文件

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


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

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

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

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

通过进程查看工具发现加载了win7系统目录下的库:windowssyswow64sqlite3.dll

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


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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读