German DBCursor richtig nutzen

Alexander Stolte

Well-Known Member
Licensed User
Guten Tag,

Ich bin vor kurzem direkt in eine Wand gefahren, ich wusste nicht das der DBCursor eine Maximal Größe von 2 MB hat. So ist meine Vorgehensweise: Bekomme Pakete von der Datenbank, diese schreibe ich in eine SQLite Datenbank lokal auf den Handy. Ist das passiert, dann kann die Befüllung der Liste beginnen, dazu SELECTE ich alles aus dieser relevanten Datenbank die, die Pakete beinhaltet. Und packe diese in einen Cursor. Dann kommt eine Schleife wo ich meiner Liste die passende Position die, bei der Befüllung der views wichtig ist, damit der Cursor richtig steht. Nach dieser Schleife werden die Views mit Daten Befüllt und wissen anhand der id von der Schleife welche Position der Cursor haben muss.

Jetzt ist aber die Problematik mit den 2 MBs. Informatix hat mir zwar gesagt wie ich das in der Theorie angehen kann, aber nach Stunden des Probierens schaffe ich es einfach nicht einen passenden Algorithmus zu schreiben.

Die empfohlene Vorgehensweise ist folgende: den cursor immer mit einen Ergebnis eines SELECTES Befüllen, dann die Liste bauen und dann zum nächsten Item gehen. Einfach ein LIMIT ?,1 setzen und gut ist, ABER sobald ich ich scrolle updatet er diese Liste bzw lädt er die Visuellen neu, sonst hat er ja immer die richtige Cursor Position direkt gehabt, jetzt hab ich einfach den Count in eine Variable gepackt und nach dem 1. Befüllen -1 gesetzt und abgefangen wenn die Variable kleiner als 0 ist. Beim scrollen aber ist die Variable bereits bei 0 und ich bekomme immer die gleichen Sachen angezeigt.

Was könnt Ihr mir Raten? Ist das mit der Variable so richtig? Oder wie kann ich das ändern? Alternativen zum Cursor?
 

Alexander Stolte

Well-Known Member
Licensed User
Gelöst. Dank eines weiteren Denkanstoßes.

Wenn man neue Daten aufnimmt, eine Variable hinzufügen wo man dann einen Count ausführt, das ist dann die Basis.

Mit einer schleife dann die Layouts hinzufügen mit der ID die man dann als Count bekommen hat -1.

Im Content dann ganz einfach diese id nutzen folgendermaßen:

B4X:
    dbCursor = Main.dbSQL.ExecQuery("SELECT * FROM words WHERE rowid=" & (meineVariable + 1))
so hat man immer eine Spalte im Cursor, statt die ganze Datenbank wie es die 2 MB zulässt :cool:.

In meinen Fall arbeite ich mit der UltimateListView, wie es mit der normalen ListView aussieht, werde ich erst sehen wenn ich die IOS App anfange.
 
Top