文档章节

Driver not loaded Driver not loaded

fudum
 fudum
发布于 2014/06/24 21:16
字数 549
阅读 120
收藏 0

先阐述一下开发环境:windows7 + vs2012  + qt5.2.0 + c++。开发服务器端的程序。

发布程序的时候,把exe文件,dll文件,plugins文件下的驱动dll都copy到一个文件夹上。然后copy到服务器上,运行时候,日志文件一直输出Driver not loaded,不能够对数据库进行操作。

因为服务器上已经部署了一个程序,用相同的配置开发的,没有问题,很是纳闷,在网上搜索,找到一篇文章http://qt-project.org/forums/viewthread/5664。上面有个叔叔回复帖子:


If you declare the variable in the header as global, it is up to the compiler, when exactly the object is created (and that varies from compiler to compiler!), so it can be that there is an attempt to create the object at a time, when Qt is not finally set up yet – which can lead to not finding plugins and the like.

The steps are basically:

1. create a database connection somewhere in a connectDb method or the like:

  1. QSqlDatabase db  =  QSqlDatabase :: addDatabase ( "QPSQL" ) ;
  2. db. setHostName ( "acidalia" ) ;
  3. db. setDatabaseName ( "customdb" ) ;
  4. db. setUserName ( "mojito" ) ;
  5. db. setPassword ( "J0a1m8" ) ;
  6. bool ok  = db. open ( ) ;
The above snippet creates a default database; if you need more DBs, add a second parameter to the addDatabase call with the internal name you want to identify it with.

2. get the database handle wherever you need it

  1. QSqlDatabase db  =  QSqlDatabase :: database ( ) ;

This retrieves the previously setup default database; add a name to it if you have multiple ones.

3. close the database in a disconnectDB method
Get the handle like above and call close on it.

This way you get rid of the global object and hence avoid initialization hassles caused by the linker.

Oh, and an important note:
QSqlDatabase::addDatabase() [doc.qt.nokia.com], you must not call it on an QSqlDatabase object created with new! Just do it like the samples in the docs (= the snippets I copied above) show you; you just need to change the driver name, username, password, etc.

看到第一句话,If you declare the variable in the header as global.我就明白了,我的程序把QSqlDatabase db;定义成静态的了,有的时候在qt没有加载驱动的情况下加载。

我于是把程序改为:

在程序中先对数据库初始化:

//gps数据库连接
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","one");
db.setDatabaseName(dbname);//数据库名   
db.setUserName(usrname);//数据库用户名   
db.setPassword(password);//数据库密码 
db.setPort(prot);//设置数据库的端口

以后调用的时候利用:

QSqlDatabase db = QSqlDatabase::database("one",true);

来调用db连接,后来运行程序就解决了那个bug.





© 著作权归作者所有

共有 人打赏支持
fudum

fudum

粉丝 2
博文 7
码字总数 3605
作品 0
武汉
程序员
debian VGA driver

In Linux, there is two parts for the video driver, the kernel part and the X server part. Let's identify your hardware first. By typing in a terminal, you should see a line with......

idoz
2012/10/12
0
0
ocfs2集群系统节点无法挂载

最近在测试ocfs2集群文件系统,主节点可以挂载,但第二个节点无法挂载,配置cluster.conf文件如下: node: name = joe-desktop cluster = ocfs2 number = 0 ipaddress = 192.168.1.246 ipport...

joeluo
2011/08/04
750
0
Intel PRO/Wireless 2100, 2200 and 2915 devices for Debian5

Intel PRO/Wireless 2100, 2200 and 2915 devices This page describes how to enable support for WiFi devices based on Intel 2100, 2200 and 2915 chipsets on Debian systems. 目录 In......

任远
2010/10/31
0
0
DriverManager 连接不同的连接池

public class DriverManager extends Object The basic service for managing a set of JDBC drivers. NOTE: The interface, new in the JDBC 2.0 API, provides another way to connect to ......

Oscarfff
2016/10/10
5
0
tomcat shutdown后清理工作出现的异常

引言 tomcat属于web应用服务器,当我们的应用服务器关闭后,但是有些java class/thread/threadLocal等依然存活,当再次reload后,就会导致内存的溢出.为了避免这种严重的内存leak问题,tomcat做了...

乾坤刀
2017/10/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Docker和Kubernetes如何让DevOps更具效力

缩短time-to-makrt对于任何一家企业都至关重要,这直接决定了客户满意度、市场竞争力乃至盈利能力。但在部署应用时,大多数企业内的IT团队都或多或少会遇到Dev和Ops之间的问题,这两个部门围...

好雨云帮
8分钟前
0
0
OSChina 周一乱弹 —— 嫂子我帮你们照顾放心吧

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @clouddyy :#每日一歌# 《绿光 - 孙燕姿》 《绿光》 - 孙燕姿 手机党少年们想听歌,请使劲儿戳(这里) @凝小紫:又到周日了,按照惯例吐槽一...

小小编辑
30分钟前
34
5
可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
今天
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部