2011-04-09 4 views
0

J'ai une table SQLite avec potentiellement des centaines de milliers d'entrées, qui sont ajoutées (et parfois retirées) en arrière-plan à intervalles irréguliers. L'interface utilisateur doit afficher cette table dans un ordre trié arbitrairement sélectionné par l'utilisateur, dans un élément wxWidgets wxListCtrl.Comment créer une vue de table figée dans SQLite?

Je prévois d'utiliser un contrôle de liste wxLC_VIRTUAL, et d'interroger la table pour les petits groupes d'éléments au besoin en utilisant LIMIT et OFFSET, mais je prévois des problèmes. Lorsque le processus d'arrière-plan apporte des modifications aux éléments qui sont "au-dessus" des éléments actuellement affichés, je ne vois aucun moyen de savoir comment les décalages des éléments actuellement affichés vont changer.

Existe-t-il une astuce SQLite pour gérer cela? Peut-être est-il possible d'identifier le décalage d'un enregistrement particulier dans un ordre trié spécifique, sans parcourir tous les enregistrements renvoyés par une instruction SELECT?

Il existe également un moyen de créer une vue immuable de la base de données à un moment donné, sans qu'il y ait une duplication fastidieuse de celle-ci.

Si tout le reste échoue, je peux stocker les éléments modifiés et les ajouter plus tard, mais j'espère que je n'aurai pas à le faire.

Répondre

1

Résolu en créant une requête pour trouver l'index d'un article, en comptant le nombre d'éléments qui sont «inférieur à» (dans l'ordre défini par l'utilisateur) celui que je cherche. Un peu complexe à écrire, en raison de la commande définie par l'utilisateur, mais cela fonctionne, et fonctionne étonnamment vite, même sur une table énorme.

Questions connexes