Seite 1 von 1

Qt Sql

Verfasst: 28. Juli 2010 10:34
von Nvidia
Hallo,
warum streickt er beim zweiten Sqlquery?

Code: Alles auswählen

QSqlQuery q5 = db.exec("INSERT into topgroup (name, position) VALUES ('"+line->text()+"'',"+i+") ");
               QSqlQuery q6 = db.exec("UPDATE settings SET anzahlAdd = "+i+" WHERE ROWID = 2");
Er meint beim Zweiten "invalid operands of types 'const char*' and 'const char[17]' to binary operator +.
Wieso ist das eine ein char* und das andere ein char[17] ???
nvidia

Verfasst: 28. Juli 2010 10:42
von franzf
Weil es so einen operator+(const char*, const char*) einfach nicht gibt.
Der erste streikt nicht da:
const char* + QString + const char* + "i"
und es glücklicherweise einen operator+(const char*, const QString&)
sowie
operator+(const QString&, const char*)
gibt, und beide einen QString zurückgeben, wodurch auch alle weiteren Verknüpfungen mit const char* funktionieren.
Das hat aber gar nix mit Qt SQL zu tun.

Verfasst: 28. Juli 2010 10:52
von Nvidia
ja aber i soll eine Variable sein. aaber wenn ich sie so einfüge, dann schreibt mir Sql da so komische Zeichen, bei letzten Fehler?
Wie krieg ich das hin?
so ich habs also
QString k;
k.append(i);
qDebug() << k;
zum beispiel so, er nimmt i als Integer nicht richtig dazu.
da kommt immer so ein Viereck als Ausgabe

Verfasst: 28. Juli 2010 10:56
von franzf
Nvidia hat geschrieben:ja aber i soll eine Variable sein.
Variable welchen Typs?
aaber wenn ich sie so einfüge, dann schreibt mir Sql da so komische Zeichen, bei letzten Fehler?
Sql schreibt gar nix. Sei doch mal etwas ausführlicher, poste evtl. query.lastError().text(), und evtl auch die "komischen Zeichen", unter denen ich mir absolut nix vorstellen kann.
Und bastel dir den String einfach mal VOR dem exec zusammen und gib ihn dir aus, ihn hier posten schadet auch nicht.

Verfasst: 28. Juli 2010 10:58
von franzf

Code: Alles auswählen

QString k;
k.append(i);
schau doch mal in die Doku, es gibt kein QString::append(int).
"Wink in Richtung QString::number()"

Verfasst: 28. Juli 2010 11:09
von Nvidia
ok also:
QString k("INSERT into topgroup (name, position) VALUES ('%1',%2) ");
k.arg(line->text()).arg(i);
qDebug() << k;
Damit hab ich das probiert, aber er gibt mir nur %1 und %2 und ersetzt das ganze nicht?!
i ist ein integer

ok so funktioniert das:
QString k;
k = QString("INSERT into topgroup (name, position) VALUES ('%1',%2) ").arg(line->text()).arg(i);

Verfasst: 28. Juli 2010 11:15
von franzf
Nvidia hat geschrieben:Damit hab ich das probiert, aber er gibt mir nur %1 und %2 und ersetzt das ganze nicht?!
Dann lies die Doku GENAU!
1) Fällt auf: arg() ist const-qualifiziert. Das sagt dir als C++-Guru: Diese Methode ändert das Objekt nicht! Sollte dir schonmal sehr suspekt vorkommen.
2) Die Doku sagt selber: "Returns a copy of this string with the lowest numbered place marker replaced"
3) Die Schlussfolgerung lautet:
$%&"§
!ERROR! INSERT COIN PLEASE !

// EDIT:
Ok, jetzt hast es ja selber rausbekommen.
Das nächste Mal einfach erst genauer in die Doku schauen, dann sparst du dir "böse" Kommentare wie meinen obigen :P