我正在尝试从 qSQL 数据库中检索数据
Posted
技术标签:
【中文标题】我正在尝试从 qSQL 数据库中检索数据【英文标题】:I'm trying to retrieve data from qSQL database 【发布时间】:2020-05-30 14:40:27 【问题描述】:但它没有从数据库中获取数据。我不想将数据检索到表中,并且希望在特定的行编辑中显示数据。错误是什么?有没有修改?
这是我正在使用的代码:
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();
【问题讨论】:
querry.prepare(QString("SELECT accno, fullname, address, telephone FROM user_reg_elec WHERE username = :username AND password = :password"));
您是否添加了参数化查询的值而忘记将该代码添加到您的问题中?我在您的代码中看到了 2 个参数的 bindValue:https://doc.qt.io/qt-5/qsqlquery.html#approaches-to-binding-values
@drescherjm 我没有忘记。这就是全部。你能解释一下mutch吗?
链接的文档向您展示了如何操作。 querry.bindValue("::username", "Bart");
您真的希望用户必须通过用户名和密码进行搜索吗?你会在你的 GUI 中同时问这两个问题吗?
另外我假设只有 1 条记录具有相同的用户名和密码,所以 while(querry.next())
可能会循环 1 或 0 次。
【参考方案1】:
这段代码有四个主要问题:
-
您已删除代码开头的
ui
。因此,调用ui->
的第一行将使程序崩溃。
您的查询定义不正确。此外,您选择连接名称的方式也不正确。
您已经执行了两次查询(一次就足够了)。
您尚未绑定 username
和 password
的值。
请使用以下内容:
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>
。
仅限提问者:
要在新窗口中显示详细信息,从数据库中获取目标用户的信息后,可以创建一个新对话框(窗口)并在其中显示结果,如下所示:
//Create a new dialog
QDialog *dialog = new QDialog;
//Add some elements to the dialog
QLabel *accountNumber = new QLabel("Account number: " + query.value(0).toString());
QLabel *name = new QLabel("Name: " + query.value(1).toString());
QLabel *address = new QLabel("Address: " + query.value(2).toString());
QLabel *phoneNumber = new QLabel("Phone number: " + query.value(3).toString());
QVBoxLayout *lay = new QVBoxLayout;
lay->addWidget(accountNumber);
lay->addWidget(name);
lay->addWidget(address);
lay->addWidget(phoneNumber);
dialog->setLayout(lay);
//Show the dialog
dialog->open();
【讨论】:
没有没有。这是一个拼写错误。我忘了删除它。我编辑了我的答案。 如何修改它,使用单独的窗口登录并显示用户详细信息? 您能否详细说明您的问题?让我知道你到底想做什么。 登录后,根据用户名和密码在新窗口显示用户详细信息。 如果我的理解正确,您可以从查询中删除WHERE
条件并选择所有用户名和密码:SELECT accno, fullname, address, telephone FROM user_reg_elec;
,然后在您的While
循环中将数据存储在一些数组,然后将它们全部显示在 QTableView 或 QTableWidget 中。以上是关于我正在尝试从 qSQL 数据库中检索数据的主要内容,如果未能解决你的问题,请参考以下文章
我正在尝试使用 ajax 从数据库中检索数据并以引导模式中的形式填充
我正在尝试将 firebase 实时数据库中的数据检索到我的 recyclerview 中,但数据显示为空