开发环境:
win10、VS2013
前言
之前一直使用微软的ACCESS数据库,一个mdb或accdb文件即可,轻量级很好用,但部署到设备上,还需要安装ACCESS数据库驱动,有时忘记装驱动就会导致数据库连接不上,无法正常访问。
后面发现轻量级的SQLite更好用,读写db文件就像访问本地log文件一样简单,就像喝水般轻松。
应用场景
半导体设备免不了要与客户的MES系统通信,比如根据产品ID来获取要加工的资料,而且还要将ID和动态数据保存到本地数据库中。
遇到产品重复投入设备,软件要能够准确判断,并提示给OP,常规SQL SERVER数据库体量太庞大,对于一个月还不到百万条数据的场景,选择轻量级的数据库最合适。
准备工作
引入.h头文件,引入lib文件,将dll放到工程运行目录下,常规调用动态库的3步骤,这里就不多写了,DDDD.
封装
虽然需要调用的接口都在头文件中声明了,但为了方便项目工程调用,我还是准备封装一个类出来。
示例代码:
数据库连接
通过OpenDB的返回值,来判断数据库的连接状态。数据库连接成功后,就可以执行增删改查等SQL语句了。
执行SQL语句
SQL语句无外乎增删改查,格式化好字符串后,调用接口即可。
执行结果就放在vector容器中,根据需要来进行显示和数据处理。
编译问题
这里重点说一下SQLite加入到项目中所遇到的问题,主要是编译问题。
Release模式下,编译/链接时报错,提示当前所使用的sqlite3.lib文件是由旧编译器创建的,无法在VS2013项目工程下使用。
修改配置属性,连接器->高级->设置:SAFESEH:NO,并且将程序优化关闭掉之后,可以正常编译通过。
这种方式虽然能够使用,但又引来了一个新问题,即在Debug模式下,无法激活“编辑并应用”按钮,特别是在设备上调试软件,没法做到边改边调,无论大小修改都要重新运行软件。
无法边改代码边调试软件,对我的项目来说是个很大的麻烦事。
因为涉及到的运动轴、IO、气缸和激光器、打标控制卡等硬件较多,重启软件需要做很多初始化动作。
所以还是得解决掉引入SQLite后,无法编辑调试的问题。
解决方案
尝试过各种方法,比如修改配置项、下载新版本的SQLite库,都未能解决问题。
最终使用最笨的方案,封装一个MFC扩展库,作为中间件,应用层通过MFC扩展库的中转,最终调用SQLite执行数据库操作。
问题彻底解决,应用代码更改的按钮重新亮起来,又可以愉快的写bug了!
对于我遇到的问题来说,应该有更简单的解决方案,欢迎小伙伴们一起讨论。
想要Demo的朋友,也可以留言或者私信我。
阿乐会在这里持续更新开发项目中遇到的问题,和一些心得,希望后来的小伙伴们都能避坑。