我正在尝试从qSQL数据库中检索数据

问题描述 投票:0回答:1

但是它不会从数据库中获取数据。我不想将数据检索到表中,也不想显示特定行编辑中的数据。有什么错误?有没有修改?

这是我正在使用的代码:

void Userdetails::on_pushButton_4_clicked()
{
    delete ui;

    // database connection
    database = QSqlDatabase::addDatabase("QMYSQL");
    database.setHostName("localhost");
    database.setUserName("root");
    database.setPassword("");
    database.setDatabaseName("electricity");

    if(database.open()) {
         QSqlQuery qry;

         QSqlQuery query(QSqlDatabase::database("MyConnect"));

         query.prepare(QString("SELECT accno, fullname, address, telephone FROM user_reg_elec WHERE username = :username AND password = :password"));

         if(query.exec()) {
             query.exec();

             while(query.next()) {
                 ui ->dislayaccountnumber ->setText(query.value(0).toString());
                 ui ->displayname ->setText(query.value(3).toString());
                 ui ->displayaddress ->setText(query.value(4).toString());
                 ui ->displattelephoneno ->setText(query.value(5).toString());
                 // ui ->displayamountoebill ->setText(query.value(6).toString());
             }
         } else {
               QMessageBox::information(this, "Query did not execute", "Not successful executing the query");
         }
    } else {
         QMessageBox::information(this, "Database not open", "Not opened successfully");
    }

    database.close();
}
c++ sql qt
1个回答
1
投票

此代码有四个主要问题:

  1. 您已删除代码开头的ui。因此,调用ui->的第一行将使程序崩溃。
  2. 您定义的查询不正确。另外,为连接选择名称的方法也不正确。
  3. 您执行了两次查询(一个就足够了。)。
  4. 您尚未绑定usernamepassword的值。

请使用以下内容:

void Userdetails::on_pushButton_4_clicked() {

    {
        // database connection
        QSqlDatabase database;
        database = QSqlDatabase::addDatabase("QMYSQL","MyConnect");
        database.setHostName("localhost");
        database.setUserName("root");
        database.setPassword("");
        database.setDatabaseName("electricity");

        if(database.open()) {

            QSqlQuery query(database);


            if (query.prepare(QString("SELECT accno, fullname, address, telephone FROM user_reg_elec WHERE username = :username AND password = :password"))) {

                //Add bindings
                query.bindValue(":username","your user name");
                query.bindValue(":password","your password");
                if(query.exec()) {

                    while(query.next()) {
                        ui ->dislayaccountnumber ->setText(query.value(0).toString());
                        ui ->displayname ->setText(query.value(1).toString());
                        ui ->displayaddress ->setText(query.value(2).toString());
                        ui ->displattelephoneno ->setText(query.value(3).toString());
                        // ui ->displayamountoebill ->setText(query.value(4).toString());
                    }
                } else {
                    qDebug() << "Query did not execute due to: " << query.lastError().text();
                    QMessageBox::information(this, "Query did not execute", "Not successful executing the query");
                }
            } else {
                qDebug() << "Query not prepared due to the following error: " << query.lastError().text();
            }
        } else {
            qDebug() << "Database not opened due to: " << database.lastError().text();
            QMessageBox::information(this, "Database not open", "Not opened successfully");
        }

        database.close();
    }

    QSqlDatabase::removeDatabase("MyConnect");
}

如果尚未包含此库,请在顶部添加#include <QSqlError>

© www.soinside.com 2019 - 2024. All rights reserved.