Seite 1 von 1

<SOLVED>Verschachtelte While

Verfasst: 27. Januar 2010 10:20
von skiv
Hallo Liebe Community,

ich habe vor c.a. 3 Wochen mit QT angefangen und stehe nun vor einem Problem.

Ich habe eine verschachtelte While zur Eintragung von Kategorien. Grob erklärt:

Es ist ein Zeiterfassungstool, bei dem automatisch vorgegbene Kategorien zu Projekten hinzugefügt werden. Der Code, denke ich, spricht für sich. Nur die verschachtelte while für die Categorys wird nur einmal ausgeführt. Habe versucht mit endGroup die Gruppe zu schließen und ihn per beginGroup wieder auf den Anfang zu setzen. Wisst ihr wo mein Fehler liegt ???
Vielen Vielen Dank!

Code: Alles auswählen

QSettings settings(SETTINGSFILENAME, QSettings::IniFormat);
		settings.beginGroup("default_projects");
		int n=1;
		QString projectnr;
		projectnr.setNum(n);
                // read settings from ini-file --> Category
                QSettings cat_settings(CATSETTINGSFILENAME, QSettings::IniFormat);
                int y=1;
                QString catnr;
                while (settings.contains ("project" + projectnr ))
		{
			myquery = "INSERT INTO project (name, customer_id) "
                                  "VALUES ('" + settings.value("project" + projectnr).toString() + "','"
                                  + custid + "')";
			qDebug() << myquery;
                        // while loop for categorys
                        catnr.setNum(y);
                        cat_settings.beginGroup("default_categorys");
                        while (cat_settings.contains ("category" + catnr ))
                         {
                             cat_query = "INSERT INTO category (name, project_id) "
                                         "VALUES ('" + cat_settings.value("category" + catnr).toString() + "','"
                                         + custid + "')";
                             qDebug() << cat_query;
                             if (!query.exec(cat_query))
                                     QMessageBox::critical(this, trUtf8("Ein Fehler ist aufgetreten"),trUtf8("StandardKategorie Nr.") + catnr + " " + trUtf8("konnte nicht hinzugefügt werden.\n\nFehler:\n") + query.lastError().text(), QMessageBox::Ok);
                             y++;
                             catnr.setNum(y);
                         }
                        // end of category while
                        cat_settings.endGroup();
                        if (!query.exec(myquery))
				QMessageBox::critical(this, trUtf8("Ein Fehler ist aufgetreten"),trUtf8("Standardprojekt Nr.") + projectnr + " " + trUtf8("konnte nicht hinzugefügt werden.\n\nFehler:\n") + query.lastError().text(), QMessageBox::Ok);

                        n++;
                        projectnr.setNum(n);
                }

Verfasst: 27. Januar 2010 12:27
von upsala
Es wird halt keine passende ProjektNr da sein.

Copy & Paste und jetzt sucht mal ist schon einfach...

Verfasst: 27. Januar 2010 13:45
von RavenIV
Solche Fehler kommen gerne mal bei
while (settings.contains ("project" + projectnr ))
Da sucht er nämlich (z.B. bei projectnr = 3) nach "ject" und nicht nach "project3".
Das kommt daher, weil der string ein Pointer ist und der Pointer um 3 erhöht wird.
Versuch das mal so:
while (settings.contains ("project" + QString::number(projectnr) ))

Verfasst: 27. Januar 2010 21:18
von skiv
Hab den fehler gefunden ;)

int y=1; muss in die zweite while schleife, damit er bei jedem durchlauf von vorne anfängt .... ansonsten ist die zahl durchgelaufen.
So kleine Fehler übersieht man meistens wenn man schon ein paar Stunden davor saß.

Danke für eure Antworten! :)