QT链接mysql驱动程序出现的问题详解

来源:互联网 发布:淘宝运营公司那家强 编辑:程序博客网 时间:2024/06/17 06:34

QT链接mysql驱动程序出现的问题详解

首先列举一下Qt顺利链接mysql的操作步骤:

    1、安装MySQL时选择安装include和lib文件,安装目录中不能有空格,一般设置C:\mysql
    2、设置环境变量,需添加如下的环境变量:
          C:\Qt\2010.02.1\bin;
          C:\Qt\2010.02.1\qt\bin;
          C:\Qt\2010.02.1\mingw\bin;
          C:\mysql\lib\opt;
          C:\mysql\include;
          C:\mysql\bin
        上述环境变量不能缺省,网上分享的解决办法提及环境变量的很少,若设置不正确编译过程中会遇到很多错误。
    3、打开Qt Command Prompt,输入第一条命令:cd %QTDIR%\src\plugins\sqldrivers\mysql 后按回车
         然后输入第二条命令: qmake "INCLUDEPATH+=C:\MySQL\include"
         "LIBS+=C:\MySQL\lib\opt\libmysql.lib" mysql.pro
         最后输入:mingw32-make 进行编译。
    4、上述操作完成后,在C:\Qt\2010.02.1\qt\plugins\sqldrivers就会生成所需的驱动文件。
 
    上述四条是不出问题的情况下的步骤,不过一般不会那么顺利,不同的人安装的过程中会出现不同的问题,这是一个折磨人的过程,但也是一个学习的过程哦。下面就说说我在安装过程中遇到的一些问题。
 
 1、环境变量设置错误,没有将上述六条路径全部正确输入。
 2、正确输入环境变量后在Qt Command Prompt中编译出现C:\mysql\libmysql.lib: No such file or directory的
      错误。  
      这是说在C:\mysql目录中找不到libmysql.lib库文件, 到C:\mysql\lib\opt目录中复制该文件放到C:\mysql中然
      后再编译就会成功。
 3、WARNING: (internal):1: Unescaped backslashes are deprecated. 这种错误的解决方法如下:
      (1)进入目录E:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql,用记事本打开mysql.pro,在第二行添加如下的信息:INCLUDEPATH+="C:\MySQL\include" LIBS+="C:\MySQL\lib\opt\libmysql.lib"
      (2)在dos下输入:qmake -o Makefile mysql.pro此时可能也会提示:
              WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped backslashes are
              deprecated.
             WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped backslashes are
              deprecated.
             WARNING: e:\Qt\2010.05\qt\src\plugins\sqldrivers\mysql\mysql.pro:2: Unescaped backslashes are
              deprecated.
但是对最后的结果没有影响。
      (3)输入:mingw32-make(使用nmake或者是make提示不是内部或外部命令,所以用了这个命令)
      (4)上述操作完毕后,在C:\Qt\2010.02.1\qt\plugins\sqldrivers就会生成所需的驱动文件,包含四个:
               qsqlmysql4.dll
               libqsqlmysql4.a
               qsqlmysqld4.dll
               libqsqlmysqld4.a
 
4、e:/qt/2010.05/mingw/bin/../lib/gcc/mingw32/4.4.0/../../../../mingw32/bin/ld.exe cannot find -1libmysql
      该问题产生的原因是在执行mingw32-make时,编译器在 E:\Qt\2010.05\mingw文件夹中找不到对应的库文
      件。此问题的解决方法如下:
      将C:\MySQL\lib\opt中的libmysql.lib拷贝到E:\Qt\2010.05\mingw\lib中即可解决。
 

上述问题在初用Qt时困扰了我很长时间,那时真是一种煎熬,希望对正在使用Qt同时也遇到这类问题的网友提供一些帮助!



1.首先当然是要有VS2008+Qt4.7的开发环境。

 

2.安装MySQL,最好是4以后的版本,安装MySQL时要勾住“C Include Files 和 Lib Files”选项,这样才能装上MySQL的头文件和链接库。(或者选择FULL安装)

 

3.由于MySQL先天的路径问题(就是它的路径里面有空格),我们需要把它的include和lib目录复制出来,放在一个没有空格的目录下。

    在C盘建立Mysql5.5文件夹,把include和lib放进去。

 

4. 打开Qt Command Prompt 窗口,输入命令:

cd  C:\Qt\4.7.4\src\plugins\sqldrivers\mysql\

 

5. 输入命令:

qmake -o "INCLUDEPATH+=C:\Mysql5.5\include" "LIBS+=C:\Mysql5.5\libmysql.lib" mysql.pro

        这里面的路径就是第3步里面创建的目录

 

6.输入命令: nmake release debug

      到这里,其实MySQL的驱动已经编译完了,但是可能编译出来的动态链接库没有自动拷贝到C:\Qt\4.7.4\plugins\sqldrivers 中去。没关系,我们手动拷贝如下:

【拷贝1】将编译生成的mysql驱动

   C:\Qt\4.7.4\src\plugins\sqldrivers\mysql\release和

   C:\Qt\4.7.4\src\plugins\sqldrivers\mysql\release\debug   里面把qsqlmysql4.dll、qsqlmysql4.lib、qsqlmysqld4.dll、qsqlmysqld4.lib拷到 c:\Qt\4.7.4\plugins\sqldrivers 里面就行了。

【拷贝2】将libmysql.dll拷贝到C:\Qt\4.7.4\bin。

 

下面可以进行Qt数据库的测试例子了:

int main(int argc, char *argv[])

{

   

    QApplication app(argc, argv);

    qt_mysql w;

    QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk")); //设置tr()编码。

     QSqlQueryModel *model;

     QTableView *table=new QTableView;

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

    db.setHostName("10.3.2.84");   //数据库服务器

     db.setDatabaseName("petct");   //数据库名

     db.setUserName("admin");      //登录名

     db.setPassword("admin");    //密码

    if(db.open())

     {

          QSqlQuery query;

         query.exec("update patient_basic_info set sex ='m 'where patient_id = 3");

         query.exec("DELETE FROM patient_basic_info where patient_id = 3");

          query.exec("SELECT patient_id , patient_name,ID_card_no,sex FROM patient_basic_info");//name为属性名;

        query.next();

        QString name = query.value(1).toString();                                                                                 w.ui.patient_name_text->setText(name);

         model=new QSqlQueryModel;

         model->setQuery(query);

         table->setModel(model);

      }

      else

      {

        // 数据库打开失败,显示数据库返回的失败信息

        QMessageBox::critical(0,QObject::tr("数据库打开失败"),db.lastError().text());

       }

    w.show();

     QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));

     return app.exec();

}

 

 

附件使用,

1、将libmysql.dll拷贝到C:\Qt\4.7.4\bin 这样Qt驱动可以调用mysql,打开数据库

2、将qsqlmysql4.dll、qsqlmysql4.lib、qsqlmysqld4.dll、qsqlmysqld4.lib拷贝到C:\Qt\4.7.4\plugins\sqldrivers 这就是Qt mysql的驱动


0 0
原创粉丝点击