[C++/Qt]sprawdzenie, czy uzytkownik jest w bazie (zapytanie sql)

0

Napisalem sobie taki kod, i teraz chcialbym, aby dla podanego loginu i hasla, sprawdzalo mi, czy taki uzytkownik o takim hasle jest w bazie. Jak to zrobic? Mi nie dziala, ciagle zwraca true (bo query sie dobrze wykonalo) - ale jak zrobic tak, aby jesli "zwroci" pusty wynik; tzn nie znajdzie usera i hasla, bylo przykladow false? Wiecie, o co mi chodzi ;)

#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlQueryModel>
#include <QSqlTableModel>
#include <QSqlRelationalTableModel>
#include <QSqlRecord>
#include <QSqlError>
#include <QMessageBox>
#include <QDebug>
#include <QString>
#include<QApplication>

int main(int argc,char** argv){
     QApplication app(argc,argv);

     QSqlDatabase db;

     //tworzenie bazy i otwieranie bazy

     db = QSqlDatabase::addDatabase("QSQLITE");
     db.setHostName("localhost");
     db.setDatabaseName("./users.gdb");
     db.setUserName("users");
     db.setPassword("users");
     if (!db.open()) {
       QMessageBox::critical(0, "Error","Error during opening the database");
       exit(1);
     }

        //stworzenie tabeli - uzytkownicy z polami login i haslo

         QSqlQueryModel modelCreate;
         modelCreate.setQuery("select * from Users");
         QSqlQuery query;

         if(modelCreate.record().isEmpty())
         {
             query.exec("create table Users ("
                                "login varchar(40), password varchar(60))");
             qDebug() << query.lastError().databaseText();
             qDebug() << query.lastError().driverText();

             //wstawianie do bazy
             query.prepare("insert into Users values(:login,:password)");
             query.bindValue(":login","admin");
             query.bindValue(":password","admin");
             query.exec();
             qDebug() << query.lastError().databaseText();
             qDebug() << query.lastError().driverText();

             query.prepare("insert into Users values(:login,:password)");
             query.bindValue(":login","student");
             query.bindValue(":password","student");
             query.exec();
             qDebug() << query.lastError().databaseText();
             qDebug() << query.lastError().driverText();
         }
          else
         {
              //wstawianie do bazy
              query.prepare("insert into Users values(:login,:password)");
              query.bindValue(":login","admin");
              query.bindValue(":password","admin");
              query.exec();
              qDebug() << query.lastError().databaseText();
              qDebug() << query.lastError().driverText();

              query.prepare("insert into Users values(:login,:password)");
              query.bindValue(":login","student");
              query.bindValue(":password","student");
              query.exec();
              qDebug() << query.lastError().databaseText();
              qDebug() << query.lastError().driverText();
          }

          QString login = "admin12121";
          QString password = "admin";

          bool is = query.exec("select login, password from Users where login like '"+login+"'"+" and password like '"+password+"'");
          if(is)
              qDebug () << login+" jest w bazie";
          
          //powinno wypisac, ze nie ma, bo nie ma admina12121, tylko admin

          if(db.isOpen()) db.close();
            QSqlDatabase::removeDatabase("QSQLITE");
    return app.exec();
}
0

Dokumentacja jest nieubłagana, więc chyba tak:

          bool is = query.exec("select login, password from Users where login like '"+login+"'"+" and password like '"+password+"'");
          if(is && query.next())
              qDebug () << login+" jest w bazie";
          else 
              qDebug() << login+"nie wystepuje";
 

Tzn użyć tylko http://doc.qt.nokia.com/4.7/qsqlquery.html#next

1 użytkowników online, w tym zalogowanych: 0, gości: 1