이상의 레코드가 더 삽입 한 테이블 세그먼트 = {ID, nodeFrom, nodeTo}는 SQLite는 DB 여기서 node.id 세그먼트이다. id는 AUTOINCREMENT 필드입니다. 다음과 같이QSqlRelationalTableModel - I 테이블을 <strong>노드</strong> = {ID, 이름}이 256
나는, 노드에 대한 QSqlTableModel을 만드는거야 :
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();
}
이 작동하는 것 같다. 이제 다음과 같이, 세그먼트에 대한 I는 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(); // (*)
}
내가 addNode 명을 사용하여 성공적으로 280 노드를 추가 할 수 있습니다(). nodeFrom < = 256 및 nodeTo < = 256 인 경우 세그먼트를 성공적으로 추가 할 수도 있습니다. 노드 (256)보다 크거나 동일한 참조하는 모든 세그먼트에 대한 I는 라인들 중 하나에
QSqlError("19", "Unable to fetch row", "Segment.nodeTo may not be NULL")
는 (*)의 addSegment 함수로 표시 얻는다.
저는 인터넷 검색을 통해 사람들이 마법적인 256 레코드 수를 기록했을 때 다른 (분명히 관련이없는) 문제를 겪고 있음을 알았습니다. 이 특정 문제에 대한 해결책은 없습니다.
내가 뭘 잘못하고 있니?
감사합니다.