• 5655阅读
  • 2回复

求教:为什么我的数据库操作有延迟? [复制链接]

上一主题 下一主题
离线孤城夜雨
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-18
由于C++学习的需要,使用QT做了一个课程设计。但是在设计数据的操作时发现,无论是使用QSqlTableModel或者QSqlQuery类执行了响应的数据库操作,都有一定的延迟,具体表现为:
我将所有的信息呈现在了一个QTableView控件里,借助了setModel成员函数链接到QSqlTableModel的对象。
然后可以在右边使用添加或者删除。期中添加和删除都是用的QSqlTableModel里的操作,而修改是用的QSqlQuery里的exec函数执行的SQL语句。在添加和删除完毕后,我是利用关闭窗口再打开的方法企图重新刷新表格中的内容,在修改完成后,我是利用了select语句刷新表格中的内容。
但是问题来了,在大规模的测试中,我发现,所有的数据库操作都是可以执行的,但是表格中却不一定能够正确刷新(即使使用ACCESS打开mdb文件发现内容实际上是已经变动了)。我发现的结果是,(以修改为例),在修改完成后,点击修改按钮,程序弹出修改完成的提示,如果此时快速的点击确定,那么表格中的内容就很有可能没有刷新。如果在弹出修改完成的提示后稍等个1~2秒,然后再点击确定,那么表格信息一般就已经被刷新了。我怀疑QSqlTableModel与数据库的连接间存在一个缓冲,或者是QSqlQuery在执行时有个缓冲,造成有一个微小的延迟。诚如是,请问这个刷新操作如何才能做到最优化(指尽量实时性?)
求大神解释下!

窗体:

主要的源码:含有表格窗体的代码: EmployeeWorkingWidget.cpp ,修改信息窗体的代码:AviInfoModifyWidget.cpp
添加信息窗体的代码:AviInfoInsertWidget.cpp  
ODBC数据源信息:

源代码: AviManager.rar (801 K) 下载次数:27
数据库文件: mdb数据库文件.rar (11 K) 下载次数:8
工作人员登录密码和用户名:Employee  
离线ppdayz

只看该作者 1楼 发表于: 2011-05-18
楼主可以用下QDataWidgetMapper,把数据库里的信息映射到的表中,这样应该就可以了
离线孤城夜雨
只看该作者 2楼 发表于: 2011-05-18
谢LS,不过那个控件实在不会用。

另外我找到问题所在了,在于我添加修改时是又创建了一个连接,这个连接的操作可能与操作表的数据库之间的同步有延迟。我将修改添加时的数据库连接都用统一的连接,使用select语句即可成功更新了
快速回复
限100 字节
 
上一个 下一个