Alles rund um die Programmierung mit Qt
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 6. Oktober 2009 08:54
Hallo,
man kann ja beim Insert mit dem QSqlQuery folgende Syntax mit Platzhaltern wählen:
Code: Alles auswählen
QSqlQuery query;
query.prepare("INSERT INTO person (id, forename, surname) "
"VALUES (?, ?, ?)");
query.bindValue(0, 1001);
query.bindValue(1, "Bart");
query.bindValue(2, "Simpson");
query.exec();
Ich möchte das selbe bei einem Select. Also in der Art
Code: Alles auswählen
QSqlQuery query;
query.prepare("Insert Or Replace Into def (Select * from abc where monat = '?'"));
query.bindValue(0, "10");
query.exec();
Aber hier wird der Platzhalter nie ersetzt. Geht das überhaupt so?
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 6. Oktober 2009 18:35
Deine Query ist falsch. Die Hochkommas sind überflüssig. Und wer sagt, daß dein ? nicht ersetzt wird. Ansonsten fehlen die Informationen zum Datenbankserver und zur Qt-Version.
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 08:23
a.) Die Hochkommatas sind meiner Ansicht nach korrekt, da es sich um ein Char(2) Feld handelt.
b.) Ich arbeite mit SQLite
c.) QT 4.5.2
d.) Ich denke das die ? nicht ersetzt werden, weil ein query.executedquery() diese halt nicht als ersetzt anzeigt wie in anderen Sprüchen.
Zuletzt geändert von
toem am 8. Oktober 2009 08:36, insgesamt 1-mal geändert.
MichaelS
Beiträge: 240 Registriert: 27. Dezember 2005 12:49
Beitrag
von MichaelS » 7. Oktober 2009 09:34
Die Hochkommatas sind meiner Ansicht nach korrekt, da es sich um ein Char(2) Feld handelt.
Trotzdem sind sie falsch (siehe Dein Beispiel aus der QT-Doku in Deinem ersten Beitrag).
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 10:08
Schön und gut. Es geht aber auch ohne nicht.
Mani99
Beiträge: 244 Registriert: 15. April 2009 10:46
Wohnort: München
Beitrag
von Mani99 » 7. Oktober 2009 10:29
Event. weil es das programm schon beim parsen des ersten teils ohne bind aufstellt?
Was ist das für ein keyword "def"?
"Insert Or Replace Into def (Select * from abc where monat = '?'")
Zuletzt geändert von
Mani99 am 7. Oktober 2009 10:52, insgesamt 1-mal geändert.
MichaelS
Beiträge: 240 Registriert: 27. Dezember 2005 12:49
Beitrag
von MichaelS » 7. Oktober 2009 10:40
Funktioniert das Statement wenn Du es direkt über sqlite absetzt?
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 11:18
mani: def soll ein tabellenname sein (probename)
und ja, es geht direkt in sqlite
NoRulez
Beiträge: 208 Registriert: 19. Juni 2007 15:43
Beitrag
von NoRulez » 7. Oktober 2009 11:56
Ich frage mich dennoch was Hochkomma in einem Bind-Statement zu suchen haben. Das ist nämlich die Aufgabe des SQL Interpreters.
LG NoRulez
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 13:37
Diskutieren wir jetzt über Hochkommatas oder über meine Frage?
NoRulez
Beiträge: 208 Registriert: 19. Juni 2007 15:43
Beitrag
von NoRulez » 7. Oktober 2009 13:48
Also ich sehe nur das Du eine Klammer falsch gesetzt bzw. vergessen hast oder es ein Copy&Paste Fehler ist:
Code: Alles auswählen
query.prepare("Insert Or Replace Into def (Select * from abc where monat = '?'"));
sollte doch eher wie folgt heißen
Code: Alles auswählen
query.prepare("Insert Or Replace Into def (Select * from abc where monat = '?')");
LG NoRulez
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 14:13
Also das ist ehrlich ein Copy and Paste Error
NoRulez
Beiträge: 208 Registriert: 19. Juni 2007 15:43
Beitrag
von NoRulez » 7. Oktober 2009 14:15
Könntest Du bitte die Tabellen definition zeigen, ich gehe davon aus das die Werte wie im ersten Post korrekt sind.
Vielleicht hat's mit dem Typ den Du übergibst etwas damit zu tun.
LG NoRulez
toem
Beiträge: 124 Registriert: 17. März 2009 14:01
Beitrag
von toem » 7. Oktober 2009 15:16
Monat ist in der Datenbank als char(2) festgelegt.
upsala
Beiträge: 3946 Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:
Beitrag
von upsala » 7. Oktober 2009 22:04
Schon mal in der Doku den Unterschied zwischen QSqlQuery::lastQuery und QSqlQuery::executedQuery gelesen?