QSqlDatabase: No such file or directory”

1、创建程序后提示“QSqlDatabase: No such file or directory” 的错误

2、大部分的实例中直接通过在main函数声明QSqlDatabase dbconn=QSqlDatabase::addDatabase("QSQLITE")来添加数据库,创建的QSqlDatabase对象的作用域有问题,即在其他的函数或这类对象中使用此局部对象的问题, 还有就是在其他非dbconn作用域函数中在debug调试版本中可以通过QSqlQuery得到结果,但是在非debug调试版本中无法获取到结果

3、在使用QSqlQuery的时候直接通过如下方式使用

[cpp]  view plain copy
  1. {  
  2. .....  
  3.     QSqlQuery query;  
  4.     query.exec("create table student(id varchar,name varchar)");   
  5. .....  
  6. }  

首先说明这条语句可以执行的前提是在同一个函数中(前面示例中为main函数),且声明的QSqlDatabase对象在同一个作用域中;

如果在其他非QSqlDatabase对象的函数或作用域中的时候在debug的调试状态下可以得到QSqlQuery 的执行结果,但是在非debug调试状态下将得不到所要的结果(如通过QSqlQuery 执行select语句)

4、使用QSqlQuery  没有任何参数的对象,运行exec函数的时候如何查找我要执行那个数据库的sql语句?

 

针对以上的问题,可以有以下的解决方法

1、可以通过在工程的pro文件添加QT += sql 使工程(或lib)支持数据库的操作

2、可以通过如下代码方式创建一个QSqlDatabase的指针,然后将指针保存在类中,这样就可以解决作用域的问题,

[cpp]  view plain copy
  1. QSqlDatabase * m_sqliteDB= new QSqlDatabase(QSqlDatabase::addDatabase("QSQLITE""dataSqlite"));  

    为了防止QSqlQuery查询不到结果,最好是创建数据库的时候指定链接名(connectionName),就是上面代码的第二个参数。

3、在使用了2的解决方案后,其实3也就容易解决了,在声明QSqlQuery的时候加上QSqlDatabase 参数,代码如下

[cpp]  view plain copy
  1. QSqlQuery query(*m_sqliteDB);  

其中m_sqliteDB是通过2的方案中创建的指针的解引用。

然后再调用 query的exec函数执行代码即可。

4、当使用3的解决方案后,这时也就不存在说因为在不同的函数中使用QSqlQuery 无参数对象是,直接调用其exec函数的时候迷惑为什么没有说明是使用哪一个数据库的问题了。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值