Skip to content

Instantly share code, notes, and snippets.

@sschober
Created March 8, 2012 10:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save sschober/2000120 to your computer and use it in GitHub Desktop.
Save sschober/2000120 to your computer and use it in GitHub Desktop.
[sweng2] db query problem
void bodenseebike2::on_pbregistrieren_clicked()
{
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //Aufbauen der Verbindung zur Datenbank
db.setDatabaseName("BTS.db");
bool ok = db.open(); //wenn Öffnen fehlschlägt -> Rückgabewert false
if (!db.open()){ ui.leinfo->setText("Die Datenbank konnte nicht geöffnet werden");} //Bei Fehlschlagen von Öffnen
else {
Q_username = QString::fromStdString(ui.leusername->text().toStdString()); // Benutzername und Passwort von LineEdit lesen
Q_password = QString::fromStdString(ui.lepassword->text().toStdString());
if (NULL==Q_username) {ui.leinfo->setText("Sie haben keinen Benutzer eingegeben!");}
else if (NULL==Q_password){ui.leinfo->setText("Sie haben kein Passwort eingegeben!");}
else if (NULL!=Q_username && NULL!=Q_password)
{
QSqlQuery query; //Erzeugung eines Query-Objektes -> Interaktion mit Datenbank!
query.exec("SELECT name, passwort FROM User"); // liest Benutzernamen und Passwort aus der Datenbank
int check = 0; //hiermit kann unterschieden werden zwischen benutzer registriert, aber passwort falsch und noch nicht registriert
while (query.next()) // next(): true solange ein weiterer Eintrag in Tabelle
{
QString username = query.value(0).toString();
if(Q_username==username) //Nur wenn bereits der Benutzername übereinstimmt, wird das Passwort überprüft
{
check = 1; // -> Benutzername in Datenbank enthalten -> bereits registriert
QString password = query.value(1).toString();
if(Q_password==password) //Stimmt das Passwort, ist der Login erfolgreich und die Buttons werden freigeschalten
{
ui.leinfo->setText("Sie sind bereits registriert wurden erfolgreich eingeloggt");
ui.pbreservieren->setEnabled(true);
ui.pbstornieren->setEnabled(true);
ui.pblogout->setEnabled(true);
ui.pbloeschen->setEnabled(true);
ui.pbaktualisieren->setEnabled(true);
ui.pblogin->setEnabled(false);
ui.pbregistrieren->setEnabled(false);
show_marker(); //erst wenn User erfolgreich eingeloggt, werden die Marker gezeigt
}
else {ui.leinfo->setText("Sie sind bereits registriert, aber falsches Passwort");}
}
}//db.close();
if (check == 0)
{
ui.leinfo->setText("Sie wurden registriert");
QSqlQuery query2;
query2.prepare("INSERT INTO User (id, name, passwort) VALUES (NULL, :name, :passwort);");
query2.addBindValue(Q_username);
query2.addBindValue(Q_password);
query2.exec();
ui.pbreservieren->setEnabled(true);
ui.pbstornieren->setEnabled(true);
ui.pblogout->setEnabled(true);
ui.pbloeschen->setEnabled(true);
ui.pbaktualisieren->setEnabled(true);
ui.pblogin->setEnabled(false);
ui.pbregistrieren->setEnabled(false);
show_marker(); //erst wenn User erfolgreich eingeloggt, werden die Marker gezeigt
db.close();
}
} db.close();
}
}
@sschober
Copy link
Author

sschober commented Mar 8, 2012

Zeile 9f: QLineEdit.text() liefert bereits einen QString (siehe QLineEdit-Dokumentation). Warum der Umweg über einen std::string?
Zeile 17: Rückgabewert von query.exec() prüfen (siehe auch QSqlQuery-Dokumentation). Idiomatisch sollte eine Query folgendermassen ablaufen:

if( query.exec(...) ){
    while( query.next() ){
        //
    }
}
else {
    // Fehlerbehandlung
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment