1, 查看,安裝驅動
2, 連接,操作,顯示
3, 中文支持
1---------------------
首先需要确认自己安装QT是否带有所需要的DB Driver。
通常安装QT会默认安装Sqlite的Driver,我们可以用以下代码进行测试
QSqlDatabase m_db =QSqlDatabase::addDatabase("QSQLITE");
1. m_db.setDatabaseName("test.db");
2. if ( !m_db.open())
3. {
4. qDebug()<<"DB openerror!";
5. }
6. else
7. {
8. qDebug()<<"DB open Sucess!";
9. }
而测试ODBC连接则不能简单的仿照,setDatabaseName不是简单的输入数据库名,而是DNS名。可以采用DSN连接字符串直接连接ODBC数据库,也可直接设置DNS(没有用过)。
测试数据库驱动的方法
(打開.pro文件加入win32:CONFIG+=console
QT +=SQL
這樣就可以顯示debug信息
头文件中要用到:#include <QtDebug>
)
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
//w.show();
qDebug()<< QSqlDatabase::drivers();
return a.exec();
}
如果你在安装QT时什么也没有配置,通常只会有QSQLITE出现。这样就需要安装QODBC4。
编译ODBC插件。可以通过 configure -plugin-sql-odbc来保证,也可以单独编译~\src\plugins\sqldrivers\odbc
qmake -tvclib odbc.pro
qmake
make
编译后,在~\plugins\sqldrivers\下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll
这个方法是以前没有注意到的,也就是在编译QT源码时如果有些插件或功能没有编译进去,可以单独通过上述方法编译,非常灵敏,以前都没有注意到。
通过上述步骤就拥有了ODBC的QTdriver了
于是就可以写程序了。
2--------------------
简单来说, 数据库名应该这样写 "Driver={microsoft accessdriver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"
1. QSqlDatabase m_db =QSqlDatabase::addDatabase("QODBC");
2. m_db.setDatabaseName("DRIVER={Microsoft Access Driver(*.mdb)};FIL={MS Access};DBQ=db.mdb;UID=;PWD=");
3. bool ok = m_db.open();
4. if(ok)
5. {
6. QDebug()<<"数据库打开成功";
7. }
8. else
9. {
10. QDebug()<<数据库打开失败";
11. }
在QSqlDatabase设置完后,再通过
QSqlQuery*m_pQuery = new QSqlQuery(m_db);
m_pQuery->exec("select* FROM Table1“) 这些常规sql语句就可以进行操作了
程序写完后,需要将相应的库文件放在一起。除了常规的QtCore4.dllQtGui4.dll QtSql4.dll , 因为在windows下开发的Qt,还要把mingwm10.dll 加上。 最开始我直接将qsqlodbc4.dll 放在程序同级目录下,发现无法打开数据库文件了。最后发现需要建一个sqldrivers文件夹放在同级目录,然后把qsqlodbc4.dll放进去就 可以了。
其他相关可知识参考
http://v.tampacrave.com/html/sejishikongxiangguanwenzhang/20090429/122.html
http://www.cnblogs.com/buffer/archive/2009/05/25/1488613.html
来自:http://hi.baidu.com/leonkuo1984/blog/item/0df9cdd063a81784a1ec9cf2.html
本文介绍的是QT与access,首先加载驱动db=QSqlDatabase::addDatabase("QODBC","db");// 使用odbc数据库驱动,详细内容请看下文。
连接数据库需要的头文件:
#include<QSqlDatabase>
#include<QSqlQuery>
连接微软的Access
1. QSqlDatabase ldb =QSqlDatabase::addDatabase("QODBC");
2. ldb.setDatabaseName("DRIVER={MicrosoftAccess Driver (*.mdb)};FIL={MSAccess};DBQ=system.mdb;UID=;PWD=xiaozhuset");
3. bool ok = ldb.open();
4. //新定义一个查询集合,并指定 链接关键字。 如果有多个连接,可以随意指定一个你需要的。
5. QSqlQuery mquery=QSqlQuery::QSqlQuery(ldb);
6. if(ok)
7. {
8. bool isok=mquery.exec("select * fromsql_set;");
9. if (!isok)
10. {
11. ldb.close();
12. return -1;
13. }
14. //这个是必须的,因为查处的结果集当前位置不在第一条记录上。
15. mquery.next();
16. QStringsHostName=mquery.value(1).toString();
17. QStringsDatabaseName=mquery.value(2).toString();
18. QStringsUserName=mquery.value(3).toString();
19. QStringsPassword=mquery.value(4).toString();
20. //清除结果集
21. mquery.clear();
22. // 如果该连接不再使用,就可以关闭。
23. ldb.close();
24. //这里是将从数据库读出的数据写到一个list控件里
25. ui.list_out->insertItem(ui.list_out->count(),sHostName);
26. ui.list_out->insertItem(ui.list_out->count(),sDatabaseName);
27. }
28. else
29. {
30. // 打开本地数据库失败,
31. QMessageBox::critical(0, QObject::tr("读取Access数据库错误!"),db.lastError().text());
32. return -1;
33. }
sql常用的頭文件
#include <QtGui/QApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>
#include <QVariant>
#include <QString>
顯示(分為三層)
底層 》》》》數據庫(access,sql2008,mysql,oracle)
中間層 》》》
QSqlQuery
3-------------------
在默认的qt程序中是不支持中文语言的,会出现以下两种情况,只要在代码中加入下面的内容即可
1、当使用中文语言的时候会出现乱码,
2、数据库查询的时候查询不出结果
1. int main(int argc, char *argv[])
2. {
3. QApplication app(argc, argv);
4. QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));
5. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));
6. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));
7. MainWindow w;
8. w.show();
9. return app.exec();
10. }