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

版权声明:本文为博主原创文章,未经博主允许不得转载。

QT5 Access数据库连接方法

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

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

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

Qt操作Access数据库

Qt为数据库访问提供QtSql模块实现了数据库与Qt应用程序的无缝集成。QtSql模块使用驱动插件与不同的数据库接口通信。Qt自带有QODBC驱动,通过windows平台上提供的ODBC驱动访问支持O...
  • Zhangchen9091
  • Zhangchen9091
  • 2014年09月27日 09:36
  • 753

qt 连接access数据库

if(ui->lineEdit->text()!=tr("")) //判断输入框是否为空 { QSqlDatabase db = QSqlDataba...
  • tianyafengqian
  • tianyafengqian
  • 2013年11月19日 18:33
  • 1162

java连接数据库(二)access: 简单连接步骤

用到的工具: java JDK 1.7 Access 2013 ODBC数据源
  • u010214003
  • u010214003
  • 2014年09月18日 01:10
  • 8423

Qt连接mysql数据库,及出现的问题

1.首先在.pro文件中添加QT += sql; 2.在程序中添加如下代码: //输出可用数据库 qDebug()...
  • songsong9181
  • songsong9181
  • 2016年10月24日 10:48
  • 317

2015年7月4日解决问题:eclipse连接access数据库问题//java五中布局及其应用方法//equals()与==的区别等

eclipse连接access数据库问题//java五中布局及其应用方法//equals()与==的区别等
  • yangmei2013016225
  • yangmei2013016225
  • 2015年07月04日 22:09
  • 583

Asp.net_连接Access数据库

今天一个朋友让我帮忙做一个asp.net的小网站,需要用到得是access数据库。一直以来,学习web开发,都是用sql server或者是mysql。虽说access数据库简单易用,但是没用过,去做...
  • zlfxy
  • zlfxy
  • 2013年04月10日 12:54
  • 9175

java连接access数据库说明以及示例代码

之前 我链接access的时候 经常出现odbc源驱动器的错误   后来我才发现 其实是这样的 要连接Access数据源,首先要建立一个JDBC-ODBC桥接器,其方法是: Class.f...
  • u012491166
  • u012491166
  • 2015年01月28日 21:55
  • 2255

JDK1.8 连接Access数据库

JDK1.8 连接Access数据库 JDBC (JavaDB Connection)---Java数据库连接 JDBC是一种可用于执行SQL语句的JAVA API------推荐文章 http://...
  • ljheee
  • ljheee
  • 2016年05月01日 16:05
  • 12450
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Qt连接本地Access数据库
举报原因:
原因补充:

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