Seite 1 von 1

[gelöst] SQL-Abfrage mit QSqlQuery

Verfasst: 22. Juli 2005 20:32
von bigmil
Hallo zusammen,

ich stehe hier vor einem kleinen Problem, darum wende ich mich grosser Zuversicht an Euch :lol:

Ich lese Daten aus einer Datenbank und füge diese danach in eine QListView (listView) ein. Dazu benutze ich zwei SQL-Queries, die ineinander verschachtelt sind. Hier das Beispiel:

Code: Alles auswählen

QSqlQuery query("SELECT DISTINCT Location FROM Knoten ORDER BY Location;");

if(query.isActive())
{

   while(query.next())
   {
      QListViewItem* itemLocation = new QListViewItem ( listView, query.value(0).toString());
      QString strLocation = query.value(0).toString();

      QSqlQuery query1("SELECT Wert1,Wert2,Wert3 FROM Knoten WHERE Location = strLocation ORDER BY NodeName");
			
      if(query1.isActive())
      {
         while(query1.next())
         {
            QListViewItem* itemData= new QListViewItem ( itemLocation, "", query1.value(0).toString(),
									 query1.value(1).toString(),
									 query1.value(2).toString());
				
         }
      }
   }
}
Vom ersten Query-Output nehme ich den Wert und speichere diesen in die Variable strLocation, anschliessend starte ich eine zweite Abfrage, wo ich diesen Wert dann einsetzen möchte. Leider klappt dies nicht. Irgendwie stimmt die Syntax nicht bei der zweite Abfrage. Wie muss ich die QString-Variable im zweiten Select-Statement deklarieren, damit diese den eigentlichen Wert übergibt? Kann mir da jemand weiterhelfen? Oder sieht jemand eine einfachere Möglichkeit?

Besten Dank für Eure Hilfe schon einmal im Voraus!![/code]

Verfasst: 22. Juli 2005 22:25
von lepsai
He, das ist geil!

so muss es sein:

Code: Alles auswählen

QString q = QString("SELECT Wert1,Wert2,Wert3 FROM Knoten WHERE Location = %1 ORDER BY NodeName").arg(strLocation);

QSqlQuery query1(q); 

Verfasst: 22. Juli 2005 23:14
von bigmil
hey, besten dank für deine Hilfe. Werde es sofort versuchen!

Geb noch bescheid ob es gefunzt hat.

Bis dann...

Verfasst: 23. Juli 2005 01:15
von bigmil
Oh man, war das jetzt ein stress...

Also lepsai, nochmal besten Dank für deinen Hinweis, der hat geholfen. Aber zuerst ging es doch nicht. Es fehlte was ganz wichtiges, und zwar \' vor und nach dem %1. Der Code würde dann folgendermassen aussehen:

Code: Alles auswählen

QString q = QString("SELECT Wert1,Wert2,Wert3 FROM Knoten WHERE Location = \'%1\' ORDER BY NodeName").arg(strLocation); 

QSqlQuery query1(q); 
Nochmals vielen Dank und wer weiss, vielleicht bis bald?? 8)

Verfasst: 23. Juli 2005 13:33
von FlorianBecker
Das geht übrigens eleganter:

Code: Alles auswählen

QSqlQuery query1;
query1.prepare("SELECT Wert1,Wert2,Wert3 FROM Knoten WHERE Location = ? ORDER BY NodeName");
query1.bindValue(0, strLocation);
query1.exec();
Vielleicht hilft dir das auch noch.