一、连接Access数据库:

① 在.pro文件中添加 QT+=sql ;

② 在Qt中有自带的QSql类是用来操作数据库的,将数据库连接封装成一个类,引入头文件。三个类可以通过查Qt的帮助文档搞清楚含义,通俗来讲QSqlDatabase就是连接数据库,QSqlQuery就是查询语句;

#include <QMutex>   //线程保护序列化
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QtSql/QSqlIndex>
#include <QtSql/QSqlRecord>
#include <QTextStream>
#include <QStringList>
#include <QVariant>
#include <windows.h>
#include <QFile>
#include <QFileDialog>typedef struct
{QString a;DWORD   b;long    c;
}CDBPARAMETER;typedef std::vector<CDBPARAMETER*> ParamListVec;class MyDataBase
{
public:MyDataBase();~MyDataBase();private:MyDataBase(const MyDataBase &);MyDataBase operator =(const MyDataBase &);private:static MyDataBase *m_pInstance;public:static MyDataBase * GetInstance();bool ConnectAccessDB(const QString &strDBName,const QString &strUser,const QString &strPwd) const;public: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();}
};

③.cpp文件

#include "mydatabase.h"
#include <QDebug>MyDataBase * MyDataBase::m_pInstance(NULL);
ParamListVec paramListVec;MyDataBase::MyDataBase()
{}MyDataBase::~MyDataBase()
{this->GetDatabase().close();
}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;if(QSqlDatabase::contains("MyAccessDB")){db = QSqlDatabase::database("MyAccessDB");}else{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);if (!db.isValid()){return false;}if (db.isOpen()){return true;}if (db.open()){return true;}else{qDebug() << db.lastError().text();return false;}
}

④调用连接Access

.h
MyDataBase *p_ParamWrite;.cpp
p_ParamWrite->GetInstance();QString filePath = qApp->applicationDirPath + QString("/xxx/%1").arg(DSN);//存放位置
bool ret = p_ParamWrite->ConnectAccessDB(filePath,User,Psw);if(ret == false)
{//失败
}
else
{//成功
}

⑤运行并debug打印,测试是否连接成功,如果连接失败,提示driver not load;

因为程序中使用了QSqlDatabase创建数据库,需要添加相应数据库的驱动:

1)将D:\Qt\Qt5.14.1\5.14.1\mingw73_32(编译器对应)路径下的文件夹plugins复制到exe文件目录下,打开plugins,只保留sqldrivers文件夹,需要确认里面是否有你需要的驱动, 如:程序中使用了QSqlite数据库,则需要有qsqlite.dll(发布版)qsqlited.dll(调试版),

2)在main.cpp文件中添加下面第二行和第三行:

QApplication a(argc, argv);
QString strLibPath(QDir::toNativeSeparators(QApplication::applicationDirPath())+QDir::separator()+"plugins");
a.addLibraryPath(strLibPath);

二、获取Access数据

void MyDataBase::GetDataOfDBParameter()
{QSqlDatabase db = this->GetDatabase();if(!db.isOpen()){return;}    QStringList tables;QString tabName,sqlString;tables = db.tables(QSql::Tables);paramListVec.clear();for (int i = 0; i < tables.size(); ++i)//读表中记录{tabName = tables.at(i);//表名sqlString = "select * from " + tabName;QSqlQuery q(sqlString,db);QSqlRecord rec = q.record();int fieldCount = rec.count();//表列数QString fieldName;for(int j=0;j<fieldCount;j++)//列的名字{fieldName = rec.fieldName(j);}while(q.next())//每一行的数据{QString qvalue = q.value(0).toString();if(qvalue.contains("xxx")){CDBPARAMETER* data = new CDBPARAMETER;data->a = q.value(0).toString();data->b = q.value(1).toUInt();data->b = q.value(2).toFloat();paramListVec.push_back(data);}}}
}

参考文档:

Qt连接本地Access数据库
Qt操作数据库(access为例)

QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection'解决办法

QT程序发布提示driver not load

第二次连接数据库-sqlite数据库连接出错

Qt对Access数据库进行操作(表、字段和域的读取)

