<SOLVED>Verschachtelte While

Alles rund um die Programmierung mit Qt
Antworten
skiv
Beiträge: 6
Registriert: 25. Januar 2010 10:23

<SOLVED>Verschachtelte While

Beitrag 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);
                }
Zuletzt geändert von skiv am 27. Januar 2010 21:19, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Es wird halt keine passende ProjektNr da sein.

Copy & Paste und jetzt sucht mal ist schon einfach...
RavenIV
Beiträge: 267
Registriert: 21. Januar 2009 14:24
Wohnort: Waldshut

Beitrag 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) ))
Linux, das längste Text-Adventure aller Zeiten
skiv
Beiträge: 6
Registriert: 25. Januar 2010 10:23

Beitrag 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! :)
Antworten