qt连接mdb_【原创】QT数据库学习和以连接Access为例
Qt能够实现对不同数据的支持,例如常见的oracl、MySql、Sql
Server、Access等等。首先Qt是通过QSqlDabase来创建数据库的连接,下面是创建一个QSqlDabase的实例:
db.setHostName(“XXX”); //设置主机名
db.setDabaseName(“XXX”);//设置数据库名
db.setUserName(“XXX”);//设置用户名
db.setPassword(“XXX”);//设置密码
if(!db.open())//打开数据库连接
{
//error
}
上面的第一行中”QSQLITE”是对应数据库的驱动名称,也就说访问不同的数据库对应的驱动是不一样的。通常可以通过以下代码:
QStringList drivers = QSqlDabase::drivers();
Foreach(QString driver,drivers)
qDebug()<
这样就可以知道自己版本的qt有几种不同的驱动。我的版本是Qt5.3,下面是在帮助文档看到Qt支持的所有驱动。例如我们常见的access数据库对应的是QODBC,MySql的驱动是QMYSQL,Oracle数据的驱动是QOCI。
现在我们要了解一个数据库,就是上面例子”QSQLITE”所对应的数据库。它所连接的是SQLite数据库,是一种轻型的文件型数据库,主要应用于嵌入式领域而且支持跨平台,Qt的默认数据连接就是SQlite数据。SQlite没有对应的数据库系统,它通过我们写的代码直接编译可生成这样的一个数据库文件。例如上面的代码执行完后QSqlDabase
db = QSqlDabase::addDatabase(“QSQLITE”);
db.setHostName(“XXX”); //设置主机名
db.setDabaseName(“XXX”);//设置数据库名
db.setUserName(“my.db”);//设置用户名
db.setPassword(“XXX”);//设置密码
if(!db.open())//打开数据库连接
{
//error
}
就在我们编译生成Debug文件夹看到一个my.db的文件。
但实际上我们通常要访问一个比较常见的数据库,例如Access数据库。下面来介绍Qt怎么访问Access。
首先我们在要执行QSqlDabase db =
QSqlDabase::addDatabase(“QODBC”);这条语句,注意到此时的驱动已经换成了QODBC,接着关键的是db.setDabaseName(“XXX”);这条语句。可能刚开始天真的以为只要把驱动名称换成QODBC,然后我们新建一个access文件名称为命名为File.mdb,然后执行db.setDabaseName(“File.mdb”);这条语句就能访问access数据库文件了,但实际上是不行的。在帮助文档查看setDabaseName属性,你会发现这里有详细的说明如何访问access的例子。
For the QOCI (Oracle) driver, the database name is the TNS
Service Name.
For the QODBC driver,
the name can either be a
DSN, a DSN filename (in which case the file must have
a.dsnextension),
or a connection string.
For example, Microsoft
Access users can use the following connection string to open
an.mdbfile
directly, instead of having to create a DSN entry in the ODBC
manager:
...
db.setDatabaseName("DRIVER={Microsoft Access Driver
(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
if (db.open()) {
//
success!
}
...
上面就是说如果采用QOCI驱动,那么database的name要使用TNS服务的名称。而如果采用QODBC驱动,那么database的name就要采用DNS名称或者连接字符串这两种方式。这里的name就是指void
QSqlDatabase::setDatabaseName(const QString &
name)里面这个name参数。然后它给出了采用连接字符串这种方法的例子就是上面那段代码,其中最关键的就是这句:
db.setDatabaseName("DRIVER={Microsoft Access Driver
(*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
如果你本地的access文件是file.mdb,那么只要把上面DBQ=后面的这个换成你自己的文件,
DBQ = file.mdb,其他都相同,这样就能成功连接你本地的access数据库了。到这里虽然能实现预期的目的,但总感觉一头雾水,我本身对数据库的了解也仅次于那些sql语句,上面连接字符串的其他部分代表什么含义,ODBC是什么东西,还有另外一种方法中提到的DSN是什么东西都不知道,所以花了一段时间在网上查找相关资料,终于大致了解ODBC,DNS还有应用程序连接数据库之间的过程原理等。
在百科上ODBC是这样定义的:开放数据库互连(Open
Database Connectivity,ODBC)是微软公司开放服务结构(WOSA,Windows
Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这样讲很抽象,为了弄懂它来看这张在网上找的图,如下图中应用层就是指我们的应用程序,数据层就是我们要访问的数据库了,所以你可以简单把ODBC当作桥梁。ODBC管理器是关键的组成,ODBC管理器不是属于应用层,也不是属于数据层,也就是说这个ODBC管理器不属于Qt的范畴,也不属于Access,它是基于windows系统的一个ODBC部分。它是用来管理不同的数据源,应用程序要访问数据库,首先必须在ODBC管理器创建一个数据源。
也就是我们在ODBC管理器设置一些内容后,ODBC管理器就会帮我们把应用层和数据库之间的道路打通,至于它是怎么打通的,那就是微软提供的ODBC中的内容,我们不必知道也没办法知道,那么ODBC管理器应该设置一些什么东西呢?其实就是设置数据源。
在上面我们曾遇到过DSN,DSN是Data Source Name的缩写,也就是DSN就是数据源的名称,那么什么是数据源呢?数据源顾名思义就是数据的来源,它包含数据库存储位置、类型及ODBC驱动程序信息等等。我们把这么一个数据的来源用一个名字命名,这个名字就是DSN了。例如我接收到来自上海市XX区XX路XX号的一个快递,每个快递都对应一个快递号例如003945,那么这个数据源就是上面的那条地址,数据源名称就是快递号了,当然这是我比较粗的理解,也许很不恰当。
ODBC管理器的作用就是根据数据源提供的数据库存储位置、类型及ODBC驱动程序信息,建立起ODBC与一个特定数据库的联系,以后程序只需要提供数据源名称就可以直接访问数据库了。如果我们要访问一个在D:\mydata.mdb这个access数据库文件,那么你只需要告诉ODBC管理器这个是一个Access数据库文件,它在的位置是D:\mydata.mdb这个路径,采用的ODBC驱动,那么ODBC管理器就会自动帮你把你的应用程序和mudata.mdb连接了,而它在内部是怎么实现的我们不需要知道。ODBC管理器在计算机的位置是--控制面板\系统和安全\管理工具。
点击添加按钮,出现一个驱动对话框,选择access对应的驱动如图然后点击完成后出现一个对话框,看到了吗有一个光标处就是填写数据源名称也就是DSN,例如我填的是connectDatabase,然后点击数据库连接弹出一个选择数据库对话框,之后我们在目录选择我们要连接的数据库文件的路径,然后点击确定,那么ODBC管理器就帮助我们把应用程序和数据库连接了,此时记住这个数据源名connectDatabase,然后回到上面QSqlDatabase::setDatabaseName属性,大致代码如下:
QSqlDabase db =
QSqlDabase::addDatabase(“QODBC”);//选择QODBC驱动
db.setDabaseName(“connectDatabase”);//设置数据库名,我们自己起的数据源名
if(!db.open())//打开数据库连接
{
//error
}
这时在看参考文档的这句话:For
example, Microsoft Access users can use the following connection
string to open an.mdbfile
directly, instead of having to create a DSN entry in the ODBC
manager:你会豁然开朗了,要嘛用连接字符串,要嘛去ODBC
manager管理器去设置好数据源,这两种方法都可以帮助应用程序连接到Access数据库。通过比较显然连接字符串的方式要简单很多了,下面这张表是在网上找到不同数据库对应的连接字符串的书写格式,注意如果格式不正确是没办法连接到数据库的。
qt连接mdb_【原创】QT数据库学习和以连接Access为例相关推荐
- mysql连接方式左联_数据库中的左连接(left join)和右连接(right join)区别 | 改变自己...
Left Join / Right Join /inner join相关 关于左连接和右连接总结性的一句话: 左连接where只影向右表,右连接where只影响左表. Left Join select ...
- python连接本机oracle数据库吗,用Python连接Oracle数据库容易吗?
ello,大家好!本次介绍的内容是如何使用Python连接Oracle数据库!看起来很简单,但实际上就是这么简单.学习本节内容后,相信老铁们能用Python撸起你们那庞大的Oracle数据库了.Wel ...
- PHP同时连接多个mysql数据库_php如何同时连接多个数据库
下面是一个函数能够保证连接多个数据库的下不同的表的函数,可以收藏一下,比较实用,测试过是有用的. function mysql_oper($oper,$db,$table,$where='1',$li ...
- linux连接本机mysql数据库,Linux中MySQL连接本机数据库客户端
Linux中MySQL连接本机数据库客户端 Linux中MySQL连接本机数据库客户端 1.登入mysql数据库 2.找到要修改的位置 // 选定要用的数据库(用show databases;看完再u ...
- boot连接不上mysql数据库_【springboot连接 MYSQL数据库出问题_springboot】 | IT修真院·坑乎...
Spring: datebase: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/spring-c ...
- 【数据库学习笔记】——cursor游标对象
目录 1.创建cursor对象 2.cursor对象常用方法 3.操作数据库的常见流程(五部曲) 课程视频链接: 第14节 Python操作数据库_哔哩哔哩_bilibili666https://ww ...
- 【数据库学习笔记】——操作sqlite(增删改查)以及cursor的方法介绍
目录 1.sqlite数据库介绍 1)常见的数据库操作 2)数据操作常见步骤 2.向数据表中增加数据(insert into) 1)向数据表中添加一条记录 2)向数据表中一次性添加多条记录 3.修 ...
- c access mysql数据库_基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo)...
基于C#的Access MsSQL MySQL 三种数据库访问演示(含源文件Demo) 一.三种数据库的主要对比 数据库类型 特点 Microsoft Access 桌面数据库.数据库载体是单个文件 ...
- QT五子棋游戏课设及源码(连接mysql数据库含打开并运行程序的教程)
gdut大一下学期c++课设(得分:95) 实验报告及源码压缩包百度云下载: 链接:https://pan.baidu.com/s/1zO5ofMz09fiWihxCcZcFbg 提取码:ddav 首 ...
最新文章
- python中处理日期和时间的标准模块是-2019python常见的170道面试题解析
- 2017-7-6日记
- 学完可以解决90%以上的数据分析问题-利用python进行数据分析第二版(代码和中文笔记)...
- 【STM32】DMA详解
- mysql像plsql一样删除提交_MySQL学习-MySQL内置功能_事务操作
- window10 安装出现the error code is 2503错误的解决方法
- Find命令使用详解及实例分析
- MySQL数据库基础(三)——SQL语言
- android studio 登录与注册,Android Studio实现QQ的注册登录和好友列表跳转
- oracle startup open ora 03113,startup mount备库的时候报ORA-03113错误
- RAID1与RAID0的区别
- Multisim电路分析仿真-叠加原理
- [论文翻译]YOLOX: Exceeding YOLO Series in 2021
- 2022 ICPC Gran Premio de Mexico 1ra Fecha (B、D、E、F)
- 如何安装旧的nvidia显卡驱动程序
- CTE表--SQLSERVER2005看得见的性能提升
- 使用 Ceph 作为 OpenStack 的统一存储解决方案
- html 图片纵向拉伸,css如何让图片拉伸?
- debian9.6安装和卸载新立得软件包管理器
- C#获取本周,上周,下周信息