Seite 1 von 2

SQL Query und bindValue()

Verfasst: 9. November 2007 16:05
von Baz
Hi,

ich weiß nicht genau warum, aber bei mir funktioniert die addBindValue() bzw bindValue() Funktion einfach nicht. Ich hab jetzt schon diverse Beispiele auch ausprobiert, aber es ist immer wieder das Gleiche, die Fragezeichen bzw. Platzhalter werden einfach nicht ersetzt (ich lasse mir das Statement als QString ausgeben)
Hier mal ein Beispielcode, bei dem ich einfach nicht verstehe, warum es nicht funktioniert

Code: Alles auswählen

query.prepare("SELECT * FROM users WHERE username = ? AND password = ? ");
query.bindValue(0, username);
query.bindValue(1, password);
Falls jemand eine Idee hat wäre ich ihm dankbar :)

Gruß Baz

Verfasst: 9. November 2007 16:11
von dhcase
Versuch mal so:

Code: Alles auswählen

query.prepare("SELECT * FROM users WHERE username = :username AND password = :pwd "); 
query.bindValue(":username", username); 
query.bindValue(":pwd", password);
query.exec();

Verfasst: 11. November 2007 14:42
von Baz
Nein das hat leider auch nicht geklappt... er ersetzt die Platzhalter einfach nicht, keine Ahnung warum - sehr schade :|

Verfasst: 11. November 2007 16:41
von upsala
Welches Qt, welcher Datenbank-Server, was kommt bei der Datenbank an (Logfiles?)

Verfasst: 11. November 2007 17:30
von Baz
Ich benutze 4.3.2 und mysql. Ist die Datenbank relevant? Ich habe mir einfach das SQL-Statement des Querys ausgeben lassen nachdem es ausgeführt wurde und dort waren die Platzhalter nicht ersetzt. Was bei der Datenbank genau ankommt, das müsste ich nachher mal schauen, momentan hab ich grad nicht die Möglichkeit (es wird aber nichts in die DB eingetragen, das hatte ich auch schon probiert).

Verfasst: 11. November 2007 17:39
von dhcase
Lass dir doch mal mit query.lastError() die Fehlermeldung ausgeben...

Verfasst: 11. November 2007 17:48
von Baz
"SELECT * FROM users WHERE username = ? AND password = ? "
QSqlError(-1, "", "")
Das ist das was bei rauskommt. Oben ist das Statement nachdem das Query ausgeführt wurde (hier mit ? als Platzhalter). Dass NIchts zurückkommt bei dem Statement ist ja nicht weiter verwunderlich - die DB funktioniert auch, wenn ich die Strings einfach so ins SQL-Statement einbaue, ist es ja kein Problem, aber ich fände es so viel schicker und praktischer...

Verfasst: 11. November 2007 18:38
von upsala
QSqlQuery::executedQuery() oder QSqlQuery::lastQuery()?

Verfasst: 11. November 2007 19:53
von Baz
Das war mit query.lastError() - mittlerweile bin ich auch zuhause, ich werd morgen mal das andere probieren und schauen was dabei rauskommt.

Verfasst: 26. Februar 2008 20:29
von thommy1267
Hallo zusammen,

habe das gleiche Problem, kann einfach keine Parameter übergeben.

Nutze PostgreSQL. Kann machen was ich will :roll:

Ich gehe davon aus das die Doku stimmt und es sich um ein Bug von Qt handelt.

Gruß
Thomas

Verfasst: 26. Februar 2008 20:39
von upsala
Qt-Version? Code? Fehlermeldung? Was kommt bei der Datenbank?

Habe hier mit Postgres8.3 keine Probleme, obwohl dies eigentlich von Qt noch nicht unterstützt wird...

Verfasst: 26. Februar 2008 23:21
von thommy1267
Hallo upsala,

Qt Version 4.3.3

Code:

query.prepare( "insert into kopfzeile(positionsnummer, gutschriftennummer, "
"gutschriftdatum, solldatum, sped_orgid, sped_codierung, versandstelle_orgid, "
"versandstelle_codierung, buendelungskriterium, strecke) values("
"?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" );

query.bindValue(0,Positionsnummer);
query.bindValue(1,Gutschriftsnummer);
query.bindValue(2,Gutschriftsdatum);
query.bindValue(3,Solldatum);
query.bindValue(4,SpedOrgid);
query.bindValue(5,SpedCodierung);
query.bindValue(6,VersandstelleOrgid);
query.bindValue(7,VersandstelleCodierung);
query.bindValue(8,Buendelungskriterium);
query.bindValue(9,Strecke );
qDebug() << query.lastQuery();
query.exec();
qDebug() << query.lastError();

Fehlermeldung:
QSqlError(-1, "", "")

Ich habe es wirklich in allen Versionen ausprobiert..

Gruß
Thomas

Verfasst: 27. Februar 2008 07:45
von Christian81
Probiere es endlich mal so wie dhcase es gezeigt hat - mit Platzhaltern anstatt mit Indizes. Indizes sind imo sehr gefährlich da , sobald sich im Statement eine Reihenfolge ändert/was hinzukommt, alle Indizies falsch sein können.

Verfasst: 27. Februar 2008 09:05
von upsala

Code: Alles auswählen

qDebug() << query.lastQuery();
query.exec(); 
Falsche Reihenfolge. Es kann keine 'lastQuery' geben, wenn noch keine ausgeführt wurde...

Verfasst: 27. Februar 2008 12:21
von upsala
Desweiteren kann
QSqlError(-1, "", "")
auch bedeuten, daß es gar keinen Fehler gegeben hat.