Hi

I have an application with over a dozen tables and models on each.
Inserts, updates, selects and deletes work fine until one of my models
has over 256 rows. If I use query().finish() on the model things work,
except if it is a relation to another model, when I have to call
query().finish() on the relation as well.

This doesn't seem like a good way to go about things, so any
suggestions on what I am doing wrong would be appreciated. Should I
look at multiple threads?

Below is a small application that shows the problem.

Thanks in advance

Catriona


## Seems that problem occurs when there is a table (and optionally a
relation to that table)
## with more than 256 rows when the application is opened

import sys

from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4.QtSql import *

def main():
        def clearQuery(model):
                if model.query().isActive():
                        model.query().finish()
                        
        app = QApplication(sys.argv)
        
        # Create database
        db = QSqlDatabase.addDatabase("QSQLITE")
        db.setDatabaseName("test.db")
        db.open()
        
        query = QSqlQuery()     
        query.exec_("CREATE TABLE Relation("
                    "RelationId INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT 
NULL, "
                        "Relation VARCHAR NULL"
                    ")")
        
        query.prepare("INSERT INTO Relation(Relation) VALUES (?)")
        
        for i in range (0, 260): # If this is less than 256, insert will work
                query.addBindValue(QVariant(i))
                query.exec_()
                
        query.exec_("CREATE TABLE InsertTable("
                    "InsertTableId INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT 
NULL, "
                        "RelationId INTEGER NULL CONSTRAINT fk_relation 
REFERENCES
Relation(RelationId)"
                    ")")
        
        query.prepare("INSERT INTO InsertTable(RelationId) VALUES (?)")
        
        for i in range (0, 6):
                query.addBindValue(QVariant(1))
                query.exec_()   
                
        # Now create model
        insertModel = QSqlRelationalTableModel()
        insertModel.setTable("InsertTable")
        insertModel.setRelation(insertModel.fieldIndex("RelationId"),
QSqlRelation("Relation", "RelationId", "Relation"))
        insertModel.select()
        while insertModel.canFetchMore():
                insertModel.fetchMore()
        insertModelRelationModel = insertModel.relationModel(1) 
        
        # And do insert
        row = insertModel.rowCount()
        insertModel.insertRow(row)
        insertModel.setData(insertModel.index(row, 1), QVariant(str(2)))
        
        insertModel.database().transaction()
        insertModel.submitAll()
        clearQuery(insertModel) # If this is commented out insert will fail
        #clearQuery(insertModelRelationModel) # If this is commented out
insert will fail
        insertModel.database().commit()
        
main()
_______________________________________________
PyQt mailing list    [email protected]
http://www.riverbankcomputing.com/mailman/listinfo/pyqt

Reply via email to