Qt连接本地Access数据库

原创 2018年01月13日 09:19:54

最近做项目需要使用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;
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37275429/article/details/79049448

JDBC连接MYSQL数据库

讲解使用JDBC连接MySQL数据库,为java开发人员必须掌握的技能!
  • 2017年11月29日 08:04

QT5 Access数据库连接方法

申明:作者本人也是QT新手,,如有错误望包涵 1.首先需要在.pro中加入 QT += sql 2. .cpp中(最好都添加) #include #include #include ...
  • J_ohnny
  • J_ohnny
  • 2014-08-01 11:48:23
  • 3702

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

http://blog.csdn.net/xtconan/archive/2009/08/11/4436452.aspx 最近有兄弟让我帮他写个简单的程序,需要调用MS Office...
  • jiong_1988
  • jiong_1988
  • 2012-04-26 16:11:13
  • 5045

使用QT对access数据库进行操作——————数据库中表、记录和域的读取

开始学习QT和数据库了,边学习边写了一个玩具程序,读表记录域如果有什么更简单的方法,请大家指点。 #include #include #include #include ...
  • apn172
  • apn172
  • 2011-12-19 18:36:17
  • 8882

qt操作access数据库

  • 2015年03月18日 19:39
  • 12KB
  • 下载

Qt中使用QODCB访问Access数据库

      Qt为数据库访问提供QtSql模块实现了数据库与Qt应用程序的无缝集成。QtSql模块使用驱动插件与不同的数据库接口通信。Qt自带有QODBC驱动,通过windows平台上提供的ODBC驱...
  • xysq
  • xysq
  • 2009-03-02 20:39:00
  • 8454

QT对access数据库进行操作

使用QT对access数据库进行操作——————数据库中表、记录和域的读取 #include  #include #include #include #include ...
  • jolin678
  • jolin678
  • 2016-07-21 23:13:24
  • 3379

QT数据库学习和以连接Access为例

Qt对数据库的操作主要是通过QtSql模块来进行,我们需要在项目文件(.pro文件)中添加一行代码”QT += sql”,这样才能使用数据库模块。详细的内容可以在帮助文档SQL programming...
  • cibiren2011
  • cibiren2011
  • 2016-10-11 22:26:58
  • 1224

ubuntu下qt连接各种数据库解决方法

  • 2013年03月12日 13:46
  • 1KB
  • 下载

qt4:读取 access 数据库

一个读取access的例子1。--------------mydialog.cpp--------------#include "mydialog.h"#include #include #inclu...
  • lhfeng
  • lhfeng
  • 2007-10-29 17:50:00
  • 2395
收藏助手
不良信息举报
您举报文章:Qt连接本地Access数据库
举报原因:
原因补充:

(最多只允许输入30个字)