Qt Проверка входа с использованием базы данных - PullRequest
0 голосов
/ 04 июля 2019

Я использую qt для создания логина пользователя.Я использую Sqlite в качестве базы данных и застрял по какой-то причине, она не работает должным образом.Я смог полностью обойти экран входа в систему только при наборе в первой строке из базы данных.Любой другой пользователь не может войти в систему (строка 2, 3,4 ... в базе данных).За последние дни я читал всевозможные посты и не нашел правильного решения.Вот мой кодЯ также попытался создать запрос через QSqlQuery и передать его в объект QSQlQueryModel, который вообще не работал.

void MainWindow::on_login_clicked()
{
    QSqlDatabase m_db;
    QString path = "C:/Users/annea/Summer2019Database.db";
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(path);
    m_db.open();

    if (!m_db.open())
    {
       qDebug() << "Error: connection with database fail";
    }
    else
    {
       qDebug() << "Database: connection ok";
    }

    QString username = ui->username->text();
    QString password = ui->password->text();

    QSqlQueryModel *queryModel = new QSqlQueryModel; 
    queryModel->setQuery("SELECT * FROM [User Database] WHERE Username= username"); //select the row of where the Username == username
    queryModel->query().exec(); //execute it (not really sure why or what this does
    if(queryModel->record(0).value(1).toString()== password) //if a row is found check column 2 for password
    {
        destroy(); //destroy current window
        if(queryModel->record(0).value(3).toString()== 1) //if id is equal to one log in as user
        {
            user.showMaximized();
        }
        else {
            dbManager.showMaximized();
        }
    }
    else {

        qWarning("Wrong Password or Username");
    }
}

1 Ответ

0 голосов
/ 05 июля 2019

Я думаю, что ваш запрос неправильный. Вместо того, чтобы писать так:

queryModel->setQuery("SELECT * FROM [User Database] WHERE Username= username"); //select the row of where the Username == username

Возможно, вы захотите написать так:

queryModel->setQuery(QString("SELECT * FROM [User Database] WHERE Username = '%1'").arg(username)); //select the row of where the Username == username

Почему? Потому что вы пишете запрос, и вы, вероятно, хотите проверить введенное имя пользователя, а не строку «имя пользователя». Также не забывайте апострофы при сравнении.

Чтобы найти больше информации, которая может помочь в решении вашей проблемы, вы должны прочитать документацию Qt относительно его классов. Также было бы полезно взглянуть на предложение SQLite WHERE и на то, как строки представляются при написании запросов:

  1. https://doc.qt.io/qt-5/qsqlquerymodel.html#setQuery
  2. https://doc.qt.io/qt-5/qsqlquery.html#QSqlQuery-1
  3. http://www.sqlitetutorial.net/sqlite-where/
  4. https://www.sqlite.org/datatype3.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...