Qt连接本地Access数据库
2018-01-13 09:19
127 查看
最近做项目需要使用Qt做一个表格,想法是直接绑定本地数据库字段然后显示就行了,由于刚学习Qt不久,过程十分曲折,先博客一篇仅作记录,新手上路,欢迎批评指正。
在Qt中有自带的QSql类是用来操作数据库的,本着面向对象的原则,我决定将数据库连接封装成一个类。先引入头文件
三个类可以通过查Qt的帮助文档搞清楚含义,通俗来讲QSqlDatabase就是连接数据库,QSqlQuery就是查询语句,废话不多说,直接上代码。
.cpp文件是这样的
在Qt中有自带的QSql类是用来操作数据库的,本着面向对象的原则,我决定将数据库连接封装成一个类。先引入头文件
#include <QMutex> //线程保护序列化 #include <QSqlDatabase> #include <QSqlQuery> #include <QSqlError>
三个类可以通过查Qt的帮助文档搞清楚含义,通俗来讲QSqlDatabase就是连接数据库,QSqlQuery就是查询语句,废话不多说,直接上代码。
class MyDataBase { public: MyDataBase(); ~MyDataBase(); private: MyDataBase(const MyDataBase &); MyDataBase operator =(const MyDataBase &); public: static MyDataBase * GetInstance(); bool ConnectAccessDB(const QString &strDBName, const QString &strUser, const QString &strPwd) const; QSqlDatabase GetDatabase() const { return QSqlDatabase::database("MyAccessDB"); } QSqlQuery GetSqlQuery() const { static QSqlQuery query(m_pInstance->GetDatabase()); return query; } bool IsValid() const { return this->GetDatabase().isValid(); } bool IsConnected() const { return this->GetDatabase().isOpen(); } private: static MyDataBase *m_pInstance; };
.cpp文件是这样的
#include "mydatabase.h" #include <QDebug> MyDataBase * MyDataBase::m_pInstance(NULL); MyDataBase::MyDataBase() { } MyDataBase::~MyDataBase() { } MyDataBase * MyDataBase::GetInstance() { if(NULL == m_pInstance) { static QMutex mutex; mutex.lock(); if( NULL == m_pInstance) { static MyDataBase myDB; m_pInstance = &myDB; } mutex.unlock(); } return m_pInstance; } bool MyDataBase::ConnectAccessDB(const QString &strDBName, const QString &strUser, const QString &strPwd) const { QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "MyAccessDB"); const QString strName(QString("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};FIL={MS Access};DBQ=%1;Uid=%2;Pwd=%3") .arg(strDBName) .arg(strUser) .arg(strPwd)); db.setDatabaseName(strName); qDebug()<<strName; if (!db.isValid()) { return false; } if (db.isOpen()) { return true; } if (db.open()) { // QStringList p=db.tables(QSql::AllTables); // for(int i=0;i<p.count();i++) // { // qDebug()<<p[i]; // } return true; } else { qDebug() << db.lastError().text(); return false; } }
相关文章推荐
- 在u-boot状态下用网线连接笔记本,没有本地连接 网口灯也不亮,但是进入QT可以
- Qt学习——与Access数据库建立连接
- QT---FTP练习,连接FTP服务器,浏览其中的文件,下载到本地目录中
- QT5 Access数据库连接方法
- 连接本地Access数据库,返回数据集DataSet
- qt获取”本地连接“的IP
- C#项目打包时连接本地Access数据库的写法
- C#项目打包时连接本地Access数据库的写法
- Windows下Qt应用程序可以连接本地MYSQL不能连接linux的问题
- Qtcreator连接本地Sqlite数据库(Qt5.5 + Sqlite3.15)
- Qt远程连接access数据库
- cmd 设置本地连接
- 用C++ Builder连接加密的Access数据库
- 利用ADB 协议建立PC与手机端本地unix套接字的连接
- 远程连接时有时无本地磁盘(转贴)
- tomcat无法连接本地服务器问题
- [C#]连接带有密码的ACCESS数据库时出现“无法启动应用程序。工作组信息文件丢失,或是已被其它用户以独占方式打开”的解决方法
- ASP连接Access数据库
- MFC和ACCESS数据库的连接(C_Answers团队开发学生信息管理系统所用)
- memcached 连接本地问题