- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个我维护的数据库的小型管理应用程序。我所关注的表中的记录永远不会超过 1000 到 1500 条,而且只有大约八列数据。我查看它的表单是 QTableView 的子类,我正在使用 QSqlQueryModel 来填充它。多年来,我一直在 MSSQL 所在的服务器上运行这个应用程序,性能还可以,但有点迟钝……没什么大不了的。我特别预取所有数据,因为我不介意启动时的小延迟,以便在那之后获得更好的 UI 性能。表中大约有 1300 条记录。
我不能很容易地发布代码,但它并不复杂。
我需要做一些改进,因此出于开发目的,我从我的开发机器上运行它,SQL Server 端口通过中间服务器建立隧道。因此,我预计速度会有所放缓,但隧道性能良好,应该不会太戏剧化。
但是……太可怕了,无法使用。我找不到关于 QSqlQueryModel 如何在内部工作的文档,但基于性能,它似乎是与数据库的实时连接,即使我已经预取了所有数据。我无法滚动表格;响应滚动条的一次移动可能需要 20 或 30 秒。我发现 resizeRowsToContents 需要几分钟。与 TableView 的每一次微不足道的交互似乎都会引发巨大的延迟,我只能将其归因于与服务器的大量意外来回。
我进行了很多搜索并尝试了一些实验。首先,我删除了所有调整大小的行和列以消除影响(但我希望它恢复原样)。我在预取上设置了一个计时器,发现我在大约 18 到 19 秒内获得了所有数据。 (在这种情况下这是可以接受的。)
我想也许我应该只查询数据并构建自己的模型,所以我使用 QSqlQuery 创建了一个查询来获取相同的数据并循环遍历所有记录。它花费了 90 秒到 3 分钟不等。我已经使用“准备”并将 setForwardOnly 设置为 true。没有参数,所以没有绑定(bind)。
多年来,我广泛使用 Qt,但没有太多使用它访问 SQL 数据库的经验。文档描述了函数,但似乎假定我知道幕后发生的事情,所以我只是猜测。
首先,我正在寻求更好地了解 QSqlQueryModel 在与数据库表保持最新(如果有的话)方面在幕后做了什么。其次,我正在寻找一种技术,可以用最快的方式简单地从表中获取所有数据。之后我可以处理其他所有事情。
最佳答案
我通过在对查询调用“准备”之前添加对“setForwardOnly (true)”的调用来解决我的性能问题。自从我处理这个问题以来已经有一段时间了,但我认为我在“准备”之后调用了“setForwardOnly”,但没有用。
我继续使用 QSqlQueryModel 而没有切换到任何替代解决方案,因为这种改变满足了我的需求。
关于c++ - QSqlQueryModel 使用和性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53530143/
我有一个我维护的数据库的小型管理应用程序。我所关注的表中的记录永远不会超过 1000 到 1500 条,而且只有大约八列数据。我查看它的表单是 QTableView 的子类,我正在使用 QSqlQue
我有一个包含查询结果的 QSqlQueryModel 可以有几万行。 这个模型有两个用例: 一个用例,我需要完整的模型来计算行的一些统计信息; 一个用例,我想显示内容的概览。 我的问题是第二种情况,什
我使用QSqlQueryModel查询一个postgresql数据库,我发现数据库中所有的Infinity和-Infinity值( double )我使用 model->data(index, Qt:
我正在尝试使用 QSqlQueryModel 来从我的数据库中检索一些值,例如: QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL", "test
我在实现 QSqlQueryModel 时无法理解如何访问返回的元素。 我知道你可以做到 QSqlQuery 查询; query.prepare("select * from database");
我希望通过 QSqlQueryModel 查询 SQL 数据库(PyqQt 5/Qt 5.2) 异步,因此 GUI 不会阻塞。如何实现?也许通过多线程?请提供如何执行此操作的代码。如果异步使用 QSq
我只想处理数据库并将结果添加到模型并将其发送到另一个类并在 GUI 中查看。摘要代码为: 我有一个公共(public)类成员: QSqlQueryModel *model; 加载数据并将其添加到模型
我要为这个下层的每个结果计算新行 QSqlQueryModel *model = new QSqlQueryModel(); model->setQuery("SELECT height,age fr
我很少有组合框,其中包含大约 10 万行或更多行的非常挖掘的数据集。我尝试使用 QStandardItemModel - 如果预加载模型,工作速度足够快,如果在单独的线程中执行,模型加载也需要几秒钟。
我有一个名为 Load 的类,它从数据库中加载数据。另一类是将数据显示在表格中。在我返回 QSqlQueryModel 的函数中,它是:目前只是基本的,因为我无法编译它: QSqlQueryModel
我有一个 lineExdit 和一个 tableView,我想根据在 lineEdit 中输入的文本实时更新 tableView。 void updateTableView(QString *st)
我在正确转置从 db 收到的表时遇到问题。我按照找到的路径 here ,并最终继承了 QAbstractProxyModel - 如描述的那样 here .不幸的是,它不能完全工作,这就是问题所在:
我想在 qml TableView 中显示 QSqlQueryModel,但我不想为每个新查询创建单独的 QML 文件,因为我无法创建给定的无限 qml 文件 here .还有 question对于动
为了加快 QComboBox 处理非常大的数据集,想尝试使用 QSqlQueryModel 而不是 QStandardItemModel。然而,QComboBox 中的文本数据我需要映射到一个 ID,
我在将 QSqlQueryModel 与准备好的语句一起使用时遇到问题。手动执行语句时一切正常,但将其绑定(bind)到模型时 - 它不会执行。另一方面,当我使用“静态”查询(通过 QString)设
我正在尝试从 QSqlQueryModel 中删除一行,如下所示: void MainWindow::deleteRecord() { int row_index= ui->tableView
我有一个显示QSqlQueryModel 的QTableView。该模型包含在第一列的每一行中创建的复选框(其中包含 ref_no;我的数据库中的主键)如下所示: void MainWindow::s
我想从我的 SQlite 数据库中获取模型,当我在 QSqlQueryModel 中设置查询时,我可以获得行数、列数等。但是每列中的数据我有一个 ReferenceError 试图获取列名cpp代码:
如果我们使用以下 QT 功能从 SQL 数据库获取数据 QSqlQueryModel *model = new QSqlQueryModel; model->setQuery("SELECT na
我使用以下方法在 QTableView 中显示 select 语句的结果。我应该如何修改此代码以在同一 QTableView 中显示两个或多个不同选择语句的结果? QSqlDatabase db =
我是一名优秀的程序员,十分优秀!