Seite 1 von 1
QSqlQuery
Verfasst: 19. Oktober 2011 15:22
von redbulls
Hallo
Wenn ich in einer Datenbank eine große Datenmenge abfrage, kommen z.b 20000 Datensätze zurück. Ich will in meiner Tabelle aber nur
10000 anzeigen und die anderen 10000 nur bei Bedarf.
Ist es sinnvoll, wenn man den QSqlQuery nach dem exec an die Klasse zurückgibt und sie dann bestimmt wann und wieviele Daten ausgelesen werden.
Oder sollte man das anders lösen?
danke
Re: QSqlQuery
Verfasst: 19. Oktober 2011 15:37
von franzf
Hilft dir nicht das SQL-Keyword "LIMIT"?
Re: QSqlQuery
Verfasst: 19. Oktober 2011 15:42
von redbulls
Danke für die Antwort
Unter oracle z.B gibts kein LIMIT(es gibt zwar einen workaround, aber das möchte ich nicht) und ich weiß ja nicht bei welchem datensatz ich stehen geblieben bin, weil ich kein order by verwende.
ich möchte alle Daten bekommen, diese aber nach bedarf anzeigen.
Re: QSqlQuery
Verfasst: 19. Oktober 2011 16:09
von redbulls
weiß niemand, ob man das machen kann?
Re: QSqlQuery
Verfasst: 19. Oktober 2011 18:53
von Christian81
Ein ordentlicher Datensatz hat eine Unique ID. Damit kann man auch queries bauen.
Re: QSqlQuery
Verfasst: 19. Oktober 2011 22:53
von redbulls
Ich möchte das query aber nur einmal absetzen und alle Daten im Speicher halten.
Ich wollte nur wissen, ob die Lösung mit dem qsqlquery einen haken hat(im sinne von Datenbank quälen ) . Wenn Ja könnte ich mir einen anderen Behälter
bauen.
Re: QSqlQuery
Verfasst: 31. Oktober 2011 18:20
von Troll.Soft
redbulls hat geschrieben:Ich wollte nur wissen, ob die Lösung mit dem qsqlquery einen haken hat(im sinne von Datenbank quälen )
Deine Lösung hat natürlich einen Haken. Du quälst nicht nur die Datenbank sondern besonders Dein Programm, wenn z.B.: 2 Millionen Records zurückkommen. Speichermangel, Game over!
Habe mal neugierig gegoogelt. Oracle kennt ein limit Konstrukt. Ist nur ein Tick umständlicher als mySql.
Code: Alles auswählen
SELECT f_name, l_name, age
FROM
( SELECT f_name, l_name, age, ROWNUM r
FROM
( SELECT f_name, l_name, age FROM employee_data
ORDER BY age DESC
)
WHERE ROWNUM <= 40
)
WHERE r >= 21;
fand sich so bei
http://www.club-oracle.com/forums/limit ... -sql-t637/
Das Order By kannst du sicherlich weglassen.
tschüß
Troll.Soft