前段时间由于工作的关系,需要编写一个将数据插入到 Sql server 2012 的桌面软件。

由于之前使用的是MFC,偶然间接触到了Qt后,被它的简洁惊艳到了,于是便毅然而然的转投到了Qt的怀抱,哈哈……

废话不多说,我使用的是最新的Qt 5.5.1版本(Qt 5.5.1 for Windows 32-bit MinGW), 在一路查看帮助文档后,

终于是把程序编译出来,正常运行了。正当我满心欢喜的交付出去的时候,遇到问题了,程序在对方的电脑上运行时,

提示缺少动态库!而且不同电脑缺少的库还不一定相同!费劲心思找好缺少的库后,原本满满的成就感就降低了许多……

在网上寻求的帮助过程中,我想到了静态编译的方式……

How to build a static Qt version for Windows with gcc

说做就做,按着官方网站的说明,无脑照搬步骤编译出来了静态

版本,但是在使用的时候出问题了:

运行的时候提示:

"Driver not loaded Driver not loaded"
Available drivers:
     "QSQLITE"

擦,原来默认没把odbc的驱动编译进去,好吧,按照Qt帮助文档的说明编译出了  libqsqlodbcd.a 、libqsqlodbc.a
这两个文件,然后想当然地把这两个文件放到 %QT/plugins的sqldrivers文件夹下,你猜怎么着,根本就没有这个文件夹!

好吧,既然没有,那我就给你建立一个,但还是没什么鬼用……

终于,皇天不负有心人,我了解到,我现在使用ODBC驱动的方式 叫做“调用静态插件”, Qt正好有那么篇介绍的文章:

How to Create Qt Plugins

按照上面的说明,在.pro 文件中加入如下语句:

QTPLUGIN+= qsqlodbc

并在.cpp文件中添加语句:

#include<QtPlugin>

Q_IMPORT_PLUGIN(QODBCDriverPlugin)

这里要说一下,插件的名字,也就是这里的“QODBCDriverPlugin”,去哪里找呢?这得到我们编译这个驱动的.pro文件中找,这里是 odbc.pro,
(目录: %Qt\src\qt-everywhere-opensource-src-5.5.1\qtbase\src\plugins\sqldrivers\odbc)。 另外,还要把和 .a库一起编译出来的两个 .prl 文件放到 %Qt\lib 目录下,并编辑这两个文件,把里面 QMAKE_PRL_LIBS 中的静态库路径修改成你编译出来的静态库的路径。 做完以上的,就执行一次 clean ,qmake 重新编译就OK了,这时候是不是能连接上了啊,哈哈……(这过程的心酸,终于换来了收获的喜悦……啊啊啊) 下面附上测试的 Demo 代码 staticTest.pro
  1. #-------------------------------------------------
  2. #
  3. # Project created by QtCreator 2016-01-16T20:55:32
  4. #
  5. #-------------------------------------------------
  6. QT       += core gui sql
  7. greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
  8. QTPLUGIN += qsqlodbc
  9. TEMPLATE = app
  10. SOURCES += main.cpp\
  11. mainwindow.cpp
  12. HEADERS  += mainwindow.h
  13. FORMS    += mainwindow.ui

---------------------------------------------------
mainwindow.cpp
  1. #include "mainwindow.h"
  2. #include "ui_mainwindow.h"
  3. #include <QDebug>
  4. #include <QtSql/QSqlDatabase>
  5. #include <QtSql/QSqlError>
  6. #include <QtSql/QSqlDriver>
  7. #include <QtPlugin>
  8. Q_IMPORT_PLUGIN(QODBCDriverPlugin)
  9. MainWindow::MainWindow(QWidget *parent) :
  10. QMainWindow(parent),
  11. ui(new Ui::MainWindow)
  12. {
  13. ui->setupUi(this);
  14. }
  15. MainWindow::~MainWindow()
  16. {
  17. delete ui;
  18. }
  19. void MainWindow::on_pushButton_clicked()
  20. {
  21. qDebug()<<"haha";
  22. QSqlDatabase qDB = QSqlDatabase::addDatabase("QODBC");
  23. qDB.setHostName("127.0.0.1");
  24. qDB.setDatabaseName("Driver={sql server};server=127.0.0.1;database=MyTempDB;");
  25. qDB.setUserName("sa");
  26. qDB.setPassword("123456");
  27. bool IsOpen = qDB.open();
  28. if(IsOpen)
  29. {
  30. qDebug()<<"connect to Database Success.";
  31. }
  32. else
  33. {
  34. qDebug()<<"Connect failed!";
  35. QSqlError qerror = qDB.lastError();
  36. qDebug()<<qerror.text();
  37. }
  38. qDebug() << "Available drivers:";
  39. QStringList drivers = QSqlDatabase::drivers();
  40. foreach(QString driver, drivers)
  41. qDebug() << "\t" << driver;
  42. }