Qt获取Access数据库数据相关推荐

  1. php 获取数据库函数吗,如何正确理解PHP获取显示数据库数据函数

    在运用PHP语言对数据库进行操作的时候,我们将会用到mysql_X这一函数库.下面我们将为大家详细介绍有关PHP获取显示数据库数据函数的函数. PHP获取显示数据库数据函数之 mysql_result ...

  2. [VB]获取Access数据库的全部对象

    一个函数,获取Access数据库的全部对象. Public Function GetAllinDB()     Dim i As Integer, tdf As TableDef, qdf As Qu ...

  3. Qt程序连接Access数据库,出现“[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect“错误的解决办法

    Qt程序连接Access数据库,出现 1."[Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序 QODBC3: Unable to connect&q ...

  4. excel oledb mysql_通用Excel设置外部数据源引入Access数据库数据时,提示:“尚未注册 OLE DB 访问接口 Microsoft.Ace.Oledb.12.0”...

    在通用Excel中开发各种ERP.CRM.OA.进销存.内控管理.项目管理.工程施工管理.客户关系管理.绩效考核管理.销售管理.采购管理.仓库管理.行政管理.财务管理.人事管理.生产管理.考勤管理等系 ...

  5. 获取Access数据库中的用户表名

    SQL语句为 SELECT Name FROM MSysObjects WHERE Type=1 AND Flags=0; 这本来没啥问题,但在代码里执行可能会因为权限报错: ('42000', &q ...

  6. .net5 查询Access数据库数据

    最近遇到了一个很有意思的问题 需要去读取Access数据库里面的数据 属实说 第一次遇到Access数据库 网上找了很多教程 大部分都是很久以前的一些教程 写的风格让人看了直呼受不了 要就是哇哇哇一大 ...

  7. 使用express搭建服务器获取MySQL数据库数据

    一.原始的mysql查询方法 先安装mysql cnpm install mysql --save 引入这个db.js之后,才能对数据库进行查询 进行查询 查询结果如下: 二.ORM 介绍 ORM 全 ...

  8. 如何通过OPENROWSET函数向SQL Server导入带工作组(mdw)保护的Access数据库数据(转)...

    注:找这个解决方法很辛苦,有些笨拙,但还好,可以解决问题.适用于SQL Server 2000 原文出自:如何在链接服务器中使用 SQL Server 7.0 分布式查询来访问受保护的 Access ...

  9. 前端连接后端,获取到数据库数据,通过ECharts图标展现在页面上

    话不多说,直接上干货!!!! 一,首先在数据库创建表:如下 二,搭建后端代码,通过localhost的方式,从数据库获取到这些数据. 2.1项目结构,见下图: 创建启动类,Controller,Ser ...

最新文章

  1. 2018新年感谢,写在互联网类脑架构研究十年的前夜
  2. 【BLE MIDI】推荐一个 Android 平台开源 MIDI 软件 MidiSheetMusic ( 相关资料 | Android Studio 中导入 Eclipse 源码 )
  3. CG CTF WEB bypass again
  4. [reprint]如何编写引导程序 Hello World
  5. 容器中运行Fabric区块链网络
  6. 软考(软件设计师)考点总结 -- 计算机组成与体系结构
  7. 红黄绿灯控制系统c语言,微机课设-红、黄、绿灯的控制系统设计.doc
  8. 关于 “文件上传路径 C:/fakepath (安全机制)” 的解说办法
  9. 计算机组成原理期末大纲
  10. 桌面的计算机图标误删了怎么恢复,删除桌面图标-如何恢复桌面图标不小心将某个程序的桌面图标给删了,怎么恢复呢 爱问知识人...
  11. 微信企业号开发常用工具类总结(一)
  12. 开发APP、微信小程序、网页,都需要什么?
  13. 大神李沐被曝离职亚马逊,投身大模型创业!网友:“AI 已成创业致富新思路?”...
  14. segy和su文件格式说明
  15. 谷歌云端硬盘下载文件_如何使用Google云端硬盘中的Microsoft Office文件
  16. 苹果笔记本设置MAC地址和ip地址
  17. Bootstrap后台导航
  18. 浅谈大学计算机专业该如何选择方向
  19. c语言求矩阵特征值的程序,如何用C语言编写求对称矩阵的特征值和特征向量的程序编写对称矩阵的特征值和特征向量,其中矩阵用二维数组保存.特征向量要求有大到小放到数组里....
  20. 描述相机内部参数以及外部参数

热门文章

  1. 【转载】常用滤波器设计软件
  2. k8s node节点 unknown解决方法
  3. javaWeb项目 打印日志
  4. 数据抓取工具有哪些-数据抓取工具免费推荐的有哪些
  5. Java实现聊天室(TCP)
  6. Jmeter—监听器之察看结果数、聚合报告
  7. C语言----结构体及其应用
  8. netstat命令输出详解
  9. android 调用系统播放器播放视频,适配android 7.0以上
  10. 华为管理学案例分析_以华为为案例分析KPI管理系统