好一阵子没有更新了,因为项目已经做完了。这个项目的后期还有一个MFC的电脑上位机,这部分本来是由师姐做的,但是她忙,就让我小打小闹一下下。

这个MFC程序要求比较多,但是我先打算把基本框架做好,后期的事情再说。这个要求比较多,而且还在随用户的要求还要修改,但是有些部分是肯定的,比方说,连接到我做的那个Android手机的数据库,操作那个数据库,导出成Excel表格。

由于手机里面的那个数据库是sqlite3,所以第一件事就是要能让MFC连接到sqlite3这个数据库,然后才有别的操作。这个真的是花费不少时间做连接调试。下面具体说说怎么实现的。

sqlite3的官网是有提供源码和一些编译好的下载资源。(http://www.sqlite.org/download.html)这里可以下载到我截图的这些文件。但是红线标注的是没有的,要自己手动生成,或者在别的地方下载。生成也很简单,新建一个Win32 Dynamic-Link Library工程,然后添加源码,编译一下就可以了。(怕麻烦的的话,这里有我打包的库文件:http://download.csdn.net/detail/u012321815/7617293)

有了这些文件,只要把他们添加到你的工程里面,然后添加头文件和.cpp文件,当然,还要设置包含库和引用库。

其实设置了这些就应该可以连接并操作数据库的,但是往往没那么顺利,因为我调试了一上午才成功了,不同机器可能编译调试时报的错误不同,所以我就不给出我调试时的错误了,(其实我也没截图当时),不过报错怎么办呢?你不是第一个遇到错误的人,所以记住,百度一下,肯定可以解决的。

接下来说说操作数据库。如果你只需要用到像我这样,越简单约好的话,我可以告诉你,程序很简单,无非是增删改查四步,也就是几个关键函数的调用就好了。前提是你对数据库有最基本的了解。

这是查询里面的显示函数,也是最简单的查询操作。db.open(m_exclefilepath)是打开选择的路径下的数据库,里面的参数是路径;db.tableExists("data")是查看表data是否存在,因为我android的那个程序的数据库的表名就是data;CppSQLite3Buffer bufSQL;bufSQL.format("select * from data where %s;",tempsql);q = db.execQuery(bufSQL);前两句是为了拼装一句sql语句,因为包含特殊字符串,所以用的是自带的这个buffer,尽量不要用string的“+”,最后一句是查询,当然,因为第二句是一句条件sql,所以这里是条件查询,返回的是一个集合CppSQLite3Query;q.nextRow()是指向下一条记录;!q.eof()循环条件不为空;有了上面这些解释,下面的代码就很好懂了。

void CQueryDialog::ShowDBList(CString sql)
{CString tempsql = "";tempsql = G2U(sql);try{CppSQLite3DB db;db.open(m_exclefilepath);// 判断是否存在表data、建立表if (db.tableExists("data")){int count = 0;// 查询CppSQLite3Query q;if(sql==""){q= db.execQuery("select * from data ;");}else{CppSQLite3Buffer bufSQL;bufSQL.format("select * from data where %s;",tempsql);q = db.execQuery(bufSQL);}while (!q.eof()){CString str_id = CString(q.fieldValue(0));CString str_linename = CString(q.fieldValue(1));CString str_time = CString(q.fieldValue(2));CString str_identification = CString(q.fieldValue(3));CString str_stationtrack = CString(q.fieldValue(4));CString str_mileage = CString(q.fieldValue(5));CString str_hundred = CString(q.fieldValue(6));CString str_ten = CString(q.fieldValue(7));CString str_longitude = CString(q.fieldValue(8));CString str_latitude = CString(q.fieldValue(9));CString str_sidegrinding = CString(q.fieldValue(10));CString str_verticalmill = CString(q.fieldValue(11));CString str_fatedge = CString(q.fieldValue(12));CString str_brightbeltlocation = CString(q.fieldValue(13));CString str_brightbeltwidth = CString(q.fieldValue(14));CString str_profile13 = CString(q.fieldValue(15));CString str_profile25 = CString(q.fieldValue(16));CString str_profile487 = CString(q.fieldValue(17));CString str_profile65 = CString(q.fieldValue(18));m_listquery.InsertItem(count,_T(""));m_listquery.SetItemText(count,0,U2G(str_id) );m_listquery.SetItemText(count,1,U2G(str_linename) );m_listquery.SetItemText(count,2,U2G(str_time) );m_listquery.SetItemText(count,3,U2G(str_identification) );m_listquery.SetItemText(count,4,U2G(str_stationtrack) );m_listquery.SetItemText(count,5,U2G(str_mileage) );m_listquery.SetItemText(count,6,U2G(str_hundred) );m_listquery.SetItemText(count,7,U2G(str_ten) );m_listquery.SetItemText(count,8,U2G(str_longitude) );m_listquery.SetItemText(count,9,U2G(str_latitude) );m_listquery.SetItemText(count,10,U2G(str_sidegrinding) );m_listquery.SetItemText(count,11,U2G(str_verticalmill) );m_listquery.SetItemText(count,12,U2G(str_fatedge) );m_listquery.SetItemText(count,13,U2G(str_brightbeltlocation) );m_listquery.SetItemText(count,14,U2G(str_brightbeltwidth) );m_listquery.SetItemText(count,15,U2G(str_profile13) );m_listquery.SetItemText(count,16,U2G(str_profile25) );m_listquery.SetItemText(count,17,U2G(str_profile487) );m_listquery.SetItemText(count,18,U2G(str_profile65) );count++;q.nextRow();}q.finalize(); } else{AfxMessageBox("表data不存在");}}catch (CppSQLite3Exception& e){// 出错}AfxMessageBox("检索完毕");}

当然,上面是条件查询,还有增删改,这都要用到另外一个函数db.execDML(bufSQL);这个函数和db.execQuery(bufSQL)很类似,但是前者返回值是一个int后者返回值是一个字集,前者只是看操作成功了没有,后者是给出查询到的结果。比方说我这里用到的增删改三种操作,我直接贴我的代码,很简单。

//插入一条空记录在最后一行的下一行CppSQLite3Buffer bufSQL;bufSQL.format("insert into data values (%d, '','','','','','','','','','','','','','','','','','');",atoi(dblastid)+1);db.execDML(bufSQL);

这是插入一行空记录,只有id。

//删掉指定行CppSQLite3Buffer bufSQL;bufSQL.format("delete from data where id = %s;",id);db.execDML(bufSQL);

这是删掉一行,要给出id。或者别的条件,当然,你也可以把怎个表删掉,直接用drop table,懂sql语句就行。

//更新数据库CppSQLite3Buffer bufSQL;bufSQL.format("update data set %s = '%s' where id = %s;",head,G2U(strText),id);db.execDML(bufSQL);

这是更新数据库,要有条件,这里是指定id的更新。

要用的到基本就是这么多,还想要调用更多的函数,可以直接查看源文件里面的函数说明,不是很难,可以看注释。




MFC连接sqlite3数据库相关推荐

  1. MFC连接SQL数据库操作

    要操作SQL数据库要经过以下几个步骤: 0.建立数据库 1.配置数据源 2.数据库的连接 3.数据库的操作 4.类资料 [1]配置数据源 配置数据源一般有两种方法一种是通过注册表,一种是通过SQLCo ...

  2. deno如何连接mysql_c 连接sqlite3数据库

    SQLite C语言接口 数据表设计 create table tbl_emp( id integer primary key , name varchar(40), age smallint, bi ...

  3. Qt(C++)中如何连接sqlite3数据库及如何使用

    第一步 引入相关文件 ①将sqlite一些对应的文件复制到qt的工程文件 ②在工程配置文件.pro中加入 LIBS += $$PWD/lib/sqlite3.lib $$:表示当前工程目录 第二步 在 ...

  4. mfc远程连接mysql数据库连接_MFC连接mysql数据库(十分钟搞定)

    最近要做一个大作业,需要用到数据库,sql server装了两次都失败,遂弃暗投明,用mysql,虽然我从来没有接触过,数据库么,一通百通的,5分钟就熟悉了.问题的关键是要用MFC连接mysql数据库 ...

  5. vs2012 MFC连接及操作access(2007)数据库(ADO)

    最近想写个图书管理软件,用到了数据库,但是由于是小白,弄了好半天才把数据库搞明白.虽然网上有一些教程,但大多都是长长的文字叙述,所以想写一个图文版的连接教程并把这两天的经验记录下来. 1.首先打开ac ...

  6. pycharm中django框架连接mysql数据库

    1.首先下载安装pymysql模块. pip install pymysql 如果出现 timeout 超时可以使用其他的资源下载: pip install 模块名 -i https://pypi.d ...

  7. VC++使用事务来写SQLite3数据库

    如果使用VC++使用事务来写SQLite3数据库,首先要先能写库,这篇文章分为两部分,第一部分是怎么来写SQLite3数据库,第二部分怎么使用事务来写库. 第一部分写SQLite3数据库 SQLite ...

  8. fetchall oracle,连接fetchall数据库

    PDO连接mysql和pgsql数据库 PDO连接mysql数据库 <?php $dsn="mysql:host=localhsot;dbname=lamp87"; $use ...

  9. mfc 访问局域网mysql_数据库操作:MFC连接与MYSQL

    数据库操作:MFC连接与MYSQL mysql 与MFC通常情况下都是用ODBC或者是是ADO相连接,但有点伤 我直接找网上的教程,仿照着进行连接,试了n边还是只能连接上,但无法进行如图读取,写入的操 ...

最新文章

  1. 简单的DOS命令操作数据库
  2. 皮一皮:所以说...哪里的程序猿最能吃辣?
  3. harmonyos2.0三大技术特点,一文解析HarmonyOS的技术特性、子系统架构、四大技术特性...
  4. pfSense book之静态路由
  5. linux目录结果说明,Linux目录结构及文件说明
  6. uniapp踩坑指南之坑多到写不完
  7. jnativecpp.dll一定要放到系统目录下吗_电脑硬盘有必要分区吗,分几个区最好?...
  8. 写了人生中第一个完整模块的用例
  9. easyui弹出窗关闭前调用确认窗口,先关闭页面后调用弹出窗口
  10. 优秀的用户体验设计,从讲好一个故事开始
  11. Window系统: 解决 win xp系统 最新版QQ/TIM安装包 报错误 安装包可能被非法改动导致安装失败 云云.2021-02-15
  12. 梯度散度旋度哈密顿量公式
  13. 计算机通信与网络技术考研录取,计算机科学与通信工程学院2021年硕士研究生招生一志愿复试名单公示...
  14. 显示屏色温调节 影响 测试软件,教你把显示器调到最佳效果
  15. 密码算法测试向量——目录
  16. SAP HANA XS ODATA使用参数展示具体数据
  17. RenderScript 让你的Android计算速度快的飞上天!
  18. ssh-keygen处理gitee
  19. 华为起诉三星启示几何 探讨知识产权在中国
  20. 弘辽科技:拼多多账号注销后还能再次开店吗?

热门文章

  1. C语言:数据文件操作
  2. oracle修改数据文件
  3. 冠状病毒的治疗方案汇总
  4. python语言初学
  5. 第三章:电子商务平台选择
  6. 安卓手机格式化怎么弄_安卓手机怎样进入格式化?
  7. Electron学习笔记 4 添加系统功能
  8. 大型生鲜配送企业如何做到快速分拣商品?
  9. 浪潮精彩亮相第十届中国云计算大会
  10. 全国计算机一级考试试题大题,全国计算机等级考试一级考试练习(新大纲)试题及答案...