Seite 1 von 1

QSqlQuery: SQL-UPDATE funktioniert nicht, mit addBindValue()

Verfasst: 26. Juni 2008 17:11
von FrankK
Hallo,

ich habe folgendes Problem:
Folgender Code funktioniert nicht. QSqlQuery gibt auch keinen Fehler zurück. Keine Änderung der Daten in der Datenbank.

Code: Alles auswählen

QSqlQuery *pQuery = new QSqlQuery(DataBase);
pQuery->prepare("UPDATE tablename SET NAME = ? , VORNAME = ? WHERE NUMMER = ? ");
pQuery->addBindValue("Mustermann");
pQuery->addBindValue("Hans");
pQuery->addBindValue("123456");
pQuery->exec()
Die Abfrage mittels boundValue() gibt mir auch die obigen Werte zurück.

Folgender Code funktioniert allerdings fehlerfrei. Die Daten werden wie erwartet geändert.

Code: Alles auswählen

QSqlQuery *pQuery = new QSqlQuery(DataBase);
pQuery->prepare("UPDATE tablename SET NAME = ? , VORNAME = ? WHERE NUMMER = \'123456\' ");
pQuery->addBindValue("Mustermann");
pQuery->addBindValue("Hans");
pQuery->exec()
Umgebung: Oracle10g, QT4.4, MS-VC2005

Fragenden Gruss
Frank

Verfasst: 26. Juni 2008 21:01
von Maxubuntu
Hi ...

addBindValue() funktioniert nicht mit der WHERE-Klausel, sondern nur für die Daten in der Datenbank.

Gruß,

Maxubuntu

Verfasst: 26. Juni 2008 22:38
von upsala
@Maxubuntu: Wie kommst du auf die Idee?

Was sagt eigentlich QSqlQuery::executedQuery() oder das Datenbank-Logfile?

Verfasst: 26. Juni 2008 23:02
von Maxubuntu
Ich komme auf die Idee, weil ich auch schon mal mit WHERE = ? arbeiten wollte und das nicht funktioniert hat.

Der ausgeführte Query war dann beispielsweise

Code: Alles auswählen

UPDATE blah SET poof = 'splash' WHERE gasp = ?
Desweiteren ist in der Doku auch nur der Einsatz mit Werten zu sehen.

Gute Nacht!

Verfasst: 27. Juni 2008 08:45
von FrankK
Hallo,

schon mal gut zu wissen, dass ich nicht der Einzige mit dem Problem bin/war.

Nachteilig ist natürlich, dass dieses Verhalten nicht dem Standard entspricht. Da stellt sich mir dann natürlich gleich die Frage, was ist mit allen anderen Möglichkeite der QSqlQuery Klasse? Laut Doku sind das SELECT, INSERT, UPDATE und DELETE. Gibt es dort ähnliche Erfahrungen?

Um aber noch auf die Frage zu Antworten, was executedQuery() zurückliefert

Code: Alles auswählen

UPDATE tablename SET NAME = :f , VORNAME = :fb WHERE NUMMER = :fc 
Gruß
Frank