QT数据库学习和以连接Access为例

16 篇文章 0 订阅
Qt对数据库的操作主要是通过QtSql模块来进行,我们需要在项目文件(.pro文件)中添加一行代码”QT += sql”,这样才能使用数据库模块。详细的内容可以在帮助文档SQL programming关键字查看。
  Qt能够实现对不同数据的支持,例如常见的oracl、MySql、Sql Server、Access等等。首先Qt是通过QSqlDabase来创建数据库的连接,下面是创建一个QSqlDabase的实例:

QSqlDabase db = QSqlDabase::addDatabase(“QSQLITE”);

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()<<driver;

这样就可以知道自己版本的qt有几种不同的驱动。我的版本是Qt5.3,下面是在帮助文档看到Qt支持的所有驱动。例如我们常见的access数据库对应的是QODBC,MySql的驱动是QMYSQL,Oracle数据的驱动是QOCI。

【原创】QT数据库学习和以连接Access为例现在我们要了解一个数据库,就是上面例子”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 .dsn extension), or a connection string.

For example, Microsoft Access users can use the following connection string to open an .mdb file directly, instead of having to create a DSN entry in the ODBC manager:

...

db = QSqlDatabase::addDatabase("QODBC");

db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");

if (db.open()) {

    // success!

}

...

上面就是说如果采用QOCI驱动,那么database的name要使用TNS服务的名称。而如果采用QODBC驱动,那么databasename就要采用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管理器应该设置一些什么东西呢?其实就是设置数据源。

【原创】QT数据库学习和以连接Access为例

  在上面我们曾遇到过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管理器在计算机的位置是--控制面板\系统和安全\管理工具。

【原创】QT数据库学习和以连接Access为例【原创】QT数据库学习和以连接Access为例
【原创】QT数据库学习和以连接Access为例

点击添加按钮,出现一个驱动对话框,选择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 .mdb file directly, instead of having to create a DSN entry in the ODBC manager:你会豁然开朗了,要嘛用连接字符串,要嘛去ODBC manager管理器去设置好数据源,这两种方法都可以帮助应用程序连接到Access数据库。通过比较显然连接字符串的方式要简单很多了,下面这张表是在网上找到不同数据库对应的连接字符串的书写格式,注意如果格式不正确是没办法连接到数据库的。

【原创】QT数据库学习和以连接Access为例

  • 5
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Qt提供了一种方便的方式来访问和操作数据库,包括Access数据库。 首先,在使用Qt之前,我们需要确保已安装Microsoft Access数据库引擎驱动程序。接下来,我们需要在Qt项目中包含`QtSql`模块,这样我们才能使用Qt提供的数据库相关类和函数。 创建一个Access数据库连接非常简单。我们可以使用`QSqlDatabase`类,并使用其`addDatabase()`函数来添加Access数据库连接。在这个函数中,我们需要指定所使用的数据库驱动和连接名,同时还可以指定连接数据库的路径和其他相关参数。 创建成功后,我们可以使用`QSqlQuery`类来执行SQL查询语句。通过调用`exec()`函数,并传递SQL语句作为参数,我们可以执行查询、插入、更新或删除操作。执行查询后,我们可以使用`next()`函数来遍历查询结果集,以获取返回的数据。 除了执行SQL查询语句外,我们还可以使用`QSqlTableModel`类来创建一个可编辑的表格模型,用于在Qt应用程序中显示和编辑数据。该类提供了方便的函数和信号槽来处理表格数据操作,包括插入、更新和删除。 最后,在不需要连接数据库时,我们需要关闭数据库连接。通过调用`close()`函数,我们可以关闭数据库连接,以释放资源。 总之,Qt提供了一套功能强大的API来访问和操作Access数据库,使我们能够轻松地在Qt应用程序中使用和管理数据库。使用Qt,我们可以很方便地执行查询、插入、更新或删除操作,还可以利用表格模型来显示和编辑数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值