質問
これは私の問題です。ログメッセージをたくさん保管する必要があり、それを簡単に検索してフィルタリングできるようにSQLite3データベースに保管するのが賢明だと思いました。
ログメッセージを標準リストウィジェットに表示します(wxWidgetsを使用)。リストには複数の列があり、ユーザーがソートおよびフィルタリングできます。
現在、これを処理する最善の方法はわかりません。私はいくつかの可能な解決策を考えています:
- すべてのメッセージをメモリに読み取ります。 (リスト内のランダムな位置に)新規または変更されたログメッセージがある場合、リスト全体を更新する必要があります。ユーザーがリストをフィルタリングしたり、別の列でソートしたりする場合も同じです。
- すべてのIDを配列に読み込み、オンデマンドで完全なログメッセージを取得します(ユーザーがリストをスクロールして表示されるようにします)。
- SQLインターフェースを使用してオンデマンドで結果をフェッチし、SQLを使用して必要なサブ結果を正確に選択します。
しかし、実際、私はこの種の問題を扱うことに慣れていないので、どんなヒントでも大歓迎です!
解決
ページネーションを使用してどうですか?
SELECT *
FROM logs
WHERE ...
ORDER BY ...
LIMIT offset, count
オフセットとカウントは、選択可能な値です。これを使用して、任意の数のログエントリを取得できます。次に、次のボタンを追加して、ユーザーがエントリの次のページを表示できるようにします。フィルタリングおよびソート機能と組み合わせて、ログ検索はこれ以上簡単になりません。
他のヒント
ナディアの答えへのコメントとしてこれを書き始めましたが、私はとりとめを始め、長すぎました:)
ログエントリの数が非常に多くなると、スクロールバーが使用できなくなることに注意してください。スクロール内の最も小さな動きは、リスト内を劇的に移動することになります。そのため、ユーザーがリストの検索に使用することは実用的ではありません。
これらのエントリをユーザーが実際に見ている理由を考え、その周りを設計します。非常に大きなリストは、コードで作業するのが難しいだけでなく、ユーザーが作業するのも困難です。私はおそらく彼らにいくつかのフィルター基準とページングされた結果を与えるでしょう。
所属していません StackOverflow