У меня есть таблица node={id,name} и таблица segment={id,nodeFrom,nodeTo} в базе данных SQLite, где node.id и сегмент. id - поля AUTOINCREMENT.
Я создаю QSqlTableModel для Node следующим образом:
nodeModel = new QSqlTableModel(this,db);
nodeModel->setTable("Node");
nodeModel->setEditStrategy(QSqlTableModel::OnFieldChange);
и я использую следующий код для вставки узлов:
int addNode(QString name) {
QSqlRecord newRec = nodeModel->record();
newRec.setGenerated("id",false);
newRec.setValue("name",name);
if (not nodeModel->insertRecord(-1,newRec))
qDebug() << nodeModel->lastError();
if (not nodeModel->submit())
qDebug() << nodeModel->lastError();
return nodeModel->query().lastInsertId().toInt();
}
Кажется, это работает. Теперь для сегментов я определяю QSqlRelationalTableModel следующим образом:
segModel = new QSqlRelationalTableModel(this,db);
segModel->setTable("Segment");
segModel->setEditStrategy(QSqlTableModel::OnManualSubmit);
segModel->setRelation(segModel->fieldIndex("nodeFrom"),
QSqlRelation("Node","id","name"));
segModel->setRelation(segModel->fieldIndex("nodeTo"),
QSqlRelation("Node","id","name"));
И тогда у меня есть следующий код для вставки сегментов:
int addSegment(int nodeFrom, int nodeTo) {
QSqlRecord newRec = segModel->record();
newRec.setGenerated("id",false);
newRec.setValue(1,nodeFrom);
newRec.setValue(2,nodeTo);
if (not segModel->insertRecord(-1,newRec)) // (*)
qDebug() << segModel->lastError();
if (not segModel->submitAll())
qDebug() << segModel->lastError(); // (*)
}
Я могу успешно добавить 280 узлов, используя addNode(). Я также могу успешно добавить сегменты, если nodeFrom‹=256 и nodeTo‹=256. Для любого сегмента, ссылающегося на узел, больший или равный 256, я получаю
QSqlError("19", "Unable to fetch row", "Segment.nodeTo may not be NULL")
в одной из строк, отмеченных знаком (*) функции addSegment.
Я погуглил и обнаружил, что у людей возникают другие (очевидно, не связанные) проблемы, когда они достигают волшебного количества 256 записей. Кажется, что никакое решение не работает с этой конкретной проблемой.
Что я делаю неправильно?
Спасибо!