Seite 1 von 1
QSqlQuery und Gespeicherte Prozeduren
Verfasst: 2. November 2005 17:29
von BartSimpson
Hallo ich wollen aus einer MySQL DB Daten abrufen, die eine gespeicherte Prozedur liefert.
Hier der Code:
Code: Alles auswählen
QSqlQuery Abfrage(Datenbankverbindung);
Abfrage.prepare("CALL ListeAllerLiefererNachName()");
if(!Abfrage.exec())
{
ok=false;
Fehler=Abfrage.lastError().databaseText() +"\r\n"+Abfrage.lastError().driverText();
}
else
{
Datenmodell->setQuery(Abfrage);
ok=true;
}
nur leider geht exec() schief.
Es wird der Fehler ausgeworfen:
"can't return a result set in the given context
An der MySQL Konsole liefert die Prozedur die Daten.
Verfasst: 7. November 2005 13:03
von FlorianBecker
Ist die Error Ausgabe denn der databaseText(), oder der driverText()?
Verfasst: 7. November 2005 14:04
von BartSimpson
Das kommt vom driverText().
Aber die Mysql lib ist ja ok. Sonst würde ja der Query Browser ja auch streiken.
Verfasst: 7. November 2005 14:34
von FlorianBecker
Das ist extrem doof. Ich nehme an, dass es funktioniert, aber ich kann es nicht wirklich sagen. Also am Besten ist es vielleicht, wenn du dich an das Problem langsam herantastest. Also Zeile für Zeile auseinander zunehmen und abzuchecken, wo das Problem liegt.
Deine Fragmente sehen fehlerfrei aus, es könnte an der Datenbankverbindung liegen. Vielleicht gibt deine Funktion allerdings auch für den Qt Treiber unmögliche Values zurück, so das er diese nicht verarbeiten kann. Trotzdem bin ich der Meinung, dass es gehen müsste.
Verfasst: 7. November 2005 14:43
von BartSimpson
wenn ich an der gleiche stelle eine simples select schreibe(was auch in der Prozedure steht) dann geht es. Nur wenn die Select Anweisung per gespeicherter Prozedur ausgeführt wird, klemmt es:(
Verfasst: 7. November 2005 22:00
von FlorianBecker
Puh, dann scheint es wirklich ein Fehler im Treiber von Qt zu sein. Gibt es dazu weitere bzw. ähnliche Informationen auf dem Qt Mailinglisten?
Verfasst: 7. November 2005 23:45
von BartSimpson
auf der englischen Liste habe ich bisher nix gefunden. Da hatte ich die Frage auch mal gestellt. Aber dort hatte es noch keiner bisher versucht.
Verfasst: 8. November 2005 11:12
von qt_mummy
Ein ähnliches Problem hatte ich unter einem anderen DBMS.
Abhilfe brachte das umschalten auf Forward Only Cursor wie folgt :
Code:
...
QSqlQuery Abfrage(Datenbankverbindung);
[b]Abfrag.setForwardOnly( true);[/b]
Abfrage.prepare("CALL ListeAllerLiefererNachName()");
if(!Abfrage.exec())
...
Verfasst: 8. November 2005 12:21
von BartSimpson
So habe es gerade mal versucht. Nur leider hat sich nichts geändert:(
Verfasst: 9. November 2005 14:40
von BartSimpson
So hatte jetzt auch mal den neusten Snapshot der Qt 4.1'er versucht. Leider auch ohne Erfolg. Hat jemand eine Idee was man nun machen könnte??
Verfasst: 11. November 2005 16:02
von BartSimpson
Dach weiteren Test hat sich eindeutig herrausgestellt, das es an Qt liegt. Ich habe jetzt Trolltech ein Bugreport geschickt. Mal schauen was und wann Sie antworten.
Verfasst: 16. November 2005 14:58
von BartSimpson
So Trolltech hat den Bug aufgenommen.
Der aktuelle Status ist unter
http://www.trolltech.com/developer/task ... y&id=93292 zu erfahren