Qt连接SqlServer和Access数据库

1、在资源文件中添加模块

QT += sql

2、包含头文件

#include <QSqlDatabase>
#include <QSqlQuery> // 查询
#include <QSqlError> // 错误信息
#include <QSqlRecord> // 记录
#include <QDebug>

3、查看支持的数据库驱动

foreach (QString str, QSqlDatabase::drivers())
{
    qDebug() << str;
}

4、使用驱动程序类型和连接名称将数据库添加到数据库连接列表中。

//只能通过ODBC连接SQLServer和Access数据库

//不创建QSqlDatabase变量,通过连接名称访问数据库
//QSqlDatabase::addDatabase("QODBC"); // 可通过QSqlDatabase::database()访问数据库
//QSqlDatabase::addDatabase("QODBC", "connId"); // 可通过QSqlDatabase::database("connId")访问数据库

// 设置数据库名字,DRIVER={}中的内容要和数据源管理器(区分x32和x64)中的驱动名字一样
// 不必设置用户和密码,设置了也没用。通过setUserName和setPassword设置
//myDatabase.setDatabaseName("DRIVER={SQL Native Client};SERVER=(local);DATABASE=tt"); // SQLServer
myDatabase.setDatabaseName("Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\wsh\\WshChl.mdb"); // Access

// 设置数据库名字,使用数据源管理器中配置的DSN
//myDatabase.setDatabaseName("mysqlserver");

myDatabase.setUserName("sa"); // 设置用户
myDatabase.setPassword("sa"); // 设置密码

5、打开数据库

if (!myDatabase.open()) // 打开数据库
{
    // 打开失败,提示错误信息
    QMessageBox::warning(nullptr, "错误", myDatabase.lastError().text());
}

6、创建查询对象

QSqlQuery myQuery(myDatabase); // 创建到数据库的查询对象
QString sqlStr;
// 使用占位符指定参数,?或者:参数名
// 使用?时,bindValue只能使用序号,使用:时,bindValue可以使用序号和参数名
sqlStr = "select "
         "format(RiQi, 'yyyy-m-d') as 日期, "
         "round(avg(field13), 2) as 平均值 "
         "from wsh "
         "where RiQi >= :StartDate and RiQi <= :EndDate " // 使用占位符
         "group by format(riQi, 'yyyy-m-d') "
         "order by cdate(format(RiQi, 'yyyy-m-d'))"; // 如果不转换,对于1位数的日期排序不正确,或使用2位数日期
myQuery.prepare(sqlStr);

// 指定占位符参数
myQuery.bindValue(":StartDate", "2024-01-01"); // 或者(0, "2024-01-10")
myQuery.bindValue(":EndDate", "2024-01-10"); // 或者(1, "2024-12-20")

7、执行查询

if (!myQuery.exec())
{
    // 查询失败,提示错误信息
    QMessageBox::warning(nullptr, "错误", myQuery.lastError().text());
}

8、输出查询结果

qDebug() << myQuery.record().count(); // 输出查询结果的字段数量

// next()检索结果中的下一条记录,并将查询定位在检索到的记录上
// 如果当前定位在最后一条记录,执行next()返回false
while (myQuery.next())
{
    qDebug() << "第" << myQuery.at() << "记录:"; // 当前记录位置。第1条位于0位。第1条之前为-1,最后1条之后为-2

    // 通过字段索引输出值。按照select中的顺序,第一个字段为value(0)
    // 不建议使用 SELECT *,因为查询中字段的顺序未定义
    qDebug().noquote().nospace() << myQuery.value(0).toString() << " @ " << myQuery.value(1).toReal(); // 没有引号和空格
    //通过字段名称输出值
    //qDebug().noquote().nospace() << myQuery.value("日期").toString() << " @ " << myQuery.value("平均值").toReal();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值