Qt Как правильно составить SQL запрос
Qt. Делаю регистрацию. На данный момент делаю проверку зарегистрирован ли уже такой email, если нет, регистрировать, если да, выводить QMessageBox
QSqlQuery qry;
//Checking is email has already registered
qry.prepare("SELECT `email` FROM `users` AS `:email` WHERE `email` = `:email`");
qry.bindValue(":email", emailforcheck);
bool isntreg = true;
if(qry.exec())
{
QMessageBox::information(this, "s", emailforcheck); // вывод переменной для проверки что записалось
if(emailforcheck == email)
{
QMessageBox::warning(this, "Реєстрація", "Акаунт з таким email вже зареєстрований!");
isntreg = false;
}
}
Вот кусок кода с проверкой зарегистрирован ли email, но QMessageBox с переменной emailforcheck даже не выводит, не пишет, что email зарегистрирован (в БД зарегистрирован). Прошу помощи
Ответы (1 шт):
Автор решения: Sergey Tatarincev
→ Ссылка
- QSqlQuery используете неправильно - SqlQuery::exec() только выполняет запрос. Чтобы получить результат, необходимо его запросить используя SqlQuery::next() (или last(), или first())
- Сам SQL запрос можно сделать проще, к тому же есть подозрение что ваше выполняется с ошибкой
- переменная email нигде не объявлена и нигде не присвоена, а уж что значит if(emailforcheck == email) и вовсе загадка
Подведя итог. Проверить есть ли в таблице запись с заданным email можно так
QSqlQuery qry;
qry.prepare("SELECT count(*) FROM `users` WHERE `email` = :email"); // Можно просто запросить количество записей с заданным email
qry.bindValue(":email", emailforcheck);
if(!qry.exec()){ // Контролируйте выполнение запроса и выводите ошибки если они возникают
QMessageBox::information(this, "sql error", qry.lastError().text());
return;
};
bool isntreg = true;
qry.next(); // Запрос выполнился, но надо запросить результат
if(qry.value(0).toInt()>0){
QMessageBox::warning(this, "Реєстрація", "Акаунт з таким email вже зареєстрований!");
isntreg = false;
}