*/

*--------------------------------------

** Edit by : 小菜

** Time:     2016-01-19

*--------------------------------------

*/

http://blog.csdn.net/humadivinity/article/details/50545100

如何在 静态编译的QT 5.5.1 中 使用数据库插件连接 ODBC(调用静态插件)的更多相关文章

  1. VS2010使用静态编译的qt库(Qt 5)

    Qt 5引入了一种新的编写方式. Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便. 虽然以前为了方便,直接安装的q ...

  2. VS2010使用静态编译的qt库

    Qt开发界面很方便,但发布程序就不那么方便了,你的把引用到的dll一起发布才行,要是能静态编译就好了,发布的时候只有一个exe多方便. 虽然以前为了方便,直接安装的qt-windows-opensou ...

  3. Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

    When compiling Qt you can choose one of these options based on the configure command line: no OpenSS ...

  4. VS2010 win7 QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip, 不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0 ...

  5. 记录下 QT Linux 静态编译遇到的坑

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  6. Linux下快速静态编译Qt以及Qt动态/静态版本共存

    Qt下静态编译Qt,根据我的经验,如果按照Windows下那种直接拿官方sdk安装之后的文件来编译是行不通的,需要直接下载Qt的source包,目前诺基亚的源码叫做qt-everywhere-open ...

  7. Linux/Ubuntu下 静态编译Qt程序

    一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...

  8. Linux下静态编译Qt程序

    一般情况下,我们用Qt编译出来的程序是要依赖于系统Qt库的,也就是这个程序移到别的没有安装Qt库的系统上是不能使用的.会提示缺少……库文件之类的错误.这就是动态编译的结果. 但是如果我们想编译一个程序 ...

  9. 亲测VS2010纯静态编译QT4.8.0,实现VS2010编译调试Qt程序,QtCreator静态发布程序(图文并茂,非常详细)

    下载源代码,注意一定是源码压缩包如qt-everywhere-opensource-src-4.8.0.zip,不是Qt发布的已编译的不同版本的标准库如qt-win-opensource-4.8.0- ...

随机推荐

  1. VC++客户端 缩小包的尺寸

    图片压缩: 1. 背景图片尺寸一般为100-300KB,使用纯色图片可缩小至1-3KB,方法得当可缩小1M多: 2. .ico一般为100-200KB,16x16一直到256x256,可减去其中几种尺 ...

  2. 用document.title=“xxx”动态修改title,在ios的微信下面不生效的解决办法!

    //需要jQuery var $body = $('body'); document.title = 'title'; // hack在微信等webview中无法修改document.title的情况 ...

  3. 远程连接mysql数据慢的问题

    由于公司没有服务器,买的阿里云的服务器用于开发,所以就在本地连接服务器的mysql. 连接很慢,打开表也很慢,一开始没多想,以为是网络慢而已. 最近,开发经常要使用navicat连接数据库,实在是太慢 ...

  4. hdu 2509 Be the Winner 博弈

    题目链接 有n堆苹果, 对于其中的每一堆的x个苹果, 它是放在一条线上的. 你每次可以对一堆苹果进行操作, 可以取y个, 1<=y<=x. 然后如果你是取的一条线上中间的苹果, 那么这一堆 ...

  5. Android02-Activity01

    1.概念:活动是一种可以包含用户界面的组件, 主要用于和用户进行交互. 2.常见操作:      1.隐藏Activity的标题栏: @Override protected void onCreate ...

  6. FirewallD 详解

    在CentOS7开始,默认是没有iptables的,而是使用了firewall防火墙.与时俱进,简单的整理了一下firewall的使用方法.关于详细的介绍参考官网,就不搬字了.这个网站有中文选项.可以 ...

  7. VC维的物理意义

    vc约等于可调节参数的个数 来自为知笔记(Wiz)

  8. 普林斯顿大学算法课 Algorithm Part I Week 3 重复元素排序 - 三路快排 Duplicate Keys

    很多时候排序是为了对数据进行归类,这种排序重复值特别多 通过年龄统计人口 删除邮件列表里的重复邮件 通过大学对求职者进行排序 若使用普通的快排对重复数据进行排序,会造成N^2复杂度,但是归并排序和三路 ...

  9. 常见 wifi热点的linux 驱动

    小度Wifi.360Wifi Windows.linux驱动 小度wifi什么的就是一个无线网卡,当然可以自由使用,然官方却说不支持无限网卡功能… 现提供Windows平台和linux平台的驱动安装方 ...

  10. MySQL- 锁机制及MyISAM表锁

    锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许 多用户 共享的资源.如何保证数据并发访问的一致性.有效性是所 ...