您的位置:首页 > 编程语言 > Qt开发

Qt连接本地Access数据库

2018-01-13 09:19 127 查看
最近做项目需要使用Qt做一个表格,想法是直接绑定本地数据库字段然后显示就行了,由于刚学习Qt不久,过程十分曲折,先博客一篇仅作记录,新手上路,欢迎批评指正。

在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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Qt 数据库 Access