首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

QSqlTableModel setFilter参数太多

在使用 QSqlTableModel 时,setFilter 方法用于设置 SQL 过滤条件,以便从数据库中筛选出符合条件的记录。setFilter 方法的参数是一个字符串,表示 SQL 的 WHERE 子句,因此你可以在这个字符串中包含多个条件。

如果你有多个条件需要设置,可以使用 SQL 的 ANDOR 运算符将这些条件组合在一起。以下是一些示例,展示了如何使用 setFilter 方法设置多个条件。

示例:使用 AND 运算符组合多个条件

假设你有一个名为 employees 的表,其中包含 nameagedepartment 三个字段。你希望筛选出年龄大于 30 且部门为 "HR" 的员工。

代码语言:javascript
复制
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

int main(int argc, char *argv[])
{
    // 初始化数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("example.db");

    if (!db.open()) {
        qDebug() << "Failed to connect to database.";
        return -1;
    }

    // 创建 QSqlTableModel
    QSqlTableModel model;
    model.setTable("employees");

    // 设置过滤条件
    QString filter = "age > 30 AND department = 'HR'";
    model.setFilter(filter);

    // 执行查询
    model.select();

    // 输出结果
    for (int i = 0; i < model.rowCount(); ++i) {
        QString name = model.record(i).value("name").toString();
        int age = model.record(i).value("age").toInt();
        QString department = model.record(i).value("department").toString();
        qDebug() << name << age << department;
    }

    return 0;
}

示例:使用 OR 运算符组合多个条件

假设你希望筛选出年龄大于 30 或部门为 "HR" 的员工。

代码语言:javascript
复制
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

int main(int argc, char *argv[])
{
    // 初始化数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("example.db");

    if (!db.open()) {
        qDebug() << "Failed to connect to database.";
        return -1;
    }

    // 创建 QSqlTableModel
    QSqlTableModel model;
    model.setTable("employees");

    // 设置过滤条件
    QString filter = "age > 30 OR department = 'HR'";
    model.setFilter(filter);

    // 执行查询
    model.select();

    // 输出结果
    for (int i = 0; i < model.rowCount(); ++i) {
        QString name = model.record(i).value("name").toString();
        int age = model.record(i).value("age").toInt();
        QString department = model.record(i).value("department").toString();
        qDebug() << name << age << department;
    }

    return 0;
}

动态构建过滤条件

如果你的过滤条件是动态生成的,可以使用字符串拼接或 QStringarg 方法来构建过滤条件。

代码语言:javascript
复制
#include <QSqlTableModel>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QDebug>

int main(int argc, char *argv[])
{
    // 初始化数据库连接
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("example.db");

    if (!db.open()) {
        qDebug() << "Failed to connect to database.";
        return -1;
    }

    // 创建 QSqlTableModel
    QSqlTableModel model;
    model.setTable("employees");

    // 动态构建过滤条件
    int minAge = 30;
    QString department = "HR";
    QString filter = QString("age > %1 AND department = '%2'").arg(minAge).arg(department);
    model.setFilter(filter);

    // 执行查询
    model.select();

    // 输出结果
    for (int i = 0; i < model.rowCount(); ++i) {
        QString name = model.record(i).value("name").toString();
        int age = model.record(i).value("age").toInt();
        QString department = model.record(i).value("department").toString();
        qDebug() << name << age << department;
    }
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

52秒

衡量一款工程监测振弦采集仪是否好用的标准

领券