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