QSqlQuery und Gespeicherte Prozeduren

Alles rund um die Programmierung mit Qt
Antworten
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

QSqlQuery und Gespeicherte Prozeduren

Beitrag 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.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag von FlorianBecker »

Ist die Error Ausgabe denn der databaseText(), oder der driverText()?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

Das kommt vom driverText().
Aber die Mysql lib ist ja ok. Sonst würde ja der Query Browser ja auch streiken.
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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:(
FlorianBecker
Beiträge: 1213
Registriert: 2. Dezember 2004 10:54
Kontaktdaten:

Beitrag 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?
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
qt_mummy
Beiträge: 1
Registriert: 8. November 2005 11:07

Beitrag 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())
...
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So habe es gerade mal versucht. Nur leider hat sich nichts geändert:(
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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??
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag 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.
BartSimpson
Beiträge: 1379
Registriert: 6. November 2004 12:03
Kontaktdaten:

Beitrag von BartSimpson »

So Trolltech hat den Bug aufgenommen.
Der aktuelle Status ist unter http://www.trolltech.com/developer/task ... y&id=93292 zu erfahren
Antworten