QSqlQuery/numRowsAffected - bei update

Alles rund um die Programmierung mit Qt
Antworten
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

QSqlQuery/numRowsAffected - bei update

Beitrag von pfid »

Hallo,

ich möchte mit Qt (4.2) ein kleines MySql frontend bauen. Das ganze recht simpel, 2 QTextEdit Felder, das eine für die SQL Befehle, das andere in dem das Ergebnis steht (read-only).
Select queries schreibe ich dann in Feld2, in einen QTextTable. Drunter kommt noch die Info, wieviel Rows gefunden wurden - per query.numRowsAffected().
Klappt so weit gut, allerdings klappts nicht mehr bei z.b. update Queries. Da sagt mir numRowsAffected 0, und query.size() -1. Tatsächlich wurde aber z.b. eine Row aktualisiert (was ein nachfolgendes select zeigt).

Hat jemand nen Hinweis, wie man das ordentlich löst? Hatte erst die Idee QSqlResult zu verwenden, weil ich mir vorgestellt hatte dass dort in irgendeiner Form die Sql Rückgabemeldung drin steht. Aber so wies aussieht, ists auch nur der QSqlQuery Vorgänger.

Gibt es denn ne Möglichkeit, direkt auf die Meldungen von MySql zuzugreifen? Also bei "use [database];" oder "show tables;" kommt z.b. beim MySql Tool ne entsprechende Meldung ("Database changed" o.ä.). Müsste ich die selber bauen, oder sind die irgendwo als Auswertung enthalten?



Dann hätte ich noch eine 2. Frage. Wie oben schon beschrieben, kommen die Queryresults/records in ein 2. QTextEdit. Sofern es Records sind, kommen diese in eine Tabelle. Diese leg ich mit

cursor = textEdit.textCursor();
table = cursor.insert...

an. Klappt so weit auch, allerdings werden die Tabellen zum Teil an falschen Positionen eingefügt, wenn man z.b. im QTextEdit ein bisschen nach oben scrollt, und somit nicht ganz am Ende des Dokuments ist. Das liegt vermutlich daran, dass sich der cursor von textEdit.textCursor() nicht am Ende des Dokuments befindet, wenn man hochscrollt, und somit die Tabelle irgendwo in der Mitte eingefügt wird.
Damit das QTextEdit Feld nach dem füllen mit Queries automatisch nach ganz unten scrollt, setze ich den Cursor manuell ans Ende vom Dokument. Das würde mir vermutlich auch bei dem Problem der Tabellen mitten im Dokument helfen, indem ich den Cursor ans Ende schiebe bevor ich die Tabellen einfüge?
Ist das der korrekte weg, oder gibt es eine bessere Möglichkeit, im QTextEdit ans ende zu scrollen?

Danke im Voraus :)
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

SELECT sollte bei size etwas ausgeben, UPDATE & Co sollte bei numRowsAffected etwas ausgeben. Wenn bei dir bei UPDATE nichts ausgegeben wurde, könnte das daran liegen, daß die zu ändernden Zellen schon den passenden Inhalt hatten.

Man kann den QTextCursor auch ans Ende des Dokuments springen lassen, und dann dort weiter arbeiten. Notfalls mit einem 2. QTextCursor.
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

upsala hat geschrieben:SELECT sollte bei size etwas ausgeben, UPDATE & Co sollte bei numRowsAffected etwas ausgeben. Wenn bei dir bei UPDATE nichts ausgegeben wurde, könnte das daran liegen, daß die zu ändernden Zellen schon den passenden Inhalt hatten.
Nein, ist nicht der Fall.
Antworten