2010-12-20 5 views
1

Qtを使って(QSqlTableModel/QSqlDatabase /などを介して)MySQLデータベースに接続していますが、この質問はより一般的です。Qt/QSqlTableModelでMySQLデータベースをポーリングする(C++)

"ライブ更新データベーステーブルビュー"を取得する最も良い方法は何ですか? 1つのオプションは、常にテーブル全体をポーリングすることです(QSqlTableModelでselect()メソッドを繰り返し呼び出します)。 これは非効率的です(テーブル全体がMySQLからQtに毎回渡されますか?)

もう1つのオプションは、ログテーブルとして機能する(すべての更新/変更を追跡します)このログテーブルをポーリングすることができます(新しいエントリのみをチェックすると効率的です)。しかし、多くのQSqlビルトイン機能が失われます)。

または、私がポーリングするカウンタ変数を持っていなければなりません。それが増えると、テーブル全体をリフレッシュすることがわかりますか?

これらのアプローチはすべてちょっと混乱しているようです。何をお勧めしますか?ありがとう。

答えて

0

これは本当にMySQLの質問ですが、私は答えがあります! :)

実際には、X秒ごとにデータベースをポーリングする必要があります。しかし、行を挿入、更新、および/または削除すると、インジケータが作成されるように、MySQLの「トリガ」を作成すると効率的になるでしょう。

私は、変更された行を2番目のテーブルに挿入するトリガーを作成する必要があると思います。あなたのQtのプログラムからのポーリングがこれらのアクションを実行する必要があります。

  • は、第二の「修正」をロックテーブル
  • は、第二の「修正」
  • は、第二の「修正」の内容をすべて削除するには、テーブルの内容全体を読み、テーブルあなたが誤って読み取りおよび削除の間に挿入した新しい行削除できますテーブルをロックしていけない場合
  • は、第二の「修正」テーブル

のロックを解除します。ただし、ロックを回避する必要がある場合は、すべてを読み込んでから、「変更」表に各行を挿入することによって生成された一意のIDに基づいて取得した行を削除します。

MySQLのFAQとドキュメントはトリガーはここにある:ロック/アンロックテーブルのhttp://dev.mysql.com/doc/refman/5.0/en/faqs-triggers.html

ドキュメントはこちらです:http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

関連する問題