QT 调用Access数据库 (QT ODBC Driver)

来源:互联网 发布:晨枫网络是真的吗 编辑:程序博客网 时间:2024/05/19 04:55
http://blog.csdn.net/xtconan/archive/2009/08/11/4436452.aspx

最近有兄弟让我帮他写个简单的程序,需要调用MS Office 中的Access数据库文件进行操作,希望我用VC写。因为习惯了QT的简单明了,同样的windows平台程序,就选择用QT帮他写了。

    以前项目中使用过Sqlite进行数据库操作,基本的流程大致清楚,但是这次需要调用Access,自然需要用到其他的数据库Driver,也就是QT通过ODBC来连接SQLServer。

    首先需要确认自己安装QT是否带有所需要的DB Driver。

    通常安装QT会默认安装Sqlite的Driver,我们可以用以下代码进行测试

   

QSqlDatabase m_db = QSqlDatabase::addDatabase("QSQLITE"); m_db.setDatabaseName("test.db"); if ( !m_db.open()) { qDebug()<<"DB open error!"; } else { qDebug()<<"DB open Sucess!"; }

 

而测试ODBC连接则不能简单的仿照,setDatabaseName不是简单的输入数据库名,而是DNS名。可以采用DSN连接字符串直接连接ODBC数据库,也可直接设置DNS(没有用过)。

 

简单来说, 数据库名应该这样写  "Driver={microsoft access driver(*.mdb)};dbq=*.mdb;uid=admin;pwd=pass;"

view plaincopy to clipboardprint?
  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 m_db = QSqlDatabase::addDatabase("QODBC"); m_db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=db.mdb;UID=;PWD="); bool ok = m_db.open(); if(ok) { QDebug()<<"数据库打开成功"; } else { QDebug()<<数据库打开失败"; }

 

有一种更简单的测试方法如下

 

view plaincopy to clipboardprint?
  1. int main(int argc, char* argv[]) {  
  2. QApplication app(argc, argv);  
  3. qDebug() << "Available drivers:";  
  4. QStringList drivers = QSqlDatabase::drivers();  
  5. foreach(QString driver, drivers)  
  6. qDebug() << "\t" << driver;  
  7. QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");  
  8. qDebug() << "ODBC driver valid?" << db.isValid();  
  9. }  
  10. 如果输出中有  
  11. Available drivers:  
  12.   "QSQLITE"    
  13.   "QODBC4"  
  14.   "QODBC"  
  15. ODBC driver valid? true  
  16. 就说明已经可以成功支持ODBC了。  
int main(int argc, char* argv[]) { QApplication app(argc, argv); qDebug() << "Available drivers:"; QStringList drivers = QSqlDatabase::drivers(); foreach(QString driver, drivers) qDebug() << "\t" << driver; QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); qDebug() << "ODBC driver valid?" << db.isValid(); } 如果输出中有 Available drivers: "QSQLITE" "QODBC4" "QODBC" ODBC driver valid? true 就说明已经可以成功支持ODBC了。

 

 

如果你在安装QT时什么也没有配置,通常只会有QSQLITE出现。这样就需要安装QODBC4。

 

编译ODBC插件。可以通过 configure -plugin-sql-odbc来保证,也可以单独编译~\src\plugins\sqldrivers\odbc
qmake -t vclib odbc.pro
qmake
nmake
编译后,在~\plugins\sqldrivers\下应该有qsqlodbcd4.dll(debug)或qsqlodbc4.dll

 

这个方法是以前没有注意到的,也就是在编译QT源码时如果有些插件或功能没有编译进去,可以单独通过上述方法编译,非常灵敏,以前都没有注意到。

 

通过上述步骤就拥有了ODBC的QT driver了

 

于是就可以写程序了。

 

在QSqlDatabase设置完后,再通过

 

QSqlQuery *m_pQuery = new QSqlQuery(m_db);

m_pQuery->exec("select * FROM Table1“) 这些常规sql语句就可以进行操作了

 

 

 

程序写完后,需要将相应的库文件放在一起。除了常规的QtCore4.dll QtGui4.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
原创粉丝点击