2017-02-16 8 views
1

私はPyQt5、sqlite3、およびpython3.5.2を使用して次の単純なモデルを用意しています。デシベルでQSqlRelationalTableModelは、最初の256個のレコードのみを取り込みます

行:model.select後831

行():256

それは初期と思われるモデルを実行

class choicesModel(QDialog): 
    def __init__(self, parent=None): 
     super(choicesModel, self).__init__() 

     query = QSqlQuery() 
     query.prepare("SELECT COUNT(*) FROM resident_choices") 
     query.exec_() 
     query.next() 
     dbrows = query.value(0) 
     print("rows in db: ", dbrows) 

     self.choicesModel = QSqlRelationalTableModel(self) 
     self.choicesModel.setEditStrategy(QSqlTableModel.OnManualSubmit) 
     self.choicesModel.setTable("resident_choices") 
     self.choicesModel.select() 
     rows = self.choicesModel.rowCount() 
     print("rows returned by model.select(): ", rows) 

は、次の出力を生成しますselectは、最初の256個のレコードのみを取り込みます。これはsqlite3の問題ですか、もしそうならば、すべてのレコードをどのように埋めるのですか(データベースには合計約850レコードしかありません)。どうすればすべてのレコードを強制的にロードできますか?

結論は、プロキシフィルタ条件を変更するまでは、プロキシモデルとプロキシビューを使用すると、最初はすべてのレコードが表示されないということです。つまり、残りのレコードの読み込みを開始する必要があります。

答えて

1

QSqlQueryModelクラスのレコード数は#define QSQL_PREFETCH 255とハードコードされています。それをオーバーライドするには、明示的にすべての行を自分でフェッチする必要があります:

while self.choicesModel.canFetchMore(): 
    self.choicesModel.fetchMore() 

あなた自身のサブクラスを作成する方がよいかもしれませんので、あなたはおそらく、このようなモデルが更新されるたびにコードを実行する必要がありますfetchMoreを再実装します。

+0

ご返信いただきありがとうございます。 – GM65

+0

問題を修正しました。 – GM65

関連する問題