您的位置:首页 > 编程语言 > Qt开发

编译Qt的MySql驱动

2010-03-22 23:26 281 查看
这两天帮一兄弟做毕业设计,其中牵扯到数据库的使用,准备用Qt来做了,对于数据库的选择则是简单的来,就用mysql了,因为说实话:我以前从来没接触过具体的数据库,就知道些书本上的什么select语句。这次也算是全新的小尝试。

     这其中最需要解决的就是两者怎么关联的问题,因为版权的问题:Qt没有提供MySql的对应驱动,而只是给出了源码,所以需要我们自己来编译驱动,这也是最能卡人和最有意思的地方:
在Qt4的assistant上如下说明:
①:You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module.
②:Build the plugin as follows (here it is assumed that MySQL is installed in C:/MYSQL): 
   cd %QTDIR%/src/plugins/sqldrivers/mysql 
   qmake -o Makefile "INCLUDEPATH+=C:/MYSQL/INCLUDE" "LIBS+=C:/MYSQL/LIB/OPT/LIBMYSQL.LIB" mysql.pro
 
   nmake
 
 基本上照着这个步骤来就是了,但这其中要注意以下几点:
 1:首先安装mysql的时候一定要完全安装,而不能一路next下去,否则编不过去。
2:在执行makefile时:可能会提示说缺少很多mysql的头文件什么的,那这个时候需要添加以下mysql/include路径到环境变量path下,或者直接全部把对应这个文件夹下的头文件都拷贝到VC对应的头文件夹下。

p3:我个人的配置在nmake的时候提示说是:
"fatal error LNK1104: cannot open file 'C:/Program.obj'"
这个问题就很有意思了,查了一下,主要是系统会把你指定的path路径进行修改!
网上有一段解释很经典:
  例如你要加入一个ABC.lib的链接库,完整路径为"C:/Program Files/ABC.lib",
  如果被IDE改写的话会变成"C:/Program" "Files/ABC.lib"
  相应的命令行变成Link (...) "C:/Program" "Files/ABC.lib"
  那么链接器会要求提供"C:/Program.obj"文件,由于该文件不存在,所以会 
  返回上面的调试信息'LINK : fatal error LNK1104: 无法打开文件  “C:/Program.obj”'!

       原来都是路径中某个目录名中含有空格的缘故,系统给自动篡改了。我自己电脑上边:包括vc和mysql都是默认安装到了 c:/rogram files/目录下,系统一篡改结果就导致出现了原本不存在的program.obj这么个文件。

     那么解决这个问题便变得简单了,第一种解决办法就是把VC mysql都装到没有空格的目录下,但是我的已经装了;而第二种办法就是想办法把目录中的空格给去掉!方法如下:

     WINODWS系统下:对于一个目录下的若干个文件夹,系统会给他们分配一个短名,这类似于C++中的引用,可以同时用于表示这个文件夹。那么我们只要把这些带空格的文件夹名用起短名代替即可! 而查询一个目录下文件夹短名的order是: dir /x    运行此命令后系统会显示出文件夹名和其对应短名来。

      有了可以替代的短名之后,下一步就是对原先的路径进行修改,而对我这里而言:出错是在nmake这一步,而nmake依据的是makefile,所以我们只要把makefile中对应的长名改成短名即可! 但是我们运行前一步生成的makefile是有makefile.debug和makefile.release两个版本的,我试了下,我电脑上是使用的makefile.release版本,你要是不放心,那就把这两个版本的makefile都进行修改,把其中用到的路径中的长路径名全改成对应的短名(我遇到了两个,一个是program files ,一个是/MySQL Server 5.5/,只要把这两个对应修改即可)。

    处理完上边这个问题,再来重新nmake clean,nmake一下应该就没问题了。当然了如果你用的不是vc的compiler,这里就不再是nmake,可能是make之类的,具体情况具体对待。
    编译成功会生成驱动的库文件,而且会保存在QT的对应系统路径下,我们就不用去管它了,可以直接使用,如果你不放心,那就把他们拷贝到lib文件夹下。

//----------------------------------------------------------------------

    有了驱动,下一步是连数据库,这个网上好多人提供了现成的代码,没有太大难度,呵呵~我当时比较抑郁的是:自己不会用数据库,官网下的mysql是纯粹orderline的,没有图形化工具,这个就很抑郁人了,后来同事推荐用mysql front。我集成了一下,很好用。至此:数据库,数据库图形化操作工具,和QT的链接驱动,QT的对应数据库操作都有了,下一步就是简单的call function啦!
    QT还是可以集成基本上所有主流数据库的,我估计编译驱动的方式大同小异,不会有太大难度。有兴趣可以玩玩,我觉得用这个还是很省劲的。

//-------------------------------------------------------------------
    补充一个很有意思的QT支持中文的问题:在QT里要想直接支持中文,我在网上搜索了很多教程,其中颇多谬误之处,又或者不适合我的情况:
    我公司的电脑是英文版的系统,按照网上所说:首先要调用QTextCodec的static function来设置下tr()的编码格式为GB2312,而后把程序中要用到的中文用tr()包含起来。
    做完这两步,我这还是现实乱码,可能网上的这个教程是对的,不过是针对中文版OS而言,对于英文版OS我测试了一下,还要多做一步才能显示中文:
    要把含有中文字符的这个文件(*.cpp或者*.h)给保存成GB2312格式才行,而系统默认是保存成unicode的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息