一.在网上找了很多关于这方面的文章,必须要参考的,就是本坛的XChinux最先发表的帖子,链接如下:
http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1, 接下来对自己的操作进行说明:
二.先讨论下两个
数据库的选择:
从网上看到很多种说法,个人比较支持选择PostgreSQL,原因除了PGSQL比MYSQL更加自由以外,就是MYSQL的中文支持实在让人头疼,即使驱动加载成功,数据库中的中文还是会乱码,我测试的时候是即使把整个库都改成UTF8仍然无效,本来想参考网上的帖子修改文件,再重新
编译驱动,无耐,我的
QT4.7.0竟然连那个QCODEC的函数都没找到,我因此也放弃了我最心爱的MYSQL,开始PGSQL测试,当PGSQL驱动加载成功后,中文字符一切正常,没经过任何修改.
三.闲话不说,上酸菜:
1.安装PostgreSQL9.0 WINDOWS版,安装时一定要记住locale选择China->Singapore,不要选择默认,详细
安装步骤请自己百度或GOOGLE.
2.添加环境变量的PATH如下:
PATH=(此处省略一万字:因为每个人的应用不同,所以之前的PATH变量也不同,但是,后面的路径是必须添加的路径)C:\WINDOWS\system32;C:\WINDOWS;E:\mysql\bin;E:\postgresql\bin;e:\programfiles\qt\2011.04.02\qt4.7.2\bin;E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\qmake;E:\ProgramFiles\Qt\2011.04.02\mingw\bin;E:\ProgramFiles\Qt\2011.04.02\mingw\mingw32\bin;E:\mysql\lib;E:\mysql\include;E:\postgresql\bin;E:\postgresql\include
3.命令行提示符下:
- E:\
- cd E:\postgresql\lib
- reimp -d libpq.lib
- dlltool -k -d LIBPQ.def -l libpq.a
reimp命令是从附件的包里提取的,请将附件里的文件解压至mingw目录即可.
4.修改E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql\psql.pro文件,在第二行加入如下内容:
INCLUDEPATH += "E:\postgresql\include" (注意这里是
INCLUDEPATH而不是INCLUDE,在这里吃过亏)
LIBS += "E:\postgresql\lib\libpq.lib"
保存退出.
5.命令行提示符下输入:
- cd E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql
- qmake -o Makefile "INCLUDEPATH+=E:\POSTGRESQL\INCLUDE" "LIBS+=E:\POSTGRESQL\LIB\LIBPQ.A" psql.pro
- mingw32-make
上面大写的字母要保持大写,同样注意INCLUDEPATH不要少写PATH,否则编译的时候会提示少头文件.
6.确认E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\plugins\sqldrivers路径下是否有生成的libqsqlpsqld4.a和qsqlpsqld4.dll文件,没有就从E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\src\plugins\sqldrivers\psql\debug\将此两个文件拷贝到E:\ProgramFiles\Qt\2011.04.02\Qt4.7.2\plugins\sqldrivers目录下.至此大功告成,请按测试程序进行测试.
对以上内容的补充:
1.项目的
PRO文件里要包含
sql的模块加载,我的PRO内容为:QT += core gui sql
2.本编译过程使用WIN平台的mingw32-make为编译器.
3.连接函数使用QPSQL加载驱动,连接函数如下:
bool createConnection()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("localhost");
db.setDatabaseName("accounts");
db.setUserName("postgres");
db.setPassword("Aa123456");
if(!db.open()){
QMessageBox::critical(0,QObject::tr("Database Error"),db.lastError().text());
return false;
}
QSqlQuery query;
query.exec("SELECT * FROM bank;");
return true;
}
以上仅作参考,具体
问题仍需变换思路进行,本帖后面请不要提问题,不做回答,抱歉.
[ 此帖被chenjiuhai在2011-04-14 16:54重新编辑 ]