Hallo
QSqlQuery::value(int) is rasch, aber der int Parameter ist umständlich und fehleranfällig (da der Index ändert, wenn die SQL Query geändert wird).
Folgendes funktioniert (exportPersonen ist eine QSqlQuery Instanz):
#define EXPORTPERSONEN PersonalNr, Vorname, Nachname
enum{ EXPORTPERSONEN };
exportPersonen.prepare("SELECT PersonalNr, Vorname, Nachname FROM Personen WHERE PersonalNr <> 0");
...
int dieNummer = exportPersonen.value(PersonalNr).toInt();
--> PersonalNr kann anstelle von 0 verwendet werden.
Eigentlich möchte ich auch das prepare Statement so schreiben:
exportPersonen.prepare("SELECT EXPORTPERSONEN FROM Personen WHERE PersonalNr <> 0");
Geht aber nicht (da Makros in strings nicht expandiert werden).
Hat jemand eine Lösung?
Gruss, Al_
QSqlQuery::value( hier ein Stringbezeichner ) verwenden
Hallo
Ich habe eine zwar unelegante, aber praktikable Lösung gefunden:
Die Ausgabe dieses Programmfragments ist dann
Gruss, Al_
Ich habe eine zwar unelegante, aber praktikable Lösung gefunden:
Code: Alles auswählen
// header file
#define CREATE_FIELDLIST2(listName, field1, field2) \
enum{listName ## _ ## field1, listName ## _ ## field2}; \
const char listName[] = #field1 ", " #field2;
// example how to use this macro
CREATE_FIELDLIST2(employeeData, lastname, firstname);
qDebug() << "SELECT " << employeeData << " FROM employeetable";
qDebug() << "FieldId of lastname = " << employeeData_lastname;
qDebug() << "FieldId of firstname = " << employeeData_firstname;- SELECT lastname, firstname FROM employeetable
FieldId of lastname = 0
FieldId of firstname = 1
Gruss, Al_
In all meinen Projekten funktioniert das indexOf() wunderbar.
Code: Alles auswählen
QSqlQuery _query;
//Query füllen und ausführen
QSqlRecord _record = _query.record();
int _posSpalte_DieIchSuche = _record.indexOf("spaltenname");Einverstanden: indexOf(QString) funktioniert. Ist allerdings keine compile-time Konstante. Wahrscheinlich bin ich zu pingelig, aber wenn eine Konstante zur compile-time bekannt ist, so möchte icg sie auch compile-time festlegen können. Meine Lösung erfüllt diese Bedingung, allerdings um den Preis eines uneleganten Präprozessor-Makro.
Gruss, Al_
Gruss, Al_