Select mit Platzhaltern

Alles rund um die Programmierung mit Qt
Antworten
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Select mit Platzhaltern

Beitrag von toem »

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 »

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 »

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 »

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 »

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 »

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 »

Funktioniert das Statement wenn Du es direkt über sqlite absetzt?
toem
Beiträge: 124
Registriert: 17. März 2009 14:01

Beitrag von toem »

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 »

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 »

Diskutieren wir jetzt über Hochkommatas oder über meine Frage?
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

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 »

Also das ist ehrlich ein Copy and Paste Error
NoRulez
Beiträge: 208
Registriert: 19. Juni 2007 15:43

Beitrag von NoRulez »

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 »

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 »

Schon mal in der Doku den Unterschied zwischen QSqlQuery::lastQuery und QSqlQuery::executedQuery gelesen?
Antworten