• 10116阅读
  • 8回复

QSqlTableModel如何动态更新 [复制链接]

上一主题 下一主题
离线qylibohao
 
只看楼主 倒序阅读 楼主  发表于: 2010-09-27
— 本帖被 XChinux 从 General Qt Programming 移动到本区(2011-01-02) —
本人在写一个数据库连接程序,用QSqlTableMoldel连接数据库,跟QTableView绑定,然后将QTableView放到QDockWidgetl里面。

我在构造函数里面 new QSqlTableModel;   new QTableView;  在数据库打开后对SqlTableModel 进行SetTable() 和Select();

然后绑定tableview->setModel();   但是连接后发现tableview没有显示连接的数据,还是一片空白。 我把new QSqlTableModel 放到

数据库连接函数里面,然后跟tableView绑定,这样是可以显示数据库数据的,但是这样每打开一次数据库名就new了一个QSqlTableModel

超过两次之后关闭程序就出现错误
QSqlQueryPrivate::~QSqlQueryPrivate()
{
    QSqlResult *nr = nullResult();
    if (!nr || sqlResult == nr)
        return;
    delete sqlResult;
}
错误就在最后一句delete里面。

请问如果在构造函数里面就newQSqlTableModel了,有没有通知model更新数据的方法。
如果我在数据库连接函数里面才new QSqlTableModel 有没有方法解决这个错误。

离线qylibohao
只看该作者 1楼 发表于: 2010-09-28
看来很冷清
离线抠涕
只看该作者 2楼 发表于: 2010-09-28
在构造函数里面 new QSqlTableModel;
应该是没问题的, 你指定数据库了么, 貌似还需要 model->select() 一下吧。

是很冷清的。。。
离线qylibohao
只看该作者 3楼 发表于: 2010-09-28
我在构造函数里面new 了sqltablemodel  ,连接数据库成功了之后再:
_sqlTableModel->setTable(currentTableName);
_sqlTableModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
_sqlTableModel->select();
_tableView->setModel(_sqlTableModel);
但是不显示数据。
如果我在连接数据库成功后再new sqltablemodel 的话它能显示,但是如果这样子我再连接另外一个数据库之后也没问题,
就是关闭程序的时候出现了delete错误,我想应该是new了两个sqltablemodel的问题。现在都不知道如何解决,看看有没有
牛人帮忙解答这个问题吧。。
离线抠涕
只看该作者 4楼 发表于: 2010-09-28
new QSqlTableModel 的时候,如果不指定db, 会用默认的链接。
但是按照你的顺序, 你是new 了之后才链接数据库, 所以model 没有跟数据库连接上的。

你应该把db open 之后再new model
离线qylibohao
只看该作者 5楼 发表于: 2010-09-28
我想也是这个问题,但是我连接数据库之后new的话,这样没打开连接对话框连接一次我就new 了一次sqltablemodel 两次之后就出错了
,就是这个问题困扰着我,推出的时候老是提示错误。不知道需不需要手动删掉以前的sqltablemodel呢?
离线mnsms

只看该作者 6楼 发表于: 2011-02-19
QSqlTableModel只需要new一次!!
在构造函数中new QSqlDatabase,open,new QSqlTableModel,model select,view中有显示。
不需要数据库连接后,close database,view不显示。
需要重新连接时open database,model select,view恢复显示。
记得用成员变量存储database和model的指针。
[ 此帖被mnsms在2011-02-19 13:25重新编辑 ]
离线mylearnhappy
只看该作者 7楼 发表于: 2011-03-04
你可以设置一个刷新按钮,点击后显示数据库中的信息
离线mylearnhappy
只看该作者 8楼 发表于: 2011-03-04
还有你在tablemodel初始化的时候一定要让它指向所选择的数据库
_sqlTableModel=new QSqlTableModel(0,database);
其中database是你指向的数据库对象,先验证你是否连接上了数据库,可以试着让它执行一条SQL语句,用qDebug()输出查询结果
快速回复
限100 字节
 
上一个 下一个