文档章节

Driver not loaded Driver not loaded

fudum
 fudum
发布于 2014/06/24 21:16
字数 549
阅读 124
收藏 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
武汉
程序员
私信 提问
ocfs2集群系统节点无法挂载

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

joeluo
2011/08/04
806
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
java项目跑不起来,报Cannot determine embedded datasource。。。。

使用了spring boot pom.xml都配置好了 propertys也有数据 datasource 但是 报错 java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Met......

徐一万
2016/10/09
45.3K
3
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

没有更多内容

加载失败,请刷新页面

加载更多

CentOS配置Tomcat监听80端口,虚拟主机

Tomcat更改默认端口为80 更改的配置文件是: /usr/local/tomcat/conf/server.xml [root@test-a ~]# vim /usr/local/tomcat/conf/server.xml # 找到 Connector port="8080" protocol="HTTP/1......

野雪球
今天
5
0
《稻盛和夫经营学》读后感心得体会3180字范文

《稻盛和夫经营学》读后感心得体会3180字范文: 一代日本经营之圣稻盛和夫凭借刻苦勤奋的精神以及深植于佛教的商业道德准则,成为了“佛系”企业家的代表人物。在《稻盛和夫经营学》“领导人...

原创小博客
今天
3
0
java框架学习日志-5(常见的依赖注入)

依赖注入(dependency injection) 之前提到控制反转(Inversion of Control)也叫依赖注入,它们其实是一个东西,只是看的角度不同,这章详细说一下依赖注入。 依赖——指bean对象创建依赖于...

白话
今天
4
0
红外接收器驱动开发

背景:使用系统的红外遥控软件没有反应,然后以为自己接线错误,反复测试,结果烧坏了一个红外接收器,信号主板没有问题。所以自己开发了一个红外接收器的python驱动。接线参见https://my.os...

mbzhong
今天
2
0
ActiveMQ消息传送机制以及ACK机制详解

AcitveMQ是作为一种消息存储和分发组件,涉及到client与broker端数据交互的方方面面,它不仅要担保消息的存储安全性,还要提供额外的手段来确保消息的分发是可靠的。 一. ActiveMQ消息传送机...

watermelon11
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部