Qt 两个 QSqltableModel 卡死

在Qt应用中,使用QSqlTableModel分别连接并显示表1和表2,当从一个表切换到另一个表再返回时,程序出现卡死,错误代码为0xC0000005。单独查询每个表正常,问题可能出在模型与视图的数据交互上。

两个通过QSqltableModel模型在QtableView上显示数据库数据的tab
tab1 中view1 绑定 model1 连接 表1
tab2 中view2 绑定 model2 连接 表2

单独查询1 和 2 可以正常显示,但查询1 再查询2 之后再点回1 的时候 就会卡死。
Process finished with exit code -1073741819 (0xC0000005)

    def sql_con(self):                                                                  #数据库连接
            db = QSqlDatabase().addDatabase('QODBC')                                    #数据库类型
            db.setDatabaseName('DRIVER={SQL SERVER};SERVER=127.0.0.1\\sqlexpress;DATABASE=WMSsql;Uid=CISDI;pwd=0314')
            db.open()                                                                    #(数据库驱动,服务器,数据库,用户名,密码)
            if db.open():
                print("connected")
                return db
 
 def showdata2(self, signal):                                                 #数据显示模块
        db2 = self.sql_con()                                                     #调用开启数据库
        tbmodel2 = QtSql.QSqlTableModel(None, db2)
        tbmodel2.setTable("pktable")                                             #设置数据源
        tbmodel2.setHeaderData(0, QtCore.Qt.Horizontal, '盘库号')
        tbmodel2.setHeaderData(1, QtCore.Qt.Horizontal, '盘库时间')
        tbmodel2.setHeaderData(2, QtCore.Qt.Horizontal, '盘库位置')
        tbmodel2.setHeaderData(3, QtCore.Qt.Horizontal, '盘库备注')
        tbmodel2.setHeaderData(4, QtCore.Qt.Horizontal, '是否盘库')
        tbmodel2.setHeaderData(5, QtCore.Qt.Horizontal, '物料编码')              #设置tableview表头
        tbmodel2.setHeaderData(6, QtCore.Qt.Horizontal, '名称')
        tbmodel2.setHeaderData(7, QtCore.Qt.Horizontal, '规格')
        tbmodel2.setHeaderData(8, QtCore.Qt.Horizontal, '数量')
        tbmodel2.setHeaderData(9, QtCore.Qt.Horizontal, '单价')
        tbmodel2.setHeaderData(10, QtCore.Qt.Horizontal, '供应商')
        tbmodel2.setHeaderData(11, QtCore.Qt.Horizontal, '采购人')
        tbmodel2.setHeaderData(12, QtCore.Qt.Horizontal, '采购时间')
        tbmodel2.setHeaderData(13, QtCore.Qt.Horizontal, '入库时间')
        tbmodel2.setHeaderData(14, QtCore.Qt.Horizontal, '入库备注')
        tbmodel2.setHeaderData(15, QtCore.Qt.Horizontal, '仓库')
        tbmodel2.setHeaderData(16, QtCore.Qt.Horizontal, '入库员')
        tbmodel2.setHeaderData(17, QtCore.Qt.Horizontal, '物料类别')
        tbmodel2.setHeaderData(18, QtCore.Qt.Horizontal, '存放位置')
        tbmodel2.setEditStrategy(QSqlTableModel.OnManualSubmit)
        tbmodel2.setSort(1, QtCore.Qt.DescendingOrder)
        if signal == 1:
            QApplication.processEvents()
            tbmodel2.select()                                                       			 #查询
        self.tablepk.setModel(tbmodel2)                                              #设置表格模式
        self.tablepk.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.tablepk.show()
        print("done")

两个基本上是这样 只是 名字不一样。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值