QT链接ACCESS数据库

源代码链接

首先附上工程代码,方面大家自取。

链接: https://pan.baidu.com/s/1u9Xro3XuxV-Pxp54f6x33Q?pwd=r8iv 提取码: r8iv

一、创建数据库

1、创建以UserInfo.accdb命名的数据库。

2、打开新创建的数据库,并点击表,将表改名为户籍信息

3、 分别给表添加如下字段:姓名、国籍、电话、性别

二、QT的界面设计

三、链接数据库的代码的编写

引入头文件

cpp 复制代码
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>

数据库查询

cpp 复制代码
    QString connectionName = "myConnection";
    QSqlDatabase db;
    if (QSqlDatabase::contains(connectionName)) {
        db = QSqlDatabase::database(connectionName);
    } else {
        db = QSqlDatabase::addDatabase("QODBC", connectionName);
        db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=./UserInfo.accdb");
        db.setUserName("");
        db.setPassword("");
    }

    // 检查连接是否有效(如果之前已关闭,这里会重新打开)
    if (!db.open()) {
        qDebug() << "连接失败:" << db.lastError().text();
        return;
    }
    qDebug() << "Database connected successfully!";

    QString str_UserName = ui->Edit_text->text();
    bool found;

    // 执行数据库操作(例如查询)
    QSqlQuery query(db); // 使用成员变量 db 关联的连接
    query.prepare("SELECT * FROM 户籍信息 WHERE 姓名 = :username");
    query.bindValue(":username", str_UserName);

    if (!query.exec()) {
        // 查询失败
        QMessageBox::warning(this, "登录失败", "数据库查询失败!");
        return;
    }
    found = false;
    while (query.next()) {
        // 至少找到一条匹配的记录
        found = true;
        if(found)
        {
            qDebug()<<query.value("姓名").toString();
            ui->Edit_name->setText(query.value("姓名").toString());

            qDebug()<<query.value("国籍").toString();
            ui->Edit_country->setText(query.value("国籍").toString());

            qDebug()<<query.value("电话").toString();
            ui->Edit_phone->setText(query.value("电话").toString());

            qDebug()<<query.value("性别").toString();
            if(query.value("性别").toString() == "男")
            {
                ui->Button_man->setChecked(true);
                ui->Button_woman->setChecked(false);
            }
            else if(query.value("性别").toString() == "女")
            {
                ui->Button_man->setChecked(false);
                ui->Button_woman->setChecked(true);
            }
        }
    }

    // 操作完成后关闭连接(可选,根据需求决定是否保持连接)
    db.close();

添加数据

cpp 复制代码
QString connectionName = "myConnection";
    QSqlDatabase db;
    if (QSqlDatabase::contains(connectionName)) {
        db = QSqlDatabase::database(connectionName);
    } else {
        db = QSqlDatabase::addDatabase("QODBC", connectionName);
        db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=./UserInfo.accdb");
        db.setUserName("");
        db.setPassword("");
    }

    // 检查连接是否有效(如果之前已关闭,这里会重新打开)
    if (!db.open()) {
        qDebug() << "连接失败:" << db.lastError().text();
        return;
    }
    qDebug() << "Database connected successfully!";

    QString str_UserName = ui->Edit_name->text();
    bool found;

    // 执行数据库操作(例如查询)
    QSqlQuery query(db); // 使用成员变量 db 关联的连接
    query.prepare("SELECT * FROM 户籍信息 WHERE 姓名 = :username");
    query.bindValue(":username", str_UserName);

    if (!query.exec()) {
        // 查询失败
        QMessageBox::warning(this, "登录失败", "数据库查询失败!");
        return;
    }
    found = false;
    while (query.next()) {
        // 至少找到一条匹配的记录
        found = true;
    }

    if (!found) {
        // 插入操作示例
        query.prepare("INSERT INTO 户籍信息 (姓名, 国籍, 电话, 性别) VALUES (:value1, :value2, :value3, :value4)");
        query.bindValue(":value1", ui->Edit_name->text());
        query.bindValue(":value2", ui->Edit_country->text());
        query.bindValue(":value3", ui->Edit_phone->text());

        if(ui->Button_man->isChecked() == true)
        {
            query.bindValue(":value4", "男");
        }
        else
        {
            query.bindValue(":value4", "女");
        }

        if (!query.exec()) {
            qDebug() << "Insert error:" << query.lastError().text();
        } else {
            db.close();
        }
    }

删除数据

cpp 复制代码
QString connectionName = "myConnection";
    QSqlDatabase db;
    if (QSqlDatabase::contains(connectionName)) {
        db = QSqlDatabase::database(connectionName);
    } else {
        db = QSqlDatabase::addDatabase("QODBC", connectionName);
        db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=./UserInfo.accdb");
        db.setUserName("");
        db.setPassword("");
    }

    // 检查连接是否有效(如果之前已关闭,这里会重新打开)
    if (!db.open()) {
        qDebug() << "连接失败:" << db.lastError().text();
        return;
    }
    qDebug() << "Database connected successfully!";

    QString str_UserName = ui->Edit_name->text();

    // 执行数据库操作(例如查询)
    QSqlQuery query(db); // 使用成员变量 db 关联的连接
    query.prepare("DELETE FROM 户籍信息 WHERE 姓名 = :username");
    query.bindValue(":username", ui->Edit_text->text());

    if (query.exec()) {
        ui->Edit_name->setText("");

        ui->Edit_country->setText("");

        ui->Edit_phone->setText("");

        ui->Button_man->setChecked(false);
        ui->Button_woman->setChecked(false);

    }

改数据

cpp 复制代码
    QString connectionName = "myConnection";
    QSqlDatabase db;
    if (QSqlDatabase::contains(connectionName)) {
        db = QSqlDatabase::database(connectionName);
    } else {
        db = QSqlDatabase::addDatabase("QODBC", connectionName);
        db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=./UserInfo.accdb");
        db.setUserName("");
        db.setPassword("");
    }

    // 检查连接是否有效(如果之前已关闭,这里会重新打开)
    if (!db.open()) {
        qDebug() << "连接失败:" << db.lastError().text();
        return;
    }
    qDebug() << "Database connected successfully!";

    QString str_UserName = ui->Edit_name->text();

    // 执行数据库操作(例如查询)
    QSqlQuery query(db); // 使用成员变量 db 关联的连接

    query.prepare("UPDATE 户籍信息 SET 姓名 = :Value1, 国籍 = :Value2, 电话 = :Value3 WHERE 姓名 = :name");
    query.bindValue(":name", ui->Edit_text->text());
    query.bindValue(":Value1", ui->Edit_name->text());
    query.bindValue(":Value2", ui->Edit_country->text());
    query.bindValue(":Value3", ui->Edit_phone->text());

    if (query.exec()) {
        qDebug()<<"执行成功";
    }
    else
    {
        qDebug()<<"执行失败";
    }