SQL Query und bindValue()

Verschiedenes zu Qt
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

SQL Query und bindValue()

Beitrag 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
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag 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();
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Beitrag von Baz »

Nein das hat leider auch nicht geklappt... er ersetzt die Platzhalter einfach nicht, keine Ahnung warum - sehr schade :|
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Welches Qt, welcher Datenbank-Server, was kommt bei der Datenbank an (Logfiles?)
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Beitrag 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).
dhcase
Beiträge: 132
Registriert: 10. Juni 2006 20:38

Beitrag von dhcase »

Lass dir doch mal mit query.lastError() die Fehlermeldung ausgeben...
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Beitrag 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...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

QSqlQuery::executedQuery() oder QSqlQuery::lastQuery()?
Baz
Beiträge: 67
Registriert: 22. August 2007 14:21

Beitrag von Baz »

Das war mit query.lastError() - mittlerweile bin ich auch zuhause, ich werd morgen mal das andere probieren und schauen was dabei rauskommt.
thommy1267
Beiträge: 8
Registriert: 14. Juni 2005 12:43

Beitrag 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
die dümmsten Programmierer haben die dicksten Programme
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
thommy1267
Beiträge: 8
Registriert: 14. Juni 2005 12:43

Beitrag 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
die dümmsten Programmierer haben die dicksten Programme
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Code: Alles auswählen

qDebug() << query.lastQuery();
query.exec(); 
Falsche Reihenfolge. Es kann keine 'lastQuery' geben, wenn noch keine ausgeführt wurde...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Desweiteren kann
QSqlError(-1, "", "")
auch bedeuten, daß es gar keinen Fehler gegeben hat.
Antworten