'Всем привет,
У меня есть форма с табличным представлением, представляющим QSqlRelationalTableModel и виджеты, связанные с одной и той же моделью через QDataWidgetMapper.
Вот структура таблицы:
queryString = QString("CREATE TABLE t100000_Stations ("
"RecordID INTEGER PRIMARY KEY AUTOINCREMENT,"
"StationID TEXT UNIQUE, "
"ProjectID TEXT, "
"LocalName TEXT, "
"StationType TEXT REFERENCES t911000_StationTypes(StationType), " // We have to link station type to a table (maybe parameters)
"Easting DOUBLE NOT NULL, "
"Northing DOUBLE NOT NULL, "
"Latitude DOUBLE, "
"Longitude DOUBLE, "
"LatLonDatum TEXT, "
"CoordinateSystem TEXT, "
"Elevation DOUBLE, "
"ElevationType INTEGER REFERENCES t908000_ParameterTypes(ParameterID), " // Same here
"ElevationDatum TEXT, "
"SurveyMethod TEXT, "
"Surveyor TEXT, "
"SurveyDate DATETIME, "
"LandTenure TEXT, "
"Region TEXT, "
"MiningLease TEXT, "
"Comments TEXT,"
"Source TEXT NOT NULL, "
"SourceDate DATETIME NOT NULL, "
"EntryAuthor TEXT NOT NULL, "
"EntryDate DATETIME NOT NULL)"
);
Форма безупречно отображает записи и отношения, включая поля со списком и делегаты табличного представления для полей отношений. Моя проблема в том, что любые изменения в значениях таблицы не передаются обратно в базу данных.
После долгих попыток я изменил setEditStrategy на OnManualSubmit. Я добавил вызов submitAll() в деструктор формы для обновления базы данных, но он возвращает false и выдает следующее сообщение об ошибке:
"около ".": синтаксическая ошибка. Невозможно выполнить оператор"
Я видел на какой-то странице, что это может быть связано с первичным ключом. Я сделал следующую команду в режиме отладки:
QString tempString = tableModelStations->primaryKey().name();
но строка оказалась пустой, что заставляет меня поверить, что проблема действительно была в первичном ключе.
Затем я создал подкласс QSqlRelationalTableModel, чтобы реализовать функцию setPrimaryKey() и сделать это вручную, но с этим тоже не повезло.
Может ли кто-нибудь пролить свет на:
Почему submitAll() не работает
Как получить доступ к оператору, используемому submitAll()