QT 連接access

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>


►单一数据库连接:
►static bool sqlConnection(const QString& HostName,
►                          const QString& DatabaseName,
►                          const QString& UserName,
►                          const QString& Password)
►{
►    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
►    db.setHostName(HostName);
►    db.setDatabaseName(DatabaseName);
►    db.setUserName(UserName);
►    db.setPassword(Password);
►    if(!db.open())
►    {
►        QMessageBox::critical(0, QObject::tr("Error"),
►                                             QObject::tr("The database reported an error: %1").arg(db.lastError().text()));
►        return false;
►    }
►    //在Qt数据库连接后,运行"SET NAMES 'UTF8'"语句或"SET NAMES 'GBK'"。
►    //db.exec("SET NAMES 'UTF8'");
►    return true;
►}



顯示(分為三層)

底層  》》》》數據庫(access,sql2008,mysql,oracle)

中間層 》》》

QSqlQuery

►QSqlQueryModel:一个只读的读取数据库数据的模型。
►QSqlTableModel:一个可读写的单一表格模型,可以不用写SQL语句。
►QSqlRelationalTableModel:QSqlTableModel的一个子类,可多表关联在一起。
►这些类都继承于QAbstractTableModel,而它们又都继承于QAbstractItemModel
顯示層》》》
QListView、QTableView、QTreeView  QTableWidget

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.    }  

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